【机器学习】最小二乘法(代数&矩阵推导)

前置知识

平方损失函数

在这里插入图片描述假设上图的红线就是拟合出的函数 y = w 0 + w 1 x y=w_0+w_1x y=w0+w1x,那么每个数据点(xi,yi)所对应的误差就是 y i − ( w 0 + w 1 x i ) y_{i}-(w_0+w_1x_i) yi(w0+w1xi)上面的误差往往也称之为「残差」。但是在机器学习中,我们更喜欢称作「损失」,即真实值和预测值之间的偏离程度。那么,对 𝑛个全部数据点而言,其对应的残差损失总和就为:

∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) \sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i)) i=1n(yi(w0+w1xi))

更进一步,在线性回归中,我们一般使用残差的平方和来表示所有样本点的误差。公式如下:

∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 \sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i))^2 i=1n(yi(w0+w1xi))2

使用残差平方和的好处在于能保证损失始终是累加的正数,而不会存在正负残差抵消的问题。对于此公式而言,机器学习中有一个专门的名词,那就是平方损失函数。而为了得到拟合参数 𝑤0 和 𝑤1 最优的数值,我们的目标就是让平方损失函数最小。

最小二乘法

代数求解

step1: f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 f=\sum_{i=1}^{n}(y_{i}-(w_0+w_1x_i))^2 f=i=1n(yi(w0+w1xi))2为平方损失函数;
step2:分别对该函数的 w 0 w_0 w0 w 1 w_1 w1求偏导;

∂ f ∂ w 0 = − 2 ( ∑ i = 1 n y i − n w 0 − ∑ i = 1 n w 1 x i ) \frac{\partial{f}}{\partial{w_0}}=-2(\sum_{i=1}^ny_i-nw_0-\sum_{i=1}^nw_1x_i) w0f=2(i=1nyinw0i=1nw1xi) ∂ f ∂ w 1 = − 2 ∑ i = 1 n ( x i y i − w 0 x i − w 1 x i 2 ) \frac{\partial{f}}{\partial{w_1}}=-2\sum_{i=1}^n(x_iy_i-w_0x_i-w_1x_i^2) w1f=2i=1n(xiyiw0xiw1xi2)

step3:分别令偏导为零;

首先,这是一个二次函数,极值就是最值。其次只要足够偏移,平方损失函数的值就会不断变大,所以是不可能取到极大值的,那么偏导为0的时候就只可能取到极小值了。

