线性回归,主要用于从数据中拟合出一条直线(或更高维的平面),这条直线能够很好地体现数据的特征,比如,它能够使得平面上的点都均匀地分布在这条直线上。
算法思想
对于简单线性回归和多元线性回归,其算法过程是相同的,不同之处在于简单线性回归只有一个特征需要拟合,多元线性回归有n个。在线性回归中,我们的数据集拥有一定的参数和相应的输出,令
表示第i个数据的参数,
表示第i个数据的输出,令目标函数
,这是我们最终得到的函数,其中x1,x2,…,xn为我们拥有的一个个已知参数,比如我们的线性回归最终要预测房价,那么这里的x可能是房屋大小,离市中心的距离等等条件,函数的最终输出就是预测值。其中的θ都是未知的。不同的θ对应着不同的直线,为了得到最佳的拟合直线,我们的目标就是找到最佳的θ。因此线性回归的任务如下:
其中
表示函数的预测值与实际值的平方误差(square error)。由于我们有若干的数据,因此对他们的平方误差计算后累加,由于相加后误差会变大,因此我们取一个均值除以m,最后再除以2的原因是,方便后面的计算(2可以被约掉),并且多除一个2并不会影响整个式子的意义。
损失函数
定义 ,其中的 作为损失函数,它定义了预测值与实际值之间的一种联系,当损失函数的值越小时,说明预测值与实际值越接近,从而我们的目标变为找到合适的θ使得损失函数的值越小越好。
梯度下降
梯度下降(Gradient Descent)算法是机器学习中一种常用的算法,可以用来最小化我们的损失函数。损失函数并不止上面用到的这种,还包括其他各种各样的损失函数,都可以利用梯度下降来找到一个局部最优解。
梯度下降算法的思想是这样的:对于一个由若干个θ形成的直线、曲线或者平面或其他形状,我们随机地给θ赋初始值,它必定位于图像上的某个位置,在那个位置上,寻找一个最陡的方向往下走,重复这个步骤,最终肯定能够到达某个点,并且没有比他更低的点,此时我们就找到了最优解。
所谓的“最陡”怎么定义的呢?我们知道一条曲线,最陡的地方就是它的切线方向,因此我们可以通过求导的方式来得到它,对于多元函数,我们需要用到偏导来求。因此得到参数的更新公式如下:
学习率
其中α定义为学习率,直观上看就是每次更新时的步长。当α较小时,每次更新变化的数值都比较小,因此可能需要多次迭代才能到达最优解。当α较大时,每次更新变化的数值较大,可能会跳过最低点,甚至导致无法收敛的情况。通常a从0.001,0.01,0.1,1这些值里面尝试。
计算公式
在简单线性回归的情况下,有
。
当j=0时,
当j=1时,
此时
和
的更新公式如下:
在多元线性回归的情况下,计算方式也是一样的。
局部最优与全局最优
由于上面的梯度下降算法是先累计m次的结果后再进行参数的更新,因此也称为批量梯度下降(Batch Gradient Descent)。它有一个明显的缺点,就是容易陷入局部最优解的情况,当我们的参数构成的图像并不完全是凸的时候,不同的初始值可能会陷入到不同的局部最优解中。当梯度下降算法接近一个最优解时,导数值会越来越小,最终收敛,但是这个局部最优解很可能不是一个全局最优解,虽然对于简单线性回归来说并没有这个问题,因为它的图像就是一个简单的凸平面,局部最优就是全局最优。这里涉及到凸优化理论,不做深入讨论,待之后再进行学习吧。
特征缩放(feature scaling)
我们的参数,通常有各种各样的范围,比如身高的范围在150到200。体重的范围在80到200,年龄到范围在0到150。当这些参数作用到损失函数上时,会导致我们的特征等高线图变得臃肿(实在不知道怎么形容)…在这样的图形上,局部下降需要迭代更多的次数,才能够到达最优解所在的位置。
为了防止这种情况,使用特征缩放将参数归一化到一个固定的范围,如-1到1之间。当所有特征都位于这个范围内时,特征等高线图会变得平滑,也更容易收敛。
均值归一化(mean normalization)
一种常见的特征缩放技巧,将特征 缩放为 ,从而使
标准方程法(正规方程法)
使用梯度下降来求解线性回归,需要较多次的迭代,还需要选择合适的a,才能够收敛到一个合适的值。使用标准方程法,可以一次性求解θ的最优值,下面看看标准方程法的具体过程。
首先,标准方程法是基于线性代数以及最小二乘法的一种方法。我们将所有的特征,比如
表示身高,
表示体重,
表示年龄,分别用列向量来表示,在将其组织成矩阵的形式如下:
标准方程法推导
矩阵X中,每一列代表原始样本中的一行数据,都是已知的。矩阵Y也是已知的,我们需要求解Xθ=Y,找到合适的θ使得Xθ=Y成立。根据线性代数的知识我们知道Xθ=Y只有当 中每个值是对应 每个值的线性组合,此方程才有解。因为θ矩阵反映了他们之间是怎样的一种线性组合。换句话说,Y向量必须存在于X矩阵列向量形成的列空间中,方程才能有解。但是这个不一定成立,所以我们想办法,将向量Y映射到X的列空间中。而实现这一步的步骤就是在方程左边同时乘上 ,从而得到 。这一步相当于对Y进行了投影,本质上是最小二乘法。当 可逆时,便可以得到 。这就是标准方程法最终的形式。当 不可逆时,可以使用伪逆来计算,虽然这种情况很少出现。
标准方程法vs梯度下降法
标准方程法虽然可以一次性求出最优解,也不需要选择合适的学习率,但是在求
时需要耗费大量时间,当我们的特征数较多时,往往不推荐使用。通常当特征数小于10000时较为合适。
梯度下降法虽然需要迭代,需要选取合适的学习率,但是它的适用范围较广,在其他众多机器学习算法中,梯度下降算法往往是适用的,虽然迭代次数上可能有些差异,但是总体上表现良好。而标准方程法只适用于求线性回归的情况。