4.多变量线行回归(Linear regression with multiple Variables)

向量

多变量时,多个变量可以用向量表示。在这之前先对向量常用表示方法做一个标明。向量是一种特殊的矩阵,讲义中的向量一般都是列向量。一般又有1 索引向量和 0 索引向量,左图为 1 索引向量,右图为 0 索引向量,一般我们用 1 索引向量。

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_正规方程


4.1 多维特征

我们现在给房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(𝑥1, 𝑥1, . . . , 𝑥𝑛)。

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_线性回归_02


𝑛 代表特征的数量,𝑥(𝑖)代表第 𝑖 个训练实例,是特征矩阵中的第𝑖行,是一个向量( vector)。比如上图:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_机器学习_03


𝑥𝑗𝑖) 代表特征矩阵中第 𝑖 行的第 𝑗 个特征,也就是第 𝑖 个训练实例的第 𝑗 个特征。

支持多变量的假设 ℎ 表示为: ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2+. . . +𝜃𝑛𝑥𝑛,这个公式中有𝑛 + 1个参数和𝑛个变量,为了使得公式能够简化一些,引入𝑥0 = 1,则公式转化为: ℎ𝜃(𝑥) = 𝜃0𝑥0 + 𝜃1𝑥1 + 𝜃2𝑥2+. . . +𝜃𝑛𝑥𝑛,此时模型中的参数是一个𝑛 + 1维的向量,任何一个训练实例也都是𝑛 + 1维的向量,特征矩阵𝑋的维度是 𝑚 ∗ (𝑛 + 1)。 因此公式可以简化为: ℎ𝜃(𝑥) = 𝜃𝑇𝑋,其中上标𝑇代表矩阵转置。

4.2 多变量梯度下降(Gradient Descent for Multiple Variables)

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

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_梯度下降法_04


其中: ℎ𝜃(𝑥) = 𝜃𝑇𝑋 = 𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥2+. . . +𝜃𝑛𝑥𝑛,

我们的目标和单变量线性回归问题中一样,是要找出使得代价函数最小的一系列参数。

多变量线性回归的批量梯度下降算法为:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_正规方程_05


Python代码:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_梯度下降法_06


4.3 梯度下降法实践——特征缩放(Gradient Descent in Practice-Feature Scaling)

以房价问题为例,假设我们使用两个特征,房屋的尺寸和房间的数量,尺寸的值为 0-2000 平方英尺,而房间数量的值则是 0-5,以两个参数分别为横纵坐标,绘制代价函数的等高线图能,看出图像会显得很扁,梯度下降算法需要非常多次的迭代才能收敛。解决的方法是尝试将所有特征的尺度都尽量缩放到-1 到 1 之间。

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_梯度下降法_07


最简单的方法是令: 𝑥𝑛 = (𝑥𝑛−𝜇𝑛)/𝑠𝑛,其中 𝜇𝑛是平均值, 𝑠𝑛是标准差。

4.4 梯度下降法实践——学习率(Gradient Descent in Practice-Learning Rate)

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们

可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_机器学习_08


通常可以考虑尝试些学习率:𝛼 = 0.01, 0.03, 0.1, 0.3, 1, 3, 10

4.5 特征和多项式回归(Features and Polynomial Regression)

线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型: ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥22,或者三次方模型: ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥1 + 𝜃2𝑥22 + 𝜃3𝑥33。

根据函数图形特性,我们还可以使:ℎ𝜃(𝑥) = 𝜃0 + 𝜃1(𝑠𝑖𝑧𝑒) + 𝜃2(𝑠𝑖𝑧𝑒)2

或者:ℎ𝜃(𝑥) = 𝜃0 + 𝜃1(𝑠𝑖𝑧𝑒) + 𝜃2√𝑠𝑖𝑧𝑒

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

4.6 正规方程(Normal Equation)

到目前为止,我们都在使用梯度下降算法,梯度下降算法是一点一点的接近最优值,但是对于某些线性回归问题,正规方程方法是更好的解决方案,可以直接一次性的求解𝜃的最小值。如:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_机器学习_09


正规方程是通过求解下面的方程来找出使得代价函数最小的参数的:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_正规方程_10


假设我们的训练集特征矩阵为 𝑋(包含了 𝑥0 = 1)并且我们的训练集结果为向量 𝑦,则利用正规方程解出向量 𝜃 = (𝑋𝑇𝑋)−1𝑋𝑇𝑦 。上标 T 代表矩阵转置,上标-1 代表矩阵的逆。设矩阵𝐴 =𝑋𝑇𝑋,则: (𝑋𝑇𝑋)−1 = 𝐴−1。

注:对于那些不可逆的矩阵,正规方程方法是不能用的。(造成矩阵不可逆的原因有两个:一是因为特征之间不独立,如同时包含英尺为单位的尺寸和米为单位的尺寸两个特征,1 米等于

3.28 英尺 ( 四舍五入到两位小数 ),这样,你的这两个特征值将始终满足约束𝑥1=𝑥2∗(3.28)2。

实际上,你可以用这样的一个线性方程,来展示那两个相关联的特征值,矩阵𝑋′𝑋将是不可逆的。第二个原因是是特征数量大于训练集的数量,具体地说,在𝑚小于或等于 n 的时候,例如,有𝑚等于 10 个的训练样本也有𝑛等于 100 的特征数量。要找到适合的(𝑛 + 1) 维参数矢量𝜃,这将会变成一个101 维的矢量,尝试从 10 个训练样本中找到满足 101 个参数的值,可能可以实现,但这并不是个好主意。通常,我们会使用一种叫做正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当𝑚比𝑛小的时候的问题。删除特征,首先看是否有一些多余的特征,例如线性相关的特征,或者有一些多余的特征时,可以删除这两个重复特征里的一个,或者删除些反应的内容较少的特征。

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

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_正规方程_11


总结一下,只要特征变量的数目并不大,标准方程是一个很好的计算参数𝜃的替代方法。具体地说,只要特征变量数量小于一万,我通常使用标准方程法,而不使用梯度下降法。

随着我们要讲的学习算法越来越复杂,例如,当我们讲到分类算法,像逻辑回归算法,我们会看到,实际上对于那些算法,并不能使用标准方程法。对于那些更复杂的学习算法,我们将不得不仍然使用梯度下降法。因此,梯度下降法是一个非常有用的算法,可以用在有大量特征变量的线性回归问题。或者我们以后在课程中,会讲到的一些其他的算法,因为标准方程法不适合或者不能用在它们上。但对于这个特定的线性回归模型,标准方程法是一个比梯度下降法更快的替代算法。所以,根据具体的问题,以及你的特征变量的数量,这两种算法都是值得学习的。

正规方程的 python 实现:

Python 多变量回归 分类变量 标准化回归系数 多变量回归模型定义_线性回归_12