本文主要介绍用python中的matplotlib实现最小二乘拟合的相关信息。本文通过实例代码详细介绍了最小二乘拟合直线和最小二乘拟合曲线的实现过程。有需要的可以参考一下。让我们一起来看看吧。
前言
最小二乘法作为分类和回归算法的基础,有着悠久的历史(由Marie Legendre于1806年提出)。它通过最小化误差的平方和来寻找数据的最佳函数匹配。使用最小二乘法,可以简单地获得未知数据,并且可以最小化这些获得的数据与实际数据之间的误差平方和。最小二乘法也可用于曲线拟合。其他优化问题也可以用最小二乘法通过最小化能量或最大化熵来表示。
下面这篇文章主要介绍了python中matplotlib的最小二乘拟合的相关内容,我们来看看详细介绍:
一、最小二乘法拟合直线
生成样本点
首先我们在直线y=3.5x附近生成服从正态分布的随机点,作为样本点来拟合直线。
将numpy作为np导入
将matplotlib.pyplot作为plt导入
#在直线y=3 5x附近生成随机点
X=np.arange(0,5,0.1)
z=[X中X的3 ^ 5 * X]
Y=[np.random.normal(z,0.5) for z in Z]
plt.plot(X,Y,' ro ')
plt.show()
样本点如图所示:
拟合直线
设y=a0 a1*x,我们用最小二乘法的正则方程求解未知系数a0和a1。
Numpy的linalg模块有求解功能,可以根据方程的系数矩阵和方程右端形成的向量求解未知量。
def线性_回归(x,y):
N=len(x)
sumx=sum(x)
sumy=总和(y)
sumx2=sum(x**2)
sumxy=sum(x*y)
A=np.mat([[N,sumx],[sumx,sumx2]])
b=np.array([sumy,sumxy])
返回np.linalg.solve(A,b)
a0,a1=线性回归(X,Y)
绘制直线
此时,我们已经获得了拟合的线性方程系数a0和a1。接下来,我们画这条直线,并与样本点进行比较。
#生成拟合线的绘图点
_X=[0,5]
_Y=[a0 a1 * x for x in _X]
plt.plot(X,Y,' ro ',_X,_Y,' b ',线宽=2)
plt.title('y={} {}x ')。格式(a0,a1))
plt.show()
拟合效果如下:
二、最小二乘法拟合曲线
生成样本点
类似于生成直线样本点,我们在曲线Y=23x4x2附近生成服从正态分布的随机点,作为样本点来拟合曲线。
将numpy作为np导入
将matplotlib.pyplot作为plt导入
# y=2 3x 4x^2
X=np.arange(0,5,0.1)
z=[X中X的2 ^ 3 * X ^ 4 * X * * 2]
Y=np.array([np.random.normal(z,3) for z in Z])
plt.plot(X,Y,' ro ')
plt.show()
样本点如图所示:
拟合曲线
设曲线的方程为y=a0a1 * X2 * X2。类似地,我们通过正则方程求解未知变量A0、A1和a2。
#生成系数矩阵A
定义gen_coefficient_matrix(X,Y):
N=len(X)
m=3
A=[]
#计算每个方程的系数
对于范围内的I(m):
a=[]
#计算当前等式中的每个系数
对于范围内的j(m):
a.append(sum(X ** (i j)))
追加
返回A
#计算等式的右手向量B
定义gen_right_vector(X,Y):
N=len(X)
m=3
b=[]
对于范围内的I(m):
b.append(sum(X**i * Y))
返回b
A=生成系数矩阵(X,Y)
b=gen_right_vector(X,Y)
a0,a1,a2=np.linalg.solve(A,b)
绘制曲线
根据得到的曲线方程,我们画出曲线图像。
#生成拟合曲线的绘制点
_X=np.arange(0,5,0.1)
_ Y=NP . array([A0 a1 * X a2 * X * * 2 for X in _ X])
plt.plot(X,Y,' ro ',_X,_Y,' b ',线宽=2)
' y={} {}x {}$x^2$ '。格式(a0,a1,a2))
plt.show()
拟合效果如下:
总结
这就是本文的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助。有问题可以留言交流。谢谢你的支持。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。