都忘了,再回顾一下:
参考知乎 https://www.zhihu.com/question/20447622 该问题下面的部分回答:
建议有时间的把问题下面的所有答案都过一遍,这样可以通过不同的切入点来更好的理解。
最小二乘法,也叫最小平方法,在古汉语中“平方”称为“二乘”,“最小”指的是参数的估计值要保证各个观测点与估计点的距离的平方和达到最小。(记得赟哥解释过,这个方法起源于日本,就直接拿过来用了,其实最小平方法更好理解一点)
最小二乘作为一种损失函数,也用做曲线拟合(曲线拟合求参数也是利用最小化平方的方法,其实也是作为一种损失函数,两个作用可以认为是一致的)
在直线的 y = ax + b中,通过给定的几个点(x1, y1), (x2, y2), (x3, y3)然后求出参数 (a, b), 根据给出的点列出方程组,然后令:
S(a,b)=(y1−(ax1+b))2+(y2−(ax2+b))2+(y3−(ax3+b))2
然后使 S(a,b) 最小化, 对a 和 b 分别求偏导,令其等于0, 求得a 和 b 的估计值。
上面这个过程是不是跟极大似然估计(MLE)的过程有点像,下面我们再回顾一下MLE做一下对比:
首先MLE使在已知分布的条件下根据一些样本来估计参数的方法:
将 y = ax + b 扩展到多维的情况,
f(x)=∑dj=1xjwj+ϵ=xw⊺+ϵ
其中 xj∈ℝ1×d , w∈ℝ1×n , y∈ℝ1×n , X =(x1, x2, …, xn), 假设 ϵi∼(0,σ2) , 则 yi∼(xw,σ2) , 现在要估计w的值:
其实最小二乘就是欧式距离的损失函数的主体部分, 就是最小平方误差的方法来估计参数的方法。
对于多维的曲线拟合线性求解方法(https://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)):
∑nj=1Xijβj=yi, (i=1,2,…,m)
写成向量形式就是:
Xβ=y
则损失函数:
S(β)=∥∥y−Xβ∥∥2
估计值 β̂
β̂ =argminβS(β),
对 β 求微分得:
β̂ =(XTX)−1XTy.
python代码;
import numpy as np
import matplotlib.pyplot as plt
input = np.array([
[1, 6],
[2, 5],
[3, 7],
[4, 10]
])
m = np.shape(input)[0]
X = np.matrix([np.ones(m), input[:,0]]).T
y = np.matrix(input[:,1]).T
#直接代入公式
betaHat = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(betaHat)
plt.figure(1)
xx = np.linspace(0, 5, 2)
yy = np.array(betaHat[0] + betaHat[1] * xx)
plt.plot(xx, yy.T, color='b')
plt.scatter(input[:,0], input[:,1], color='r')
plt.show()