w 1 = n ∑ x i y i − ∑ x i ∑ y i n ∑ x i 2 − ( ∑ x i ) 2 (7b) w_{1}=\frac {n\sum_{}^{}{x_iy_i}-\sum_{}^{}{x_i}\sum_{}^{}{y_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{7b} w1=nxi2(xi)2nxiyixiyi(7b) w 0 = ∑ x i 2 ∑ y i − ∑ x i ∑ x i y i n ∑ x i 2 − ( ∑ x i ) 2 (7b) w_{0}=\frac {\sum_{}^{}{x_i}^2\sum_{}^{}{y_i}-\sum_{}^{}{x_i}\sum_{}^{}{x_iy_i}} {n\sum_{}^{}{x_i}^2-(\sum_{}^{}{x_i})^2} \tag{7b} w0=nxi2(xi)2xi2yixixiyi(7b)到目前为止,已经求出了平方损失函数最小时对应的参数值,这也就是最佳拟合直线。

矩阵推导

讲在前面,矩阵推到较为复杂,之所以还要赘述,是因为当数据量较大时,矩阵方式求解速度会更快。

step1:函数式转化为矩阵形式;

一元线性函数的表达式为 y ( x , w ) = w 0 + w 1 x y(x,w)=w_0+w_1x y(x,w)=w0+w1x,表达成矩阵形式为:
[ 1 , x 1 1 , x 2 ⋯ 1 , x 9 1 , x 10 ] [ w 0 w 1 ] = [ y 1 y 2 ⋯ y 9 y 10 ] \left[ \begin{array}{c}{1, x_{1}} \\ {1, x_{2}} \\ {\cdots} \\ {1, x_{9}} \\ {1, x_{10}}\end{array}\right] \left[ \begin{array}{c}{w_{0}} \\ {w_{1}}\end{array}\right] = \left[ \begin{array}{c}{y_{1}} \\ {y_{2}} \\ {\cdots} \\ {y_{9}} \\ {y_{10}}\end{array}\right] 1,x11,x21,x91,x10 [w0w1]= y1y2y9y10 即: y ( x , w ) = X W y(x, w) = XW y(x,w)=XW平方损失函数为: f = ∑ i = 1 n ( y i − ( w 0 + w 1 x i ) ) 2 = ( y − X W ) T ( y − X W ) f = \sum\limits_{i = 1}^n {{{(y_{i}-(w_0 + w_1x_{i}))}}}^2 =(y-XW)^T(y-XW) f=i=1n(yi(w0+w1xi))2=(yXW)T(yXW)计算乘法分配律得到: f = y T y − y T ( X W ) − ( X W ) T y + ( X W ) T ( X W ) f = y^{T}y - y^{T}(XW) - (XW)^{T}y + (XW)^{T}(XW) f=yTyyT(XW)(XW)Ty+(XW)T(XW)在该公式中 y y y X W XW XW 皆为相同形式的 ( m , 1 ) (m,1) (m,1) 矩阵,由此两者相乘属于线性关系,所以等价转换如下: f = y T y − ( X W ) T y − ( X W ) T y + ( X W ) T ( X W ) = y T y − 2 ( X W ) T y + ( X W ) T ( X W ) f = y^{T}y - (XW)^{T}y - (XW)^{T}y + (XW)^{T}(XW)\\ = y^{T}y - 2 (XW)^{T}y + (XW)^{T}(XW) f=yTy(XW)Ty(XW)Ty+(XW)T(XW)=yTy2(XW)Ty+(XW)T(XW)

step2:矩阵对系数 W W W求偏导;

f = y T y − 2 ( X W ) T y + ( X W ) T ( X W ) f= y^{T}y - 2 (XW)^{T}y + (XW)^{T}(XW) f=yTy2(XW)Ty+(XW)T(XW)第一项为常数项可以直接省去,第二项为一次项根据求导公式:
∂ x T ∂ x = I \frac{\partial{x^T}}{\partial{x}}=I xxT=I可得第二项求导结果为 2 X T y 2X^Ty 2XTy,第三项为二次项,根据求导公式:
∂ u T v ∂ x = ∂ u T ∂ x v + ∂ v T ∂ x u \frac{\partial{u^Tv}}{\partial{x}}=\frac{\partial{u^T}}{\partial{x}}v+\frac{\partial{v^T}}{\partial{x}}u xuTv=xuTv+xvTu
可以求得:
∂ ( ( X W ) T ( X W ) ) ∂ W = ∂ ( W T X T ) ∂ W W X + ∂ ( W T X T ) ∂ W W X = 2 X T X W \frac{\partial{((XW)^T(XW))}}{\partial{W}}=\frac{\partial{(W^TX^T)}}{\partial{W}}WX+\frac{\partial{(W^TX^T)}}{\partial{W}}WX=2X^TXW W((XW)T(XW))=W(WTXT)WX+W(WTXT)WX=2XTXW

step3:令偏导为0;

此步骤原因请参考代数部分解释,不再赘述。

∂ f ∂ W = 2 X T X W − 2 X T y = 0 \frac{\partial{f}}{\partial{W}}=2X^TXW-2X^Ty=0 Wf=2XTXW2XTy=0化简得: W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)1XTy

至此,两种方法推导均已完成。

posted @ 2020-09-05 14:58  ccql  阅读(33)  评论(0编辑  收藏  举报  来源