机器学习实战:最小二乘法
机器学习实战:最小二乘法
最小二乘法是机器学习中用于求解线性回归问题的重要方法。本文将从多元线性回归的数学表达式出发,详细推导最小二乘法的损失函数,并解释如何通过求偏导数来最小化损失函数。此外,文章还将讨论矩阵逆存在的条件、多重共线性等问题,并提供相应的解决方案。
最小二乘法推导
多元线性回归的写法为:
$$ y = w_1x_1+w_2x_2+...+w_dx_d+b $$
与数学中不同的是,在机器学习中,系数 $w$ 和截距 $b$ 是需要求得的未知数,而特征 $x$ 和标签 $y$ 则是已知的。
将上述方程写成矩阵形式:
$$ y = w^Tx+b $$
此时的 $w$ 和 $x$ 都是矩阵,其中 $w = [w_1, w_2, ..., w_d]^T$,$x = [x_1, x_2, ..., x_d]^T$。
普通线性回归的目标是求得 $w$ 和 $b$ 两个参数,其中 $w$ 实际上是权重的简写,表示自变量的权重。
- 普通线性回归常用的损失函数(L)是SSE(误差平方和),即(真实值-预测值)的平方之和:
$$L(\hat w) = \sum{i=1}^{m}\left(y{i}-\hat{y}{i}\right)^{2}=\sum{i=1}^{m}\left(y{i}-\boldsymbol{X}{i} \boldsymbol{w}\right)^{2}= ||y - X\hat w||_2^2 = (y - X\hat w)^T(y - X\hat w)$$
其中 $||y - X\hat w||_2^2$ 称为2范数,不过在这里暂时用不到。
可以看到,损失函数是关于参数 $w$ 的函数。目标是对损失函数求最小值,因此可以让其偏导数等于0。
如果只有一个特征,可以在二维图中展示:
可以看到,模型使用一条直线拟合散点,损失函数就是真实值到预测值的欧式距离的和,求损失函数最小值即是使直线尽可能拟合到更多的点。
对 $w$ 求偏导:
$$\begin{aligned}
\frac{SSELoss(\hat w)}{\partial{\boldsymbol{\hat w}}}
&= \frac{\partial{||\boldsymbol{y} - \boldsymbol{X\hat w}||_2}^2}{\partial{\boldsymbol{\hat w}}}
\
&= \frac{\partial(\boldsymbol{y} - \boldsymbol{X\hat w})^T(\boldsymbol{y} - \boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}} \
& =\frac{\partial(\boldsymbol{y}^T - \boldsymbol{\hat w^T X^T})(\boldsymbol{y} - \boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}}\
&=\frac{\partial(\boldsymbol{y}^T\boldsymbol{y} - \boldsymbol{\hat w^T X^Ty}-\boldsymbol{y}^T\boldsymbol{X \hat w} +\boldsymbol{\hat w^TX^T}\boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}}\
& = 0 - \boldsymbol{X^Ty} - \boldsymbol{X^Ty}+X^TX\hat w+(X^TX)^T\hat w \
&= 0 - \boldsymbol{X^Ty} - \boldsymbol{X^Ty} + 2\boldsymbol{X^TX\hat w}\
&= 2(\boldsymbol{X^TX\hat w} - \boldsymbol{X^Ty}) = 0
\end{aligned}$$
得到 $X^TX\hat w = X^Ty$。
要使得此式有解,等价于 $X^TX$ 存在逆矩阵,即 $\hat w = (X^TX)^{-1}X^Ty$。
$X$ 和 $y$ 都已知,带入即可求得 $w$ 矩阵,最终求得 $b$。
所以使用最小二乘法是有条件的,其中一个便是 $X^TX$ 存在逆矩阵。因此在机器学习中有更普适的求解损失函数最小值的方法,比如梯度下降。
矩阵 $A$ 存在逆矩阵的条件
- $A$ 满秩、$A$ 的行列式≠0、$A$ 存在逆矩阵 是等价的。
- 若 $A$ 存在逆矩阵,$A$ 的性质:$A$ 和 $A^{-1}$ 是方阵(行列数相同);$AA^{-1}=E$ ($E$ 是单位矩阵)
- 类比倒数概念,$a$ 存在倒数的充要条件是 $a≠0$;类似的性质,$a*\frac{1}{a}=1$,
线性代数的一些概念
初等行(列)变换 包括:
- 某一行(列),乘以一个非零倍数。
- 某一行(列),乘以一个非零倍数,加到另一行(列)。
- 某两行(列),互换。
阶梯型矩阵:所给矩阵为行阶梯型矩阵,则矩阵中每一行的第一个不为零的元素的左边及其所在列以下全为零。
矩阵的秩(rank):把矩阵经过初等行变换成阶梯型矩阵,非0行的个数即为其秩。
满秩:矩阵的秩=其行数,或者说阶梯型矩阵没有非0行,或者说其行列式≠0
求 $A$ 的逆矩阵
$A|E$ 是在矩阵 $A$ 的右边cbind一个单位矩阵(称为增广矩阵),这样 $A$ 和 $E$ 经过相同的经过初等行变换,当 $A$ 变为单位矩阵时,右边的 $E$ 也就变成了 $A$ 的逆矩阵,这种方法叫做初等变换法,当然还有其他很多方法求逆矩阵。
$$A|E \rightarrow E|A^{-1}$$
与特征矩阵数据的关系
逆矩阵存在的充分必要条件是特征矩阵不存在多重共线性。
多重共线性:是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。
- 精确相关: 比如 $x_1 = 2x_2$
- 高度相关:比如 $x_1 \approx 2x_2$
模型估计失真或难以估计准确:比如下式,$x_1$ 和 $x_2$ 是精确关系,那么下 $y$ 就可以写成 $y=2x_2$ 或 $y=2x_1$,那么 $x$ 和 $y$ 的值就不能确定了,模型也就失效了。
$$y=x{1}+x{2}\x{1}=2 x{2}$$
因此,比如我们的两个基因表达量相关性过高,就会造成多重共线性,建模中解决多重共线性的方法是可以对损失函数加上惩罚项,比如拉索回归、岭回归和弹性网络。
参考:
- https://baike.baidu.com/item/%E5%A4%9A%E9%87%8D%E5%85%B1%E7%BA%BF%E6%80%A7/10201978?fr=aladdin
- https://www.bilibili.com/video/BV1UU4y1M73o?vd_source=d18945ce98e39afc8362968bf50c8dde
- https://www.bilibili.com/video/BV1vJ41187hk?p=59&vd_source=d18945ce98e39afc8362968bf50c8dde
- https://zhuanlan.zhihu.com/p/355241680
- https://zhuanlan.zhihu.com/p/486971703