代数形式
最小二乘法在中学时讲过。有一些散点有线性的趋势,用一个一次函数去拟合,使得差距最小化。

假设数据点为 (x1,y1),(x2,y2),…,(xm,ym) ,使用如下一次函数去拟合:
y=w1x+w0
对于 xi ,采用上述函数计算出的结果记为 yi^ ,即:
yi^=w1xi+w0
定义差距为:
i=1∑m(yi−yi^)2
现需要最小化这个差距。显然,上式为关于 w_0 和 w_1 的函数(损失函数)。为了方便,将 ∑_i=1m 简记为 ∑ ,记:
f(w0,w1)=∑(yi−yi^)2=∑(yi−(w1xi+w0))2=∑(yi2−2yixiw1−2yiw0+xi2w12+w02+2xiw0w1)
分别对 w0,w1 求偏导:
∂w0∂f∂w1∂f=∑(−2yi+2w0+2xiw1)=−2∑yi+2mw0+2w1∑xi=∑(−2xiyi+2xi2w1+2w0xi)=−2∑xiyi+2w1∑xi2+2w0∑xi
令:
∂w0∂f∂w1∂f=0=0
得:
mw0+w1∑xiw1∑xi2+w0∑xi=∑yi=∑xiyi
联立上面两式可得:
w0w1=(∑xi)2−m∑xi2∑xi∑xiyi−∑yi∑xi2=(∑xi)2−m∑xi2∑xi∑yi−m∑xiyi
注意, ∑xi2=(∑xi)2 ,计算时要细心。
矩阵形式
记 X 为 m×n 的矩阵,表示有 m 个样本点,特征维数为 n 维; y 为 m 维列向量,表示这 m 个样本点的实际值; y^ 为 m 维列向量,表示这 m 个样本点的估计值; w 为 n 维列向量,且:
y^=Xw
则:
y−y^=y−Xw
上式的结果是一个列向量,而我们需要的是其平方和。根据矩阵乘法的定义,损失函数为:
f(w)=(y−Xw)T(y−Xw)
现要求 ∂w∂f ,可 w 是个向量呀,这个该怎么求呢?
预备知识
【实数值函数对向量求导】
∂x∂f=[x1∂fx2∂f…xn∂f]
其中, x=[x1,x2,…,xn]T 为 n 维列向量, f 是 x 上 ℜn→ℜ 的函数(也就是, f 的输入是 n 维列向量,输出是实数)
【向量值函数对向量求导】
∂x∂y=∂x1∂y1∂x1∂y2⋮∂x1∂ym∂x2∂y1∂x2∂y2⋮∂x2∂ym……⋱…∂xn∂y1∂xn∂y2⋮∂xn∂ym
即:
(∂x∂y)ij=∂xj∂yi
其中, x=[x1,x2,…,xn]T 为 n 维列向量, y 是定义在 x 上 ℜn→ℜm 的函数(也就是, y 的输入是 n 维列向量,输出是 m 维列向量),上面的矩阵称为雅可比(Jacobi)矩阵。
【链式求导】
设 x 为列向量,复合函数 h(x)=f(g(x)) ,其中向量值函数(也就是函数的值域是向量)f(g) 和 g(x) 均可微,则:
h′(x)=f′(g(x))g′(x)
和代数形式的链式求导类似。
计算过程
记 u(w)=y−Xw ,则:
f=uTu=∑iui2
∂u∂f=[∂u1∂∑iui2∂u2∂∑iui2…∂ui∂∑iui2]=[2u12u2…2ui]=2[u1u2…ui]=2uT
u=y−Xw=y1y2⋮ym−x11x21⋮xm1x12x22⋮xm2……⋱…x1nx2n⋮xmnw1w2⋮wn=y1−∑x1iwiy2−∑x2iwi⋮ym−∑xmiwi
(∂w∂u)ij=∂wj∂ui=∂wj∂(yi−(xi1w1+xi2w2+⋯+xinwn))=−xij
∂w∂u=−X
使用链式求导:
∂w∂f=∂u∂f∂w∂u=2uT(−X)=−2(y−Xw)TX=−2(yT−(Xw)T)X=−2(yT−wTXT)X=−2(yTX−wTXTX)
令:
∂w∂f=0
得:
wTXTX=yTX
若 XTX 可逆,则两边同时右乘 (XTX)−1 ,得:
wT=yTX(XTX)−1
两边同时转置:
w=(yTX(XTX)−1)T=((XTX)−1)TXT(yT)T=((XTX)T)−1XTy=(XT(XT)T)−1XTy=(XTX)−1XTy