图中是包含多个房屋特征的训练数据,我们用 表示特征个数, 表示第 个 训练样本, 表示第 个训练样本的第 个特征的值。图中第二个样本就可以表示为:,含有 个特征的样本对应的参数个数为 ,可以把 看作一个向量 ,假设我们已经求得参数 ,将所有参数和特征代入假设函数为:
可以发现,房价和 (平米数)、(房间数)、(楼层数)呈正相关,和(房龄)呈负相关。为了利用矩阵实现并行计算,我们给训练集的所有个样本都增加一个特征 ,这时 ,, 和 都是 维的矩阵,记作 ,可以将假设函数表示为矩阵相乘,即 乘以 的内积:
多元梯度下降
多元梯度下降的代价函数只需同时计算多个特征和参数即可:
利用梯度下降公式,反复迭代更新参数:
分别求每个参数 对代价函数 的偏导,同时更新所有参数:
值得注意的是,所有训练样本的第 1 个特征都为1,即 ,如此反复迭代更新,直到求得 的最小值,我们就得到了最优参数 的值,代入假设函数即可得到我们的多元线性回归模型。
特征缩放
我们发现,特征范围是有差异的,比如房价平米数在 0 - 200 平米之间,房间数目在 1 - 5 之间,由于数据不均衡就形成了上图椭圆形的代价函数的等值线,这会导致在梯度下降过程中出现较大的波动,需要消耗很长时间才能到达全局最低点,如果我们进行归一化,用真实值 / 最大值,把特征值的范围限制在 0 - 1 之间,就会形成圆形的代价函数等值线,这是一条更直接的梯度下降路径,可以很快通向全局最低点,如下所示:
我们将这种转换特征值范围的方法称作特征缩放。通常可以约束到 -1 到 1 之间,经验最小范围是 (-0.3, 0.3),最大范围是(-3, 3)。
均值归一化:,其中 为均值, 为最大值减去最小值,即标准差,通过均值归一化可以使特征的均值为 0(由于 ,所以 不需要归一化)。
学习率
线性回归中,如果学习率设定合理,每一步迭代后,误差都应该是减小的,当减小的幅度很小时,就说明已经收敛了。图中代价函数(蓝色)的误差随着迭代次数的增加不减反增,是由于学习率过大导致参数无法更新到全局最低点(橘黄色),如果误差时大时小也是因为学习率过大,应该调小学习率,但是如果学习率过小,也会造成梯度下降幅度过小,收敛缓慢。学习率的选择可以每次交叉隔十倍和三倍进行尝试,比如:0.001, 0.003, 0.01, 0.03, 0.1, 0.3, ...
多项式特征
假如我们的数据集只两个特征:长度和宽度,我们可以将这两个特征组合成一个特征 ,很明显 为房屋的面积,可以更精确地表示房屋的大小,那么定义假设函数为:
但是我们发现直线(粉色)不能很好地拟合训练集,所以尝试增加二次项:
但是发现二次函数(蓝色)后段,随房屋面积增加,价格不增反降,这很不合理,所以尝试增加三次项:
三次函数(绿色)很好地拟合了训练集,定义特征及每个特征取值范围如下:
所以最终假设函数为:
值得注意的是,三个特征的取值范围差别很大,这时特征缩放就变得重要,特征缩放能将值的范围变得具有可比性。除了高阶项,也有其他特征组合方式,如下所示:
正规方程(Normal equation)
正规方程不需要像梯度下降那样反复迭代即可直接求出假设函数参数的最优解。
在一元线性回归中, 是一个实数或标量 ,对 求关于 的导数并将导数置为 0,即可求得使 最小的 值。在多元线性回归中, 是一个 维的参数向量,而代价函数是这个参数向量的函数,如下所示:
通过微积分知识我们知道,逐个求参数 对代价函数 的偏导,把它们全部置为 0,即可得到最小化代价函数 的 值,
举例说明,上图是训练样本数量 的训练集,将原始训练集增加一列 ,构建设计矩阵 ,使得 的每一行是训练样本 的转置,即 , 是 维的矩阵。再构建标签向量 , 是 维的向量,令 等于 转置乘以 的逆乘以 转置再乘以 ,这样就能直接求得使代价函数最小化的 :
其中 是 的逆矩阵,前提是矩阵 可逆,如果使用正规方程解法,则不需要进行特征缩放。
梯度下降和正规方程比较:
- 梯度下降需要调整学习率和反复迭代;正规方程无需设定学习率也无需迭代
- 梯度下降在含有大量特征的训练集上运行良好;正规方程在含有大量特征的训练集上运行缓慢,因为计算 的时间复杂度接近
- 如果特征数 较大(上万)优先使用梯度下降,否则优先使用正规方程
- 梯度下降适用于大多数机器学习算法;正规方程只适用于线性回归算法
矩阵不可逆
通常有两种情况会造成 矩阵不可逆,一种情况是训练数据集包含线性相关的特征,比如房价预测中房子的平米数和英尺数,它们的关系是 ,那么矩阵 将不可逆,这时我们删除其中一个特征即可。另一种情况是特征太多,以至于特征数大于样本数,即 ,这也会导致矩阵 不可逆,可以通过删除一些特征或使用正则化来解决。不过实际上很多线性代数库可以通过伪逆计算出正确结果,比如 Octave:pinv(x'*x)*x'*y
即使矩阵 不可逆,也能算出正确结果。
网友评论