什么是回归?
- 统计回归的任务,是根据自变量x1,x2...xn以及应变量y的观测样本,去估计两者之间近似的函数关系f
- 通常,我们假设函数f的数学形式是已知的,但其中的若干个参数是未知的。通过自变量和应变量的观测样本去估计未知的参数值,这种做法叫参数回归。如果函数f是线性函数,则称为线性回归
- 自变量x只有一个时,称为一元线性回归,自变量有多个时,称为多元线性回归
- 回归属于Supervised Learning,另一种重要的Supervised Learning是分类,两者的区别是回归用于预测连续的实数值,而分类则用于预测有限个离散值
线性回归
线性回归的hypothesis表示为:
![][02]学习的目标是求loss function最小时的解θ*
![][03]
梯度下降法
对上式直接求导来解,复杂度是很高的(O(n3)),所以我们可以使用梯度下降法(Gradient Descent)来求解。
梯度下降法的来源于负梯度是函数下降最快的方向这一思想,具体的方法如下:
- 首先对θ赋值,这个值可以是随机的,但通常让θ是一个全零的向量。
- 改变θ的值,使得J(θ)按梯度下降的方向进行减少。
梯度下降法在数学上可以表示为:
![][04]其中α表示学习速率(learning rate),它代表函数在负梯度方向每一次移动的步长。学习速率太大,会使最终结果无法达到最小值,而学习速率太小怎会导致迭代次数过多。我们可以通过观察算法迭代次数—minJ(θ)曲线,判断梯度下降的过程是否正常,如果随着迭代次数的增加,minJ(θ)逐渐减小,并在达到某个值后几乎不再减少,则梯度下降过程正常。如果minJ(θ)不断增大或时增时减,则算法最终可能会无法收敛于J(θ)的最小值处,最可能的原因是学习速率过大,需要减少α的值。
实际工作中,可以通过选取不同的α值,并观察算法迭代次数—minJ(θ)曲线曲线,来选取最好的学习速率。经验上来说,学习速率的候选值可以按{... , 0.01, 0.03, 0.1, 0.3, ... , 1, ...}这样大约3倍的递增来取。
梯度下降法不能保证得到全局最优解,只能得到局部最优解,这与参数的初始值有关。从两幅图中可以看到,最终的解与初始位置有密切的关系。
梯度下降法的思想可以做如下理解:当你在一座高山上的某一点准备下山时,为了能够最快的下山,你会选择最陡的方向走一步。到达新的位置后,重新选择一个最陡的方向再走一步。不断重复上述步骤,就可以以最快的速度下山。
对于线性回归问题,梯度下降的公式变为:
![][05]需要注意的是,参数θ0,θ1...θ2在每一轮的迭代中是同步更新的。也就是说,在某一轮更新中,任意参数的更新值,不会参与其他参数的更新计算中。
同时,由于线性回归的loss function是一个凸函数,所以用梯度下降法可以得到唯一的全局最优解。
批量梯度下降
在批量梯度下降中,每一次参数更新都会遍历全部的训练数据{x1, y1}, {x2, y2}, ... , {xm,ym}对于线性回归问题,这种方法可以得到一个全局最优解,但是当样本数据量很大的时候,会非常耗时。
Feature scaling
器学习中的一个常用方法,它的主要作用是将不同feature的取值映射到同一个范围中,如(-1, 1),(-0.3, 0.3)等,通常做法如下:![][06]
其中a为特征xi的均值,b为特征xi的最大值、最大值与最小值之差或标准差。
在batch gradient descent中,对feature做scaling,可以加速算法收敛,尤其是不同特征的取值范围相差很大的情况。
除此之外,feature scaling对学习算法精度也有一定的影响。当两个feature取值范围差距很大时,范围更大的feature可能会在模型中起更大的作用,但实际情况中两者的重要性可能是接近的,这就需要做feature scaling。
多项式回归
我们可以通过设计高阶特征在线性回归的基础上实现多项式回归。对于线性回归的hypothesis,![][07]令x2=x12, x3=x13,实现了一个3次多项式的回归:![][08]这也是用线性模型实现非线性的常用方法。
[02]: http://latex.codecogs.com/png.latex?\J(\theta)=\frac{1}{2m}\sum_{i=1}{m}(h_{\theta}(x{(i)})-y{(i)})2
[03]: http://latex.codecogs.com/png.latex?\\theta^{*}=\arg\min_{\theta}J(\theta)
[05]: http://latex.codecogs.com/png.latex?\\theta_{j}:=\theta_{j}-\frac{\alpha}{m}\sum_{i=1}{m}(h_\theta(x{(i)})-y{(i)})x_j{(i)}
[04]: http://latex.codecogs.com/png.latex?\\theta_{j}:=\theta_{j}-\alpha\frac{\partial{J(\theta)}}{\partial\theta}
[06]: http://latex.codecogs.com/png.latex?\x'{i}=\frac{x{i}-a}{b}
[07]: http://latex.codecogs.com/png.latex?\h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{3}
[08]: http://latex.codecogs.com/png.latex?\h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{1}2+\theta_{3}x_{1}3