【机器学习】最小二乘法(代数&矩阵推导)
文章目录
前置知识
平方损失函数
假设上图的红线就是拟合出的函数 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=1∑n(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=1∑n(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) ∂w0∂f=−2(i=1∑nyi−nw0−i=1∑nw1xi) ∂ 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) ∂w1∂f=−2i=1∑n(xiyi−w0xi−w1xi2)
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=n∑xi2−(∑xi)2n∑xiyi−∑xi∑yi(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=n∑xi2−(∑xi)2∑xi2∑yi−∑xi∑xiyi(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,x2⋯1,x91,x10
[w0w1]=
y1y2⋯y9y10
即:
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=1∑n(yi−(w0+w1xi))2=(y−XW)T(y−XW)计算乘法分配律得到:
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=yTy−yT(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)=yTy−2(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=yTy−2(XW)Ty+(XW)T(XW)第一项为常数项可以直接省去,第二项为一次项根据求导公式:
∂
x
T
∂
x
=
I
\frac{\partial{x^T}}{\partial{x}}=I
∂x∂xT=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
∂x∂uTv=∂x∂uTv+∂x∂vTu
可以求得:
∂
(
(
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 ∂W∂f=2XTXW−2XTy=0化简得: W = ( X T X ) − 1 X T y W=(X^TX)^{-1}X^Ty W=(XTX)−1XTy
至此,两种方法推导均已完成。