四、多变量线性回归
1. 多功能
在之前的课程中,我们利用房屋的大小这一个特征来那个来预测房屋的价格,但是当特征量变多之后,就得改变应付此类问题的策略了,下图所介绍的是一些常用的表达。
n:表示有n个特征值。
x(i):表示第i个训练样本的输入特征值。
xj(i):表示第i个训练样本中第j个特征量的值。
接下来,我们将定义多特征量的表达式,如下:
表达式中的x1到xn为n个特征量的值,但是在开头的θ0并没有相应的特征量在旁边,所以我们为了方便记录,额外定义了一个特征量x0并让它的值恒等于1。这样,当将x于θ的值分别对应到矩阵中之后,就可以一目了然,就像上图中的x与θ的两个向量。而想要得到h(x),只需将θ进行一次转置再与x向量相乘即可得到最终表达式。
小结
这以上的内容也就是所谓的多线性回归,有多个特征量来决定最终值。
2. 多元梯度下降法
因为现在设计到了多个特征量,所以我们的多元梯度下降算法也与之前的梯度下降算法有些许不同,如下所示:
跟之前的算法相比,其实本质上并没有什么区别,所用的算式也大同小异,只不过在多元当中,需要算的θ值就比之前要多很多,只是在θ0和θ1之后有添加了θ2等特征量的计算。
特征缩放(Feature Scaling)
因为J(θ)的函数图像会受到特征量的影响,所以如果当特征量之间数值相差很大时,就会得到一个非常窄的椭圆形,这会让梯度下降的步伐变得十分缓慢,它可能回来会横跳最终找到最优值。
相反,如果让特征量之间数值相差很小时,就如上图右侧所示,我们会得到一个更加圆的一个曲线图,这样的话会使梯度下降的路径变得更加直接快速,这其中所用到的方法就是特征缩放。
所以我们对于特征值的处理就要更加注意,下图就是给出相关的规范原则。
我们通常会将特征值通过各种方式限制在大约-1≤xi≤1这个范围内,但是如果稍微有所偏差是可以在接收范围内的,一般可以将这种“红线”扩大到-3到3或-1/3到1/3之间,如果偏差超过这些范围,那还需要多加考虑了。
除上述之外,我们在进行特征缩放时,有时也会进行 均值归一化(Mean normalization) 的工作,就是将xi替换成xi减μ,让特征量具有0的平均值。通俗点来讲,就是一种缩小特征值的方法,通过这种方法,我们可以将特征量的范围大致缩小在-0.5≤x≤0.5范围附近。
上图式中的μ1代表训练集中特征x1的平均值,而S1代表特征值的范围,也就是用x1的最大值减去最小值。
接下来,我将介绍两种测试自己梯度下降的算法正在正确的工作。
一般我们会更倾向于用第一种方法,也就是上图的左侧,通过得到minJ(θ)与迭代次数的函数图像,可以很清楚地观察梯度下降时候往对的方向进行。
而第二种方法就是上图的右侧,我们可以通过自动收敛测试观察是否已经收敛,也就是说通过判断J(θ)的值是否小于一个阈值来进行判断,但是这种阈值一般很难去取,所以通常会用上面的一个方法去判断。
通过上述的第一种方法,我们就可以对梯度下降正误进行判断,通常情况下造成图像不正常的情况是因为选取的α即学习率过大,使梯度下降的步伐过大,导致每次下降时都会越过最低点,这时就要减小α的值,例如下图所示:
实验发现,只要α足够小,J(θ)就总能找到最优值。
如果α过大的话,J(θ)可能不会在每一次迭代都下降,甚至可能不收敛(有些情况下也可能会出现收敛速度慢);如果α过小的话,梯度下降的步伐就会很小,要经过漫长岁月才能找到最优值。
故通常情况下,我们会尝试不同的α值,通过观察J(θ)的变化情况,找到下降最快的所对应的α值。
3. 特征与多项式回归
现在我们考虑的特征量变多了,特征可以任意的进行选取,所以不能单单用一条直线就可以很好的拟合我们的数据,所以这时候要引入其他的函数,例如二次函数、三次函数等,这就是所谓的多项式回归(Polynomial regression)。
如果要用到梯度下降的话,我们还要考虑特征量之间的差值,如果相差太大就需要用到上节课所讲的特征缩放。
下面就是一个例子:
用二次函数可能不能拟合我们的数据,因为随着x的增大,二次函数反而会减小,所以这时候就可以用其他的函数例如带根号的函数,线性回归后能够更好地拟合数据。
4. 正规方程
前面我们是通过梯度下降来得到θ的最优解,但其实还有其它求θ最优解的办法,只用一个式子便可以求出,就是接下来要讲的。
正规方程(Gradient Descent)
下面就是一个例子:
我们可以假设一个x0恒等于1的特征量,然后将所有特征量放入一个矩阵,将目标值放入另一个矩阵,就能计算上面式子。
接下来,我将详细为你介绍求解的具体步骤,首先来看矩阵X与向量y是怎么得到的。
我们将数据集的每一个例子中的特征量分别转置放入矩阵X,也就是将每一个例子的特征量作为X的每一行,而目标值就直接竖着放入向量y。
用正规方程还有一个优点,就是它不用像梯度下降一样要进行特征缩放,它允许你的特征量之间的差值很大。
下面我将为你总结梯度下降与正规方程的优缺点。
梯度下降
优点:当n的值非常大的时候,它计算的效果任然会很好。
缺点:它需要通过很多测试去画J(θ)的图像得到α的最优值,并且想要得到最终的结果需要很多次的迭代。
正规方程
优点:它不用去选取α值,也不用进行迭代计算,只用一个式子便能得到最终结果。
缺点:因为式子中要计算(XTX)-1,所以如果n值特别大的话,计算这个式子会非常的慢。
小结
如果n值小于一万,则优先选择正规方程计算;如果n值大于一万,就建议去用梯度下降进行计算。
当然,你在计算(XTX)-1时可能会遇到有些矩阵没有逆矩阵的情况,那你可以有两个方法去解决:
检查是否有多余的特征
例如有些特征之间是有线性关系的,这时你可以删除其中一个特征。
检查特征是否过多了(e.g. m<n)
这时候你就要删除一些特征,或者采用正则化(regularization)。