本文内容介绍「多变量线性回归」问题。

首先引入一个多维特征模型,利用「多变量梯度下降」来迭代求出代价函数最小值。

之后介绍了「多项式回归」问题,以及「正规方程」,并把正规方程和梯度下降问题做了比较。

Linear Algebra Review

这部分线性代数的只是非常基础,仅仅整理了一些专业名词的英文去熟悉学习。

Linear Regression with Multiple Variables

4.1. Multiple Features

前面我们讨论了单变量特征(single variable)的回归模型(影响房屋价格的因素仅有面积大小),现在我们对房价模型增加更多的特征 $(x_1,x_2,…,x_n)$,构成一个多变量的模型。

下面这个例子为四个特征的模型,其中一些参数的说明如图:

支持多变量的假设 ℎ 表示为:

这个公式中有 𝑛 + 1 个参数和 𝑛 个变量,为了使得公式能够简化一些,引入 $x_0 = 1$,则公式转化为:

改写成矩阵的形式:

此时模型中的参数是一个 𝑛 + 1 维的向量,任何一个训练实例也都是 𝑛 + 1 维的向量,相乘就相当于参数向量的转置乘以实例向量,因此公式可以简化为:

4.2. Gradient Descent for Multiple Variables

与单变量线性回归类似,在多变量线性回归中,我们也构建一个代价函数(cost function),则这个代价函数是所有建模误差的平方和,即:

我们可以简写成 $J(\theta)$ ,其中:$h_{\theta}(x) = \theta^TX = \theta_0 + \theta_1x_1 + \theta_2x_2 + \cdots + \theta_nx_n$

我们的目标和单变量线性回归问题一样,要找到使得代价函数最小的系列参数,使用梯度下降的方法来求,就是要不断的更新每一个 $\theta_j$ 参数,通过 $\theta_j$ 减去 $\alpha$ 乘以导数项,具体过程如下图,分别是单特征和有多个特征的模型的情况。

4.3. Feature Scaling

机器学习中我们使用参数的目标是为了通过数据集改善每一个特征量 x 对应的权重 θ,最终得到拟合度高的假设方程。这时就出现了一种情况,如果某个特征量的数量级远大于其它特征量,就会导致该特征在学习算法中占主导位置。所以,我们需要通过预处理的方式让初始的特征量具有同等的地位,才能让机器学习算法更快地学习得到他们的权重。

使用这里「房价预估」的例子,假设有两个特征影响房价,分别是「面积」和「房间数」,很显然这两个数据差别是非常大的,在没有进行单位统一之前,由于变量的单位相差很大,导致了椭圆型的梯度轮廓;缩放之后将变量变成同一单位,产生了圆形轮廓。

图片来源:TingMind.cn

由于梯度下降是按切线方向下降,所以导致了系统在椭圆轮廓不停迂回地寻找最优解,而圆形轮廓就能轻松找到。

特征缩放的方法有很多,比如使用 $x_n = \frac{x_n-\mu}{max-min}$ 的方式,将数据缩放为 [-1, 1] 的范围,例如房屋面积范围在 [100, 2000],平均值为 1000,就可以将均值 1000 以及最大最小值差带入。

更一般的方法,可以使用均值归一化(mean normalization)使得数据集的平均值为零:$x_n = \frac{x_n-\mu_n}{s_n}​$,其中 𝜇 是平均值,𝑠 是标准差。

埋坑:这里需要去理解特征标准化和归一化的区别,有待深入学习。

4.4. Learning Rate

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。 也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如 0.001)进行比较。

梯度下降算法的每次迭代受到学习率的影响,如果学习率 𝑎 过小,则达到收敛所需的迭代次数会非常高;如果学习率 𝑎 过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。

4.5. Polynomial Regression

前面学习了线性回归,但是线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,这一节继续学习多项式回归(Polynomial Regression),比如一个三次方模型:$h_{\theta}(x) = \theta_0+\theta_1x_1+\theta_2x^2_2+\theta_3x_3^3$,下图是一个一元多项式回归的例子。

如果我们采用多项式回归模型,在运行梯度下降算法前,特征缩放非常有必要。

4.6. Normal Equation

在前面我们学习了使用梯度下降法来计算参数最优解,其过程是对代价函数相对于每个参数求偏导数,通过迭代算法一步一步进行同步更新,直到收敛到全局最小值,从而得到最优参数值。但是对于某些线性回归问题,正规方程(Normal Equation)方法是更好的解决方案,正规方程则是通过数学方法一次性求得最优解。

下面这个例子中,我们有 4 个训练样本,我们构建一个矩阵 X 包含训练样本的所有特征变量,构成一个 m*(n+1) 维矩阵,所有的预测值放入向量 y,构成一个 m 维向量。代价函数最小化的 $\theta = (X^TX)^{-1}X^Ty​$。

对于更一般的情况,假设有 m 组训练样本分别为 $(x^{(1)},y^{(1)},\cdots,x^{(m)},y^{(m)})$,每组训练样本有 n 个特征值。其中,

对于那些不可逆的矩阵(通常是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,也有可能是特征数量大于训练集的数量),正规方程方法是不能用的。

梯度下降与正规方程比较:

梯度下降 正规方程
需要选择学习率𝛼 不需要
需要多次迭代 一次运算得出
当特征数量 𝑛 大时也能较好适用 需要计算 ${(X^TX)}^{-1}$ 如果特征数量 𝑛 较大则运算代价大,因为矩阵逆的计算时间复杂度 为 $𝑂(𝑛^3)$,通常来说当 𝑛 小于 10000 时还是可以接受的
适用于各种类型的模型 只适用于线性模型,不适合逻辑回归模型等其他模型

只要特征变量的数目并不大,标准方程是一个很好的计算参数𝜃的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。
随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。

专业名词整理

  • linear algebra:线性代数
  • matrix(matrices):矩阵
  • vector:向量
  • two dimensional array:二维数组
  • multiplication:乘法
  • inverse:逆、transpose:转置
  • superscript:上标、subscript:下标
  • feature scaling:特征放缩
  • standard deviation:标准差
  • average value:平均值
  • polynomial:多项式
  • normal equation:正规方程

参考

数据特征 标准化和归一化你了解多少?

驿舟小站

Coursera-ML-AndrewNg-Notes

斯坦福大学 2014 机器学习