第五章 多变量线性回归
多功能
符号定义:
n表示特征的数量,
x表示输入变量(或者特征),
y表示输出变量(预测的目标变量),
x(i)表示第i个训练样本的输入特征值(i指的是索引,表示第多少个),
y(i)表示第i个训练样本中的第j个特征量的值。
有了多个特征向量,继续讨论假设形式应该是怎么样的。
单个特征量的线性回归假设:
多个特征量的线性回归假设:
例:假设是为了预测房屋的价格,多个特征量包括楼层数、卧室数、使用年数等会影响房屋的价格。
为了表示方便,将上述多个特征量的线性回归假设公式简化:
假设X0=1,特征向量x是一个从0开始标记的n+1维的向量:
同时,把参数都看做一个向量:
现在假设可写成:
其中x0=1,这就是所谓的多元线性回归。(多个特征量或变量来预测y)
多元梯度下降法
多元假设:
参数:
梯度下降函数:
梯度下降的过程:
更新的例子:
多元梯度下降法演练(1)-特征缩放
如果你有一个机器学习问题,这个问题有多个特征,如果你能确保这些特征都处在一个相近的范围,这样梯度下降就能更快的收敛。
例如有两个特征值:
(1)x1表示房屋面积的大小,取值在0~2000之
(2)x2表示卧室的数量,取值在1~5之间。
通常,执行特征缩放的目的是将特征的取值约束到-1到+1的范围内。也就是说(),这个范围可以灵活的选择,只要不是太大或太小是可接受的。
在特征缩放中,有时会进行称为均值归一化的工作。如果有一个特征,用来替换,让特征值具有为0的平均值。
对于其他特征值,例如:
房屋的面积取值在0~2000之间,可以用下面的公式:
卧室的数量取值在1~5之间,可以用下面的公式:
更一般的规律:
其中,μi是训练集中特征xi(j)的平均值avg(xi);Si是该特征值的范围,表示为max(xi)-min(xi),也可以把它设置为标准差。
特征缩放是为了放梯度下降能够运行的更快一点,可以让迭代的次数更少一点。
多元梯度下降法(2)-学习率
梯度下降的更新算法如下:
(1)如何确保梯度下降能够正确的进行;
(2)如何选择学习率α。
这两个问题是在梯度下降法中需要认真解决的。
下面的图展示了梯度下降法的正确执行过程:
横轴表示迭代次数,纵轴表示代价函数每次迭代之后的结果,所以这里显示梯度下降的每次迭代后代价函数的值。可以通过这样的图像来判断梯度下降是否已经收敛。
介绍一种自动收敛测试:如果代价函数J(θ)一步迭代后的下降小于一个很小的值ε,这个测试就判断函数已经收敛。(ε可可以是小于10^-3)但是选择这样的阈值ε是非常困难的,所以通过上述的图像判断更清晰可靠。
通过上述的图像可以判断如何选择学习率α:
例如:
如果看到图像是上述这样的,意味着需要选择较小的α;
已证明的结论表明:只要选择较小的α,那么每次迭代之后的代价函数J(θ)都会下降。
总结:
(1)如果α太小,则梯度下降法会收敛缓慢;
(2)如果α太大,则梯度下降法可能不会再每次迭代都下降,甚至最终导致不收敛。
特征和多项式回归
如何将模型和与数据进行拟合呢?答:使用线性回归的方法。
除了线性回归外,我们也能采用多项式回归,举例如下假设函数:
可以定义为:
正规方程
到目前为止一直是用的梯度下降法来最小化代价函数,通过多次迭代收敛,找到局部最优值。相反的,正规方程提供了一种求θ的解析解法,可以不需要通过迭代一次性求得解,一步得到最优值。
假设对于一个代价函数:
可以通过求导数的方法得到使J(θ)的最小得θ值。
除了梯度下降法,另一种求最小值的方式则是让代价函数导数为0,求θ值。
通过此方法可以求出θ0,θ1,...,θm,但是比较复杂,求得:
使得代价函数最小化的θ。
在Octave或MATLAB编程语言中,计算上述的命令可以表示为:
X'表示X的转置,pinv是用来计算逆矩阵的函数。
在一般的情况下,假设有m个训练样本,还有n个特征向量。每个训练样本可能是这样的向量:
下面这个图比较了两个算法之间的区别:
所以可以根据特征量n的多少来决定选择梯度下降法还是正规方程法。但是根据具体的特征量的数量和具体的问题,这两种算法都是值得学习的。
正规方程在矩阵不可逆情况下的解决方法
问题如下:
如果矩阵不可逆的情况该怎么办?
在Octave里,有pinv和inv两种方法用来求矩阵的逆,但一个求得是伪逆,另一个求得是逆。
对于不可逆的情况下,我们可以采取减少特征量和使用正规化方式来改善。