多项式拟合(最小二乘法)
a基本原理:
b拟合函数原理:
c方法优缺点:
优点:
思想简单,实现容易。建模迅速,对于小数据量、简单的关系很有效。
解决回归问题,拥有很好的解释性。
是很多非线性模型的基础。
缺点:
对于非线性数据或者数据特征间具有相关性多项式回归难以建模。
当样本特征n非常大的时候会变的很耗时,难以很好的表达复杂的数据。
需要做预测的话需要数据大致满足多项式函数。
d算法入口:
该方法主要用到的函数是np.polyfit(x,y,deg,*args)
1.deg为需要拟合函数的最高次数。当deg=0时,y=a0。
2.其他参数*args在这里目前不需要讨论。
3.np.polyfit函数的返回值是拟合好之后的参数,按(an,……,a1)排序
4.该函数缺少对应的惩罚函数,待思考研究。
可以使用np.ploy1d()来加载函数,方便生成对应的y
e实例参考:
# -*- coding: utf-8 -*-'''多项式拟合(最小二乘法),这里的例子是三次方拟合'''import numpy as npfrom matplotlib import pyplot as pltdef func(x): # 原函数return x ** 3 - 3 * x + 1def trendline(x, y, n):model = np.polyfit(x, y, deg=n) # 拟合函数,输出参数return np.poly1d(model)# 作图,其中y1为原始数据,y2为拟合出来的数据def PLT(x1, y1, x2, y2):plt.scatter(x1, y1, color='blue')plt.plot(x1, func(x1), color='yellow', label='real')plt.plot(x2, y2, color='red', label='fit')plt.legend()plt.show()if __name__ == '__main__':# 生成300个时序坐标点(x,y),前250个点用于拟合,后50个点用于预测x = np.linspace(-3, 3, 300)y = func(x)y += np.random.randn(300) * 0.5 # 加上噪声ff = trendline(x[:250], y[:250], n=3)print(ff)PLT(x, y, x, np.poly1d(ff)(x))
运行结果如下
f参考文献:
机器学习--线性回归算法的原理及优缺点
/lsm-boke/p/11746274.html
知乎 最小二乘法(least sqaure method)
/p/38128785/
知乎 多项式曲线拟合
/p/53056358
如果觉得《趋势预测方法(一) 多项式拟合(最小二乘法)_函数拟合》对你有帮助,请点赞、收藏,并留下你的观点哦!