之前的单变量线性回归只有一个输入变量,既自变量,但在实际运用中往往不止一个特征,如下图所示:
为特征的个数
为第
个训练集的输入变量,既第
个全部特征
为第
个训练集所有特征的第
个特征,比如
在这个例子中,,有4个特征, 分别是房屋面积,卧室的年限,房子的层数和房子的年限,
为训练集的第2个输入变量,既第二个全部的特征,
为第二个输入变量中的第三个特征,为房子的层数是2层,故在这个例子中,假设函数(hypothesis function):
以此类推,当训练集的输入变量有个特征时,假设函数(hypothesis function):
把作为
,
表示成向量为
表示为向量为
因此假设函数为
由此可知代价函数(cost function)为
采用多元梯度下降法和正规方程的方法来求得代价函数的最小值。
1、多元梯度下降法
在一元线性回归中,利用梯度下降法不停的更新值,使
同理,在多元线性回归中需不停的更新值
因为我们使,所以该式对
也成立。
1.1、特征放缩
如果训练集中每个特征的值范围相差很大,就会导致代价函数(cost function)的呈下图这种情况,以两个特征为例,其中代表房屋面积,范围是0~2000,
代表卧室的数量,范围是1~5
这时在该代价函数使用梯度下降法就会导致下降过程很缓慢,甚至还可能会出现来回波动。
在这种情况下,一种有效的方法就是进行特征放缩,这就可以让梯度下降法下降得更平缓且迅速,如下图所示
使所有特征的范围都处于0~1之间,既
一般来说,我们会利用特征放缩将的范围控制在
,既
但是与这个范围接近即可,或者
都是可行的,根据实际情况而定。
在特征放缩中,有时也会进行均值归一化的工作, 具体操作为有一个特征,在训练集中,该特征的平均值为
,我们用
来替换
,使特征
的平均值为0,最后再进行放缩,既表示为:
其中为训练集中特征
的范围,也可以是特征
的标准差,但在这里使用特征
的范围就足够了,最后特征
的范围为
当然只要比这个范围差的不多均可。
1.2、学习率
如果学习率选择不当,可能会导致代价函数不收敛,从而无法得到最小值,可以通过绘制迭代次数和代价函数的曲线来判断学习率是否选择正确和梯度下降是否正常工作,如下图所示,横坐标代表迭代次数,既梯度下降的次数,纵坐标表示代价函数
当曲线递减,且趋于平缓的时候,表示梯度下降正常工作,选取较平缓时作为最小值。
或者采用自动收敛测试,既在进行梯度下降的过程中,如果的值小于一个很小的值
,则可以判断该代价函数
已经收敛,但要选择合适的阀值
是很困难的,使用
关于迭代次数的曲线图会更加的直观。
以下情况都需要减小的值:
但的值也不能太小,不然可能会导致
收敛的很缓慢。
总结:
- 如果学习率
选择的太小,迭代次数就会增加,收敛的速度会变慢
- 如果学习率
选择的太大,代价函数
可能不会在每次迭代都下降,甚至有可能不收敛反而越来越大。
- 所以我们一般选择学习率
会尝试
2、正则方程法
对于某些线性回归问题,除了梯度下降法可以得到代价函数的最小值,我们也可以用正则方程的方法。如下图所示的训练集有4个训练样本,
,输入变量包含四个特征,
,并把
全部都设为1。
是包含了训练集中所有输入变量的矩阵,
是目标变量的向量。
因为输入变量可能包含多个特征,故一般形式为为:
所以矩阵可以表示为
目标变量可以表示为向量
其中为
阶矩阵,
为
维列向量,当
为
此时代价函数取得最小值。
但是可能不可逆, 从线性代数的角度出发,可能是以下两种情况
- 只有当
的时候才不可逆,既
每一列向量都线性相关,说明有一个或多个特征可以通过其他特征得出,包含了多余的特征。
- 特征太多,当
的时候,这时可以删掉一些特征,或者采用正则化的方法。
不过即使是不可逆的,有些线性库依然可以求出
值,比如Octave的pinv函数,结果仍是正确的
正则方程法和梯度下降法的比较
梯度下降法法:
缺点:
- 需要对学习率
进行选择
- 需要进行多次的迭代,可能会影响效率
优点:
- 即使在特征很多的情况下,既
很大的情况下也能正常工作
正则方程法:
缺点:
- 需要去计算
可能不可逆
- 当有很多特征的情况下,效率会很低
优点:
- 无需选择学习率
和迭代
一般当时,用正则方程法没有问题,当
时运用正则方程法就需要衡量一下梯度下降法是否效率更高。