当我们需要从一堆数据中找到某种趋势时,拟合函数是很好的工具。拟合函数的目标是通过最小化观察数据与拟合数据之间的残差来找到最佳拟合线。其中,线性拟合和三次多项式拟合都是常用的拟合方法之一。
本文将对使用Python拟合函数进行详细讲解,包括以下步骤:
1.导入所需的库
2.创建示例数据
3.绘制数据散点图
4.使用线性拟合函数
5.使用三次多项式拟合函数
导入所需的库
我们将使用numpy和matplotlib库来生成数据和绘图,使用scipy库中的polyfit函数来实现拟合功能。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
创建示例数据
我们使用numpy库的random函数生成一个包含噪声的数据集。
x = np.linspace(0, 10, 50)
y = 3 * x - 2 + np.random.randn(len(x))
绘制数据散点图
使用matplotlib库将数据绘制出来,以便我们可以更直观的看到它们的分布情况。
plt.scatter(x, y)
plt.show()
使用线性拟合函数
利用numpy库的polyfit函数,我们可以使用线性方程来拟合示例数据集,并返回一些参数,如斜率和截距。
# 定义线性函数,y=kx+b
def linear_func(x, k, b):
return k * x + b
# 利用polyfit拟合数据并得到拟合参数
popt, pcov = curve_fit(linear_func, x, y)
# 打印拟合参数
print("斜率k:", popt[0])
print("截距b:", popt[1])
# 绘制数据散点图和拟合曲线
plt.scatter(x, y)
plt.plot(x, linear_func(x, *popt), 'r-')
plt.show()
输出结果:
斜率k: 2.9884073745021128
截距b: -1.9655843689855001
可以看到,拟合函数计算得到的斜率很接近实际的斜率,截距也很接近实际截距。
使用三次多项式拟合函数
跟线性拟合类似,我们用示例数据拟合一个三次多项式方程,并得到相关参数。
# 定义三次多项式函数,y=ax^3+bx^2+cx+d
def cubic_func(x, a, b, c, d):
return a*x**3 + b*x**2 + c*x + d
# 利用polyfit拟合数据并得到拟合参数
popt, pcov = curve_fit(cubic_func, x, y)
# 打印拟合参数
print("系数a:", popt[0])
print("系数b:", popt[1])
print("系数c:", popt[2])
print("截距d:", popt[3])
# 绘制数据散点图和拟合曲线
plt.scatter(x, y)
plt.plot(x, cubic_func(x, *popt), 'r-')
plt.show()
输出结果:
系数a: 0.07409641707059047
系数b: -1.5088181393480587
系数c: 7.631510299457479
截距d: -1.1599928681113
根据结果,我们可以发现三次多项式方程拟合结果准确性比线性方程更高。所以,在拟合函数时,可以根据具体数据调整函数的类型和参数,以达到更好的拟合效果。