利用最小二乘法进行多项式拟合

定义:最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

下面我们可以用实际的例子演示

我们就以sin函数为原型,尝试拟合sin函数曲线

import numpy as np
np.random.seed(1)
import matplotlib.pyplot as plt

# 初始化[-1, 1]区间的200个点
X = np.linspace(-1, 1, 200)
# 利用sin函数求Y,并且加上随机偏置值
Y = np.sin(20*X) + np.random(0, 0.05, (200,))
# 画出原散点图
plt.scatter(X, Y)
plt.show()

如下:

leastsq

拟合代码

import pylab as pl
# X-输入 Y-输出 10-拟合次数
z1 = np.polyfit(X, Y, 10)
p1 = np.poly1d(z1)
# 黄线为原图,红线为拟合曲线
pl.plot(X,Y, c='y')
pl.plot(X,p1(X),c='r')

拟合图:

leastsq

从图中可以看出拟合效果不是很好,我们加大degree试试

# 将degree增到50
z2 = np.polyfit(X, Y, 50)
p2 = np.poly1d(z2)
pl.plot(X,p2(X),c='r')

效果:

leastsq

此时的黄线与红线几乎已经一致了,拟合效果已经非常不错了,所以我们可以利用最小二乘法可以在一些简单的模型如非线性回归模型中拟合多项式曲线。