一、多变数线性回归的假设函数

在之前的学习中,我们只讨论了含有一种参数的情况,也就是单变数的线性回归问题,它的假设函数为: y = 	heta_{0}+	heta_{1}x ,然而实际上,一个线性回归问题会涉及到多个特征。比如依然拿预测房价的例子,影响房价的因素不仅包括房屋面积,还可能涉及到卧室数量、房屋所在楼层、房屋年限等。

这里我们用 n 表示特征的个数, x1,x2 …表示特征, m 表示样本数量, x^{(i)} 表示数据集中的第 i 行的所有特征(即特征向量), x_{j}^{(i)} 表示第 i 行特征向量中的第 j 个分量,如下图所示:

对于多变数线性回归,对应的假设函数为:

为了方便使用矩阵的方式来表示,我们可以令 x_{0}=1 ,这样假设函数就可以写成如下形式:

其中 x	heta 均为 n+1 维向量, 	heta^{T} 表示 	heta 向量的转置。

二、梯度下降

和单变数线性回归类似,我们依然使用梯度下降的方法来对代价函数进行优化。多变数线性回归的代价函数为:

梯度下降依然是迭代如下函数直至收敛:

接下来对每个参数求偏导,得到的结果如下所示:

接下来只需要不断利用梯度下降进行参数更新来优化代价函数直到收敛即可。

三、特征处理

1. 特征缩放

由于不同特征的范围可能会存在较大差异,比如在房屋价格预测的例子中,房屋的面积范围可能是0-2000 feet^{2} ,而卧室数量的范围可能为1-5,这两种特征的最大值相差了400倍。这种情况下使用梯度下降所导致的后果就是下降速度很慢(收敛的速度很慢)。为了解决这个问题,我们在梯度下降之前应该对数据做特征缩放(Feature Scaling)处理,从而使所有的特征都在一个差不多的范围之内,以加快梯度下降的速度。以上问题我们就可以对房屋面积和卧室数量这两个特征进行缩放,处理如下:

进行如上的处理后这两个特征的范围应该都在[-1,1]之间,事实上我们也希望通过这样的手段将特征值的范围控制在[-1,1]之间。

2. 均值归一化

此外我们也可以通过均值归一化的方法进行特征处理,过程如下:

其中 mu_{i} 表示特征 x_{i} 的均值, maxmin 分别表示特征 x_{i} 的最大值和最小值。另外分母部分也可以使用 sigma_{i} 来代替,它表示特征 x_{i} 的标准差。

四、代价函数与学习率

对于如何判断梯度下降是否正常运行以及学习率 alpha 如何选择,本节给出方法的说明。

首先我们需要绘制出代价函数 J(	heta) 与迭代次数的函数图。如果梯度下降正常运行,那么函数图应如下所示:

随著迭代次数的不断增加,代价函数的值不断减小并最终收敛。

还有一种叫自动收敛测试的方法,即每次迭代之后观察 J(	heta) 的值,如果迭代之后下降的值varepsilon<10^{-3} ,就判定为收敛。不过准确的选择阈值 varepsilon 是非常困难的,通常还是使用画图的方法。

如果出现了下面的两种情况,这个时候应该选择更小的 alpha 。如果 alpha 足够小,那么 J(	heta) 在每次迭代之后都会减小;但是如果 alpha 太小,梯度下降会进行的非常缓慢。

在选择 alpha 时,我们可以每隔3倍选取一个值,比如0.003,0.01,0.03,0.1…

五、特征选择与多项式回归

在特征的选择上,我们可以合理的选择特征或者是对特征进行组合或拆分,通过对特征进行处理可能会得到一个更好的模型。

假如我们有两个特征fronttage和depth,分别表示房屋的临街宽度和房屋深度,那么假设函数就会写成:

如果我们令x = frontage * depth,那么x表示的就是房屋面积,这时候假设函数就是我们之前讨论的单变数线性回归的假设函数了,并且通过这种处理我们可以得到一个更好的模型。

和这个密切相关的一个概念就是多项式回归(Polynomial Regression)。假设有下图所示的关于房屋价格的数据集, 我们有多种模型去拟合。

第一个模型是一个二次函数,如下图蓝色线段所示。但是二次函数是一个抛物线,不符合常理(因为房价不会随著房子面积的增加而减小),所以我们选择三次函数的模型, 如下图粉色线段所示。

想要使用该模型去拟合,我们可以将房屋的面积作为第一个特征,面积的平方作为第二个特征,面积的立方作为第三个特征。(这里需要注意的是, x1,x2,x3的范围差别会非常大, 所以一定要进行特征缩放处理)。

六、正规方程

用梯度下降求解最优值有两大缺点,一是我们要设定学习率 alpha 的值,二是要经过多次迭代才能达到最优值。事实上,我们可以使用一个更好的方法来求解最优值——正规方程

我们先来看一个最简单的例子,假设代价函数为 J(	heta)=a	heta^{2}+b	heta+c	heta 是一个实数,怎样得到最优解? 很简单,只要令它的导数为0就可以了。

事实上,代价函数不会像例子那样简单, 	heta 也不是一个实数而是一个 n+1 维的向量。这样,我们分别对每个 	heta 求偏导,再令偏导数等于0,既可以计算出左右的 	heta 了。但看上去还是很繁琐, 所以下面我们正规方程进行求解。首先,在数据集前加上一列 x_{0} ,值都为1;然后将所有的特征量放入矩阵X中(包括 x_{0} );再将输出值放入向量 y 中. 最后通过公式 	heta=(X^{T}X)^{-1}X^{T}y , 就可以算出 	heta 的值。

使用正规公式计算 	heta 时不需要进行特征缩放的处理,它和梯度下降相比如下图所示:

此外,通常来讲在正规方程中,对于 X^{T}X 一般不会出现没有逆矩阵的情况,如果出现了没有逆的情况,可以考虑两种处理方法:

(1) 使用了冗余的特征,检查特征中是否存在线性相关的两个特征并删除掉一个;

(2) 特征数量太多,甚至超过了样本数量(n≥m),这种情况我们应删掉一些特征或进行正则化处理(正则化的内容将在后面讲到)。


推荐阅读:
相关文章