python直线拟合方法
在Python中,有多种方法可以进行直线拟合。在这里,我将介绍两种常用的方法:最小二乘法和多项式拟合。
1. 最小二乘法(Ordinary Least Squares Method):
最小二乘法是一种常用的直线拟合方法,它通过最小化实际观测值与拟合直线之间的残差平方和来到最佳拟合直线。
首先,我们需要导入必要的库和模块:
```
import numpy as np
from numpy.linalg import inv
```
然后,我们定义输入的观测值的x和y向量,并通过numpy库的vstack函数将它们组合起来:
```
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
numpy库常用函数data = np.vstack([x, np.ones(len(x))]).T
```
接下来,通过最小二乘法计算斜率m和截距c:
```
m, c = np.linalg.lstsq(data, y, rcond=None)[0]
```
最后,可以画出拟合的直线:
```
import matplotlib.pyplot as plt
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, m*x + c, 'r', label='Fitted line')
plt.legend
plt.show
```
运行上述代码,将会得到一条通过原始数据点的拟合直线。
2. 多项式拟合(Polynomial Fitting):
多项式拟合是一种在非线性数据集上进行拟合的方法,它通过在数据点之间绘制一条平滑的曲线来逼近数据。
在Python中,我们使用numpy.polyfit函数来进行多项式拟合。首先,导入必要的库和模块:
```
import numpy as np
import matplotlib.pyplot as plt
```
然后,定义输入的观测值的x和y向量:
```
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 4, 5, 6])
```
接下来,调用numpy.polyfit函数进行多项式拟合:
```
coeffs = np.polyfit(x, y, deg=1)
```
这里deg参数指定了拟合曲线的最高次数。在这个例子中,deg=1表示拟合一条直线。
最后,可以使用numpy.polyval函数计算拟合曲线的预测值,并通过matplotlib库来显示原始数据点和拟合曲线:
```
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, np.polyval(coeffs, x), 'r', label='Fitted line')
plt.legend
plt.show
```
运行上述代码,将会得到一条通过原始数据点的拟合曲线。
总结:
最小二乘法和多项式拟合是两种常用的直线拟合方法。最小二乘法通过最小化残差平方和来到最佳拟合直线,而多项式拟合则在非线性数据集上通过拟合多项式曲线来逼近数据。这些方法都可以在Python中轻松实现,并使用matplotlib库来可视化拟合结果。