1.基本原理
这里的β就是我们所求的变量
所以这里我们可以得到
然后我们就可根据这个公式去实现算法,但是往往这里并不能得到一个非常好的结果,因为会出现过拟合问题。
所以可以采用正则化(岭回归)的方式来改进,
2.代码实现
请参考这位大佬的博客,我就是学习的他的代码实现
最小二乘法多项式曲线拟合及其python实现
3.代码解读
数据来源是利用y=sinx产生初始数据,加入一个正态分布的噪声,这样就产生了y_noise,在使用这个数据来计算得到参数项。
- np.random.normal()函数
np.random.normal()的意思是一个正态分布,normal这里是正态的意思
参数类型及解读:
loc:float
概率分布的均值
scale:float
概率分布的标准差
size:int or tuple of ints
输出的shape,默认为None,只输出一个值
更一般的形式是np.random.randn(size)即标准正态分布,相当于np.random.normal(loc=0, scale=1, size)。
- reshape修改数组形状
a = [0 1 2 3 4 5 6 7];
b = a.reshape(4,2)
results:
b=[[0 1]
[2 3]
[4 5]
[6 7]]
- matplotlib.pyplot.plot 参数
plt.plot(x, y, ls="-", lw=2, label=“plot figure”)
ls:折线图的线条风格
lw:折线图的线条宽度
label:标记图内容的标签文本
4.numpy.column_stack(a,b)将矩阵a,b按列合并
numpy.row_stack(a,b)将矩阵a,b按行合并
a = [1,2,3] # 3*1
b = [4,
5,
6] # 3*1
c = numpy.column_stack(a,b)
d = numpy.row_stack(a,b)
results:
c = [[1,4]
[2,5]
[3,6]] # 3*2
d = [1,2,3,4,5,6] # 6*1
- numpy对数组进行操作(插入、删除、添加等)
详见菜鸟教程数组操作篇 - 代码中与矩阵相关的计算也可参考菜鸟教程numpy部分的讲解