我们先来了解下最小二乘的思想。**简单的来说,最小二乘的思想就是要使得观测点和估计点的距离的平方和达到最小。**这里的二乘指的是用平方来度量观测点与估计点之间的远近,最小则指的是参数的估计值要保证各个观测点与估计点之间的距离的平方和达到最小。
一元线性回归
假设我们的模型只有一维数据时,模型就是一条直线
f
(
x
)
=
a
x
+
b
f(x)=ax+b
f(x)=ax+b,我们有
m
m
m条训练数据,训练损失函数为误差平方和的平均数:
L
(
a
,
b
)
=
1
m
∑
i
=
1
m
[
(
a
x
i
+
b
)
−
y
i
]
2
L(a,b) = \frac{1}{m}\sum_{i=1}^{m}[(ax_i + b)-y_i]^2
L(a,b)=m1i=1∑m[(axi+b)−yi]2
可以对a和b分别求导,导数为0时,损失函数最小。
∂ ∂ a L ( a , b ) = 2 m ∑ i = 1 m x i ( a x i + b − y i ) = 2 m ( a ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) \begin{aligned} \frac{\partial}{\partial a}L(a,b) =&\frac{2}{m}\sum_{i=1}^m x_i(ax_i + b -y_i) \\ =& \frac{2}{m}(a\sum_{i=1}^m x_i^2 - \sum_{i=1}^m(y_i-b)x_i) \end{aligned} ∂a∂L(a,b)==m2i=1∑mxi(axi+b−yi)m2(ai=1∑mxi2−i=1∑m(yi−b)xi)
∂ ∂ b L ( a , b ) = 2 m ∑ i = 1 m a x i + b − y i = 2 m ( m b − ∑ i = 1 m ( y i − a x i ) ) \begin{aligned} \frac{\partial}{\partial b} L(a,b) =& \frac{2}{m}\sum_{i=1}^m ax_i + b - y_i \\ =& \frac{2}{m}(mb - \sum_{i=1}^m(y_i - ax_i)) \end{aligned} ∂b∂L(a,b)==m2i=1∑maxi+b−yim2(mb−i=1∑m(yi−axi))
上面两个公式是损失函数
L
L
L对
a
a
a和
b
b
b进行求偏导。当导数为0时,可以求得损失函数的最小值,即:
{
∂
∂
a
L
(
a
,
b
)
=
0
⇒
2
m
(
a
∑
i
=
1
m
x
i
2
−
∑
i
=
1
m
(
y
i
−
b
)
x
i
)
=
0
∂
∂
b
L
(
a
,
b
)
=
0
⇒
2
m
(
m
b
−
∑
i
=
1
m
(
y
i
−
a
x
i
)
)
=
0
\begin{cases} &\frac{\partial}{\partial a}L(a,b) = 0 \rArr \frac{2}{m}(a\sum_{i=1}^m x_i^2 - \sum_{i=1}^m(y_i-b)x_i) = 0 \\ &\frac{\partial}{\partial b}L(a,b)=0 \rArr \frac{2}{m}(mb - \sum_{i=1}^m(y_i - ax_i)) = 0 \end{cases}
{∂a∂L(a,b)=0⇒m2(a∑i=1mxi2−∑i=1m(yi−b)xi)=0∂b∂L(a,b)=0⇒m2(mb−∑i=1m(yi−axi))=0
这个求解过程,有一些trick会用到:
m
x
‾
=
∑
i
=
1
m
x
i
;
m
y
‾
=
∑
i
=
1
m
y
i
m\overline{x} = \sum_{i=1}^m x_i; \qquad m\overline{y} = \sum_{i=1}^m y_i
mx=i=1∑mxi;my=i=1∑myi
于是上式
∂
∂
b
L
(
a
,
b
)
\frac{\partial}{\partial b}L(a,b)
∂b∂L(a,b)可以简化为:
m
b
=
m
y
‾
−
a
m
x
‾
⇒
b
=
y
‾
−
a
x
‾
mb = m\overline{y} - am \overline{x} \rArr b = \overline{y} - a\overline{x}
mb=my−amx⇒b=y−ax
再把上式代入到
∂
∂
a
L
(
a
,
b
)
\frac{\partial}{\partial a}L(a,b)
∂a∂L(a,b)的结果中,可以得到:
a
∑
i
=
1
m
x
i
2
−
∑
i
=
1
m
x
i
y
i
+
∑
i
=
1
m
(
y
‾
−
a
x
‾
)
x
i
=
0
⇒
a
=
∑
i
=
1
m
x
i
y
i
−
y
‾
∑
i
=
1
m
x
i
∑
i
=
1
m
x
i
2
−
x
‾
∑
i
=
1
m
x
i
⇒
a
=
∑
i
=
1
m
(
x
i
−
x
‾
)
(
y
i
−
y
‾
)
∑
i
=
1
m
(
x
i
−
x
‾
)
2
(
运
用
了
求
和
性
质
)
\begin{aligned} &a\sum_{i=1}^m x_i^2 - \sum_{i=1}^mx_iy_i + \sum_{i=1}^m(\overline{y}-a\overline{x})x_i = 0 \\ \rArr &a = \frac{\sum_{i=1}^m x_iy_i - \overline{y}\sum_{i=1}^m x_i}{\sum_{i=1}^mx_i^2 - \overline{x}\sum_{i=1}^mx_i} \\ \rArr &a = \frac{\sum_{i=1}^m(x_i - \overline{x})(y_i - \overline{y})}{\sum_{i=1}^m(x_i - \overline{x})^2} \qquad (运用了求和性质) \end{aligned}
⇒⇒ai=1∑mxi2−i=1∑mxiyi+i=1∑m(y−ax)xi=0a=∑i=1mxi2−x∑i=1mxi∑i=1mxiyi−y∑i=1mxia=∑i=1m(xi−x)2∑i=1m(xi−x)(yi−y)(运用了求和性质)
求和性质证明如下:
所以对于
y
=
a
x
+
b
y=ax+b
y=ax+b得到的普通最小二乘解为:
{
a
=
∑
i
=
1
m
(
x
i
−
x
‾
)
(
y
i
−
y
‾
)
∑
i
=
1
m
(
x
i
−
x
‾
)
2
b
=
y
‾
−
a
x
‾
\begin{cases} a &= \frac{\sum_{i=1}^m(x_i - \overline{x})(y_i - \overline{y})}{\sum_{i=1}^m(x_i - \overline{x})^2} \\ b &= \overline{y} - a\overline{x} \end{cases}
{ab=∑i=1m(xi−x)2∑i=1m(xi−x)(yi−y)=y−ax
多元线性回归
更为一般的情况下,特征是多维的:
f
(
x
i
)
=
w
T
x
i
f(x_i) = w^Tx_i
f(xi)=wTxi
上面的公式中,我们其实是使用
b
=
w
0
b=w_0
b=w0来表示参数中的
b
b
b,将
b
b
b添加到特征向量中,将
n
n
n维特征扩展为
n
+
1
n+1
n+1维,也就是在每个
x
i
x_i
xi中添加一个值为1的项。各个向量和矩阵形状如下面公式所示:
w
=
[
w
0
w
1
⋮
w
n
]
X
=
[
x
1
x
2
⋮
x
m
]
=
(
1
x
11
x
12
⋯
x
1
n
1
x
21
x
22
⋯
x
2
n
⋮
⋮
⋱
⋮
⋮
1
x
m
1
x
m
2
⋯
x
m
n
)
y
=
[
y
1
y
2
⋮
y
m
]
w=\left [ \begin{matrix} w_0 \\ w_1 \\ \vdots \\ w_n \end{matrix}\right ] \qquad X = \left [ \begin{matrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{matrix} \right ]=\left ( \begin{matrix} &1 \quad &x_{11} \quad &x_{12} \quad &\cdots \quad &x_{1n} \\ &1 \quad &x_{21} \quad &x_{22} \quad &\cdots \quad &x_{2n} \\ &\vdots \quad &\vdots \quad &\ddots \quad &\vdots \quad &\vdots \\ &1 \quad &x_{m1} \quad &x_{m2} \quad &\cdots \quad &x_{mn} \end{matrix} \right ) y=\left [\begin{matrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{matrix}\right ]
w=⎣⎢⎢⎢⎡w0w1⋮wn⎦⎥⎥⎥⎤X=⎣⎢⎢⎢⎡x1x2⋮xm⎦⎥⎥⎥⎤=⎝⎜⎜⎜⎛11⋮1x11x21⋮xm1x12x22⋱xm2⋯⋯⋮⋯x1nx2n⋮xmn⎠⎟⎟⎟⎞y=⎣⎢⎢⎢⎡y1y2⋮ym⎦⎥⎥⎥⎤
矩阵
X
X
X的每一行是一个样本,每个样本有
n
+
1
n+1
n+1个特征值。
用矩阵乘法的形式表示则为:
y
=
X
w
y=Xw
y=Xw
其中:
y
i
=
∑
j
=
0
n
w
j
x
i
j
y_i = \sum_{j=0}^n w_j x_{ij}
yi=j=0∑nwjxij
一般机器学习领域都常用矩阵乘法的形式来表示一个模型。
与一元线性回归相比,多元线性回归的最优解不是一条直线,是一个多维空间中的超平面,训练数据散落在超平面的两侧。
多元线性回归,一般寻求找到最优超平面,使得点到超平面的距离最小,也是用平方差来衡量,具体超平面如下:
具体的损失函数则是:
L
(
w
)
=
(
X
w
−
y
)
T
(
X
w
−
y
)
=
∣
∣
X
w
−
y
∣
∣
2
2
L(w) = (Xw - y)^T(Xw-y) = ||Xw-y||^2_2
L(w)=(Xw−y)T(Xw−y)=∣∣Xw−y∣∣22
多元线性回归的损失函数仍然使用"预测值-真实值"的平方来计算,上面公式为整个模型损失函数的向量表示。
对线性回归损失函数公式中的向量
w
w
w求导,令导数为0:
∂
∂
w
L
(
w
)
=
2
X
T
(
X
w
−
y
)
=
0
⇓
X
T
X
w
=
X
T
y
⇓
w
=
(
X
T
X
)
−
1
X
T
y
\begin{aligned} \frac{\partial}{\partial w}L(w) &= 2X^T(Xw-y) = 0 \\ &\dArr \\ X^TXw &= X^Ty \\ &\dArr \\ w &=(X^TX)^{-1}X^Ty \end{aligned}
∂w∂L(w)XTXww=2XT(Xw−y)=0⇓=XTy⇓=(XTX)−1XTy
上面的公式就是 w w w的解,这是一个矩阵方程,使用这种方法求最优解,其实就是在解这个矩阵方程。
但是这个方式有两个问题,这种方法只有在 X T X X^TX XTX是满秩或正定时,才能解方程组。还有一个问题是,公式中的矩阵求逆的计算量比较大,复杂度在 O ( n 3 ) O(n^3) O(n3)级别。当特征维度达到百万及以上的时候,计算时间就会非常长,单台计算机内存甚至都存不下这些参数。
梯度下降法
在求解损失函数时,或者说在求解损失函数最小的优化问题时,经常使用搜索的方法,具体而言,就是选取一个点作为起始点,然后不断搜索,损失函数逐渐变小,最后找到使得L(w)最小的w。
公式为:
w
j
:
=
w
j
−
α
∂
∂
w
j
L
(
w
)
w_j := w_j - \alpha \frac{\partial}{\partial w_j}L(w)
wj:=wj−α∂wj∂L(w)
如果我们只考虑一个样本
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的情况,由
L
(
w
)
=
1
2
(
f
(
x
i
)
−
y
i
)
2
L(w)=\frac{1}{2}(f(x_i)-y_i)^2
L(w)=21(f(xi)−yi)2可以得到:
∂
∂
w
j
L
(
w
)
=
∂
∂
w
j
1
2
(
f
(
w
i
)
−
y
i
)
2
=
(
f
(
x
i
)
−
y
i
)
⋅
∂
∂
w
j
(
∑
j
=
0
n
w
j
x
i
,
j
−
u
i
)
=
(
f
(
x
i
)
−
y
i
)
x
i
,
j
\begin{aligned} \frac{\partial}{\partial w_j}L(w) &= \frac{\partial}{\partial w_j}\frac{1}{2}(f(w_i)-y_i)^2 \\ &= (f(x_i)-y_i)\cdot \frac{\partial}{\partial w_j}(\sum_{j=0}^{n}w_jx_{i,j}-u_i) \\ &= (f(x_i)-y_i)x_{i,j} \end{aligned}
∂wj∂L(w)=∂wj∂21(f(wi)−yi)2=(f(xi)−yi)⋅∂wj∂(j=0∑nwjxi,j−ui)=(f(xi)−yi)xi,j
所以,对于每个样本的更新规则为:
w
j
:
=
w
j
−
α
(
f
(
x
i
)
−
y
i
)
x
i
,
j
w_j := w_j - \alpha (f(x_i)-y_i)x_{i,j}
wj:=wj−α(f(xi)−yi)xi,j
批梯度下降
对于批梯度下降,就是再求梯度时,不是只考虑一个样本,而是考虑所有的m个样本:
∂
∂
w
j
L
(
w
)
=
∂
∂
w
j
1
2
{
(
f
(
x
1
)
−
y
1
)
2
+
.
.
.
+
(
f
(
x
m
)
−
y
m
)
2
}
=
(
f
(
x
1
)
−
y
1
)
x
1
j
+
.
.
.
+
(
f
(
x
m
)
−
y
m
)
x
m
j
=
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
x
i
j
\begin{aligned} \frac{\partial}{\partial w_j}L(w) &=\frac{\partial}{\partial w_j}\frac{1}{2}\{(f(x_1)-y_1)^2 + ... + (f(x_m)-y_m)^2\} \\ &= (f(x_1)-y_1)x_{1j} + ... +(f(x_m)-y_m)x_{mj} \\ &= \sum_{i=1}^m (f(x_i)-y_i)x_{ij} \end{aligned}
∂wj∂L(w)=∂wj∂21{(f(x1)−y1)2+...+(f(xm)−ym)2}=(f(x1)−y1)x1j+...+(f(xm)−ym)xmj=i=1∑m(f(xi)−yi)xij
所以,可以得到对每一个
w
j
w_j
wj的导数:
w
j
:
=
w
j
−
α
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
x
i
j
w_j := w_j - \alpha \sum_{i=1}^m (f(x_i)-y_i)x_{ij}
wj:=wj−αi=1∑m(f(xi)−yi)xij
随机梯度下降
批梯度下降在更新时,考虑了所有的样本,但是当数据量很大时,每次迭代都用全部的数据,不现实。
所以一种方法就是随机梯度下降法,每次随机选取一定的样本数,参与梯度更新。最后的公式的区别就是求和符号的上限不再是 m m m,而是一个随机值。
参考资料: