目录
- 1.线性回归
- 1.1什么是线性回归
- 1.2线性回归的最优解
- 2.梯度下降法
- 2.1什么是梯度下降法
- 2.2线性回归梯度下降法
- 2.3随机梯度下降法(SGD)
- 2.4Mini-Batch
1.线性回归
1.1什么是线性回归
可以写成
,其中
是乘坐出租车的公里数,如果我们获得的数据是公里数
和费用
,要求是给一个
算出一个
,通过最小二乘法拟合出的这条直线就是回归的结果。另一方面,如果我们将标签的+1和-1当做值,就可以做分类问题了。当然,线性回归做分类并不太好用,logistic回归会是更好选择,因为最小二乘法使用的是平方误差,不难想象,一个异常值造成的偏差影响是很大的。
1.2线性回归的最优解
下面我们可以开始愉快的推公式环节了,导出理论上的线性回归的最优解。
首先我们假设变量,为一个样本的特征向量,假设有D+1个维度(最后一个维度是1,为了把常数项放进来),
为样本组成的nd+1的矩阵,而
是待求的d+1维的权重,或者说回归系数,
是第n个样本对应的输出值,
是输出值构成的n1矩阵,
则是预测的输出值。最小二乘法其实说穿了就是在优化这么一个损失函数,使之最小:
将我们假设的变量带入,并且略去不影响结果的系数项,我们得到:
而我们要求的就是:
自然而然的,我们可以想到对求导,令
,不会矩阵求导的朋友可以参考Matrix Cookbook。求导后得到如下的结果:
当样本数量大于特征维度时,是满秩矩阵,因此可以求逆,得到
的解:
在这里解释一下这个解,最小二乘法是可以给出最优解的。这个就代表着在当前样本下,使得样本均方误差最小的解,这是全局的最优解,是唯一且确定的。
2.梯度下降法
2.1什么是梯度下降法
,当输入的特征维度很高的时候,计算逆矩阵是很困难的。因此,引入了梯度下降的概念。梯度下降法的直观理解可以参考下图:
2.2线性回归梯度下降法
下寻找一个使损失函数变小的方向,通过迭代来完成,这样就避免了逆矩阵的求取,之前的求导过程我们得到
:
于是我们设定一个正的学习率,就可以得到
的更新公式:
结合上图可以看出,始终在向
也就是
更小的方向迭代。
2.3随机梯度下降法(SGD)
梯度下降法固然不用求导,但是每一次迭代仍然使用了所有的样本,而SGD则是选择了抽取单个样本,从而损失函数从全局变成了局部:
于是梯度也变成了:
更新公式:
显然,采用了SGD计算量小了很多,但是缺点也很直观,容易受到噪声影响,收敛的速度会变慢,震荡会更加厉害。
2.4Mini-Batch
Mini-Batch可以说是SGD和BGD的折中选择,具体做法就是每一次迭代先将样本集分成若干个小的Batch,随后根据梯度下降法的公式,在每一个batch上更新梯度,这样既可以减少计算量,又可以抑制噪声,属于改进方法。我生成了两类遵从高斯分布的样本点,测试了一下梯度下降和最小二乘的结果,分类面是差不多的。
LMS为最小二乘,SSE为梯度下降。