4 多变量线性回归Linear Regression with Multiple Variables

梯度下降应用于多变量,特征缩放,多项式回归,正规方程及其不可逆性

Posted by Hilda on March 4, 2025

吴恩达课程系列

1-1 欢迎参加《机器学习》课程【机器学习简介/例子】

1-2 什么是机器学习【机器学习的2个定义和分类】

1-3监督学习【监督学习的定义,监督学习的分类(回归与分类)】

1-4无监督学习【无监督学习的定义,无监督学习问题的分类(聚类/信号分离/降维)】

2-1模型描述【如何描述一个模型(用一些符号),单变量线性回归是什么?】

2-2~2-4代价函数【代价函数的数学定义、代价函数的直观理解】

2-5 梯度下降【梯度下降的数学原理】

2-6梯度下降知识点总结【导数项、学习率的直观理解】

2-7线性回归的梯度下降【线性回归问题运用梯度下降法(求偏导)】

3-线性代数回顾【矩阵,向量,矩阵乘法,矩阵求逆转置(我补充了利用Numpy和Pandas进行运算的方法】)


4 多变量线性回归Linear Regression with Multiple Variables

4-1 多维特征

如下图所示,之前讨论过的预测房价的问题,是单变量(只有一个\(x\))的线性回归:

image-20250304190709608

从此刻开始讨论多变量的问题:

image-20250304190753857

其中:

\(n\)表示特征的个数(例如上图中,特征有4个, \(n=4\))

\(x^{(i)}\)表示第\(i\)个训练样本的输入特征向量,比如\(x^{(2)}\)就是第二个训练样本的特征向量,即\(x^{(2)}=\left[ \begin{matrix}1416\\3\\2\\40 \end{matrix}\right]\)(\(x\)是一个列向量)

通常喜欢写成\(x^{(2)}=\left[ \begin{matrix}1416 & 3 & 2 & 40 \end{matrix}\right]^T\)

\(x_j^{(i)}\)表示第\(i\)个训练样本中第\(j\)个特征的值,例如\(x_1^{(2)}=1416\),即第二个训练样本的第一个特征(房屋面积)。

上图中给出了数据矩阵的表示方法:\(X\)是一个m*(n+1)的矩阵(包括一列常数 1),它包含了所有训练样本的特征数据。

这个1就是增加的常数1

\(y\)是一个包含所有房屋价格的列向量,即\(y=\left[ \begin{matrix}460\\232\\315\\178 \end{matrix}\right]\)

每个训练样本的特征向量\(x^{(i)}\)是一个n*1的列向量(或者说\(n+1\)维向量),表示该样本的所有特征。

因此\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4\)


当有\(n\)个特征时,\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n\)

为了记法简单,记\(x_0=1\),或者说\(x_0^{(i)}=1\)

因此使得模型的表示更加简洁,可以写作:\(h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n\)

然后使用向量化表示法来简化模型的表达:首先,\(x=\left[ \begin{matrix}x_0\\x_1\\x_2\\...\\x_n \end{matrix}\right]=\left[ \begin{matrix}1\\x_1\\x_2\\...\\x_n \end{matrix}\right]\),同时\(\theta=\left[ \begin{matrix} \theta_0\\ \theta_1\\ \theta_2\\...\\ \theta_n \end{matrix}\right]\)

然后可以将线性回归模型的计算表示为向量的点积:\(h_\theta(x)=\theta^Tx\)

这是一个更简洁和高效的表达形式。也是多元线性回归(Multivariate linear regression)模型

4-2 梯度下降用于多个变量(Gradient descent for nultiple variables)

多元线性回归的假设函数:\(h_\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n=\theta^Tx\)

回顾代价函数:\(J(\theta_0, \theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2\)

梯度下降通过最小化代价函数来训练线性回归模型。更新参数\(\theta_j\)的公式如下:\(\theta_j:=\theta_j-\alpha \frac{\partial}{\partial \theta_j}J(\theta_0, \theta_1,...,\theta_n)\),其中参数\(\theta_0, \theta_1,...,\theta_n\)需要同时更新。

下面说明将梯度下降应用于多变量的线性回归模型,为了对比,也将单变量的梯度下降公式给出:

对于 单变量(\(n = 1\))的梯度下降:

  • \[\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)\]
  • \[\theta_1 := \theta_1 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x^{(i)}\]

对于 多变量(\(n \geq 1\))的梯度下降:

  • \[\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} \quad \text{(同时更新 } \theta_j \text{ for } j = 0, \dots, n)\]

如果依次令\(j=0,1,2\),可以得到:

  • \[\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_0^{(i)}\]
  • \[\theta_1 := \theta_1 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_1^{(i)}\]
  • \[\theta_2 := \theta_2 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_2^{(i)}\]

根据一开始添加的记法\(x_0=1\),或者说\(x_0^{(i)}=1\)

那么很显然,单变量的\(\theta_0 := \theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right)\)就是\(\theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)}\)这个式子取\(j=0\)的情况,所以说,单变量就是多变量的一个特殊情况,多变量是单变量的普遍情况(一般情况)


4-3 梯度下降实用技巧1:特征缩放(Feature Scaling)

中文 英文
特征缩放 Feature Scaling
标准化 Standardization(Z-Score Normalization)
归一化 Normalization

可以认为Feature Scaling包括Standardization和Normalization,其中Standardization可以叫做Z-Score Normalization。

特征缩放 的目的是确保所有输入特征(例如房屋的面积和卧室数量)都处于相似的量纲或尺度上。不同量纲的特征(如面积以平方英尺为单位,卧室数量以1-5为范围)会影响梯度下降的优化效果。

image-20250304202217770

左侧图:显示了未进行特征缩放时,代价函数\(J(\theta)\)的等高线图。在这种情况下,由于两个特征 \(x_1\)和 \(x_2\) 的量纲不同,梯度下降的优化路径可能呈现出扭曲或非常不均衡的形状,导致收敛速度较慢

右侧图:显示了进行特征缩放后的等高线图。在进行特征缩放后,两个特征的值都被归一化到相似的范围(如 \(0 \leq x_1 \leq 1\)和 \(0 \leq x_2 \leq 1\))。这种缩放使得代价函数的等高线变得更加圆形,梯度下降的优化过程更加均匀且收敛速度更快。

特征缩放可以消除不同特征之间的量纲差异,改善机器学习模型的训练效果,特别是对于使用梯度下降的优化算法。

特征缩放的几种方法

(1)最大最小值归一化(min-max normalization):将数值范围缩放到 [0, 1] 区间里

\[x'=\frac{x-min(x)}{max(x)-min(x)}\]

(2)均值归一化(mean normalization):将数值范围缩放到 [-1, 1] 区间里,且数据的均值变为0(说白了就是使数据尽量关于原点对称)

\[x'=\frac{x-average(x)}{max(x)-min(x)}\]

(3)标准化 / z值归一化(standardization /z-score normalization):将数值缩放到0附近,且数据的分布变为均值为0,标准差为1的标准正态分布(先减去均值来对特征进行 中心化 mean centering 处理,再除以标准差进行缩放)

\[x'=\frac{x-\bar x}{\sigma}\]

(4)最大绝对值归一化(max abs normalization ):也就是将数值变为单位长度(scaling to unit length),将数值范围缩放到 [-1, 1] 区间里

\[x'=\frac{x}{\vert \vert max(x) \vert \vert}\]

(5)稳键标准化(robust standardization):先减去中位数,再除以四分位间距(interquartile range),因为不涉及极值,因此在数据里有异常值的情况下表现比较稳健

\[x'=\frac{x-median(x)}{IQR(x)}\]

注:特征缩放不需要严格遵循边界范围,下面的例子可以看看:

image-20250304203356764

4-4 梯度下降实用技巧1:学习率(learning rate)

梯度下降算法收敛所需要的迭代次数根据模型的不同而不同,我们不能提前预知,我们可以绘制迭代次数和代价函数的图表来观测算法在何时趋于收敛。

image-20250304203602781

横轴 代表 迭代次数(Number of iterations),即梯度下降的循环次数。

纵轴 代表 代价函数 \(J(\theta)\) 的值,即每次迭代后模型预测与真实值之间的误差度量。

随着迭代次数的增加,代价函数 \(J(\theta)\)应该逐渐 减小,表示梯度下降正在不断优化模型参数,减少误差。

在达到最低点(或者说接近达到)后,代价函数变化变得很小,接近于零,表示梯度下降 收敛


也有一些自动测试是否收敛的方法,例如将代价函数的变化值与某个阀值(例如 0.001)进行比较,但通常看上面左图表更好。 确保梯度下降正常工作不仅依赖于正确的更新规则,还需要通过代价函数的变化来监控收敛过程。


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

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

4-5 特征和多项式回归(polynomial regression)

如房价预测问题,

image-20250304203943609

\(x_1=frontage(临街宽度)\),\(x_2=depth(纵向深度)\),\(x=frontage*depth=area(面积)\)

则\(h_\theta(x)=\theta_0+\theta_1x\)

线性回归并不适用于所有数据,有时我们需要曲线来适应我们的数据,比如一个二次方模型:\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2\)

或者三次方模型:\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2+\theta_3x_3^3\)

通常我们需要先观察数据然后再决定准备尝试怎样的模型。 另外,我们可以令: \(x_2=x_2^2,x_3=x_3^3\)从而将模型转化为线性回归模型。

根据函数图形特性,我们还可以使:\(h_\theta(x)=\theta_0+\theta_1(size)+\theta_2(size)^2\)

或者: \(h_\theta(x)=\theta_0+\theta_1(size)+\theta_2 \sqrt{(size)}\)

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

4-6 正规方程(Normal Equation)

到目前为止,我们都在使用梯度下降算法,但是对于某些线性回归问题,正规方程方法是更好的解决方案。如:

image-20250304204453167

利用多元微分学知识,我们知道对于代价函数:\(J(\theta)=J(\theta_0,\theta_1,\theta_2,...,\theta_n)\)

如果它是连续的,则要求出它的最小值,只需要令各偏导为零:\(\frac{\partial J}{\partial \theta_j}=0,j=0,1, 2,...,n\),或写作向量形式:\(\frac{\partial J}{\partial \theta}=\vec{0}\)

就能解出令\(J(\theta)\)最小化的 \(\theta\) 值。

由此,我们将代价函数转化为有确定解的代数方程组(其方程式数目正好等于未知数的个数),这个方程组就是正规方程(Normal Equation)。


image-20250304204946382

下面来推导为什么\(\theta=(X^TX)^{−1}X^Ty\)

对多元线性回归的代价函数进行求解:\(J(\theta_0, \theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})^2=\frac{1}{2m}\sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})^2\)

于是其偏导函数为:\(\frac{\partial J}{\partial \theta}=\frac{1}{m}\sum_{i=1}^m(\theta^Tx^{(i)}-y^{(i)})·x^{(i)}\)

要使之为零向量,只能是:\(\theta^Tx^{(i)}=y^{(i)},i=1,2,...,m\) (注:一共是m个样本,n维度的特征)

上面的等式写作矩阵为:\(\theta^TX^T=y^T\),由转置的性质,即\(X\theta=y\)

其中:

\[X_{m \times (n+1)}=\left[ \begin{matrix}x_0^{(1)} & x_1^{(1)} & \dots& x_n^{(1)}\\x_0^{(2)} & x_1^{(2)} & \dots& x_n^{(2)}\\ . & . & . & .\\ . & . & . & . \\x_0^{(m)} & x_1^{(m)} & \dots& x_n^{(m)} \end{matrix}\right]=\left[ \begin{matrix} x^{(1)T}\\ x^{(2)T} \\ . \\ . \\ x^{(m)T} \end{matrix}\right],y=\left[ \begin{matrix} y^{(1)} \\ y^{(2)}\\ . \\ . \\ y^{(m)} \end{matrix} \right]\]

在\(X\theta=y\)两边同时乘以\(X^T\),假设\(X^TX\)可逆,解得\(\theta=(X^TX)^{-1}X^Ty\)

注:\(X^TX\)是一个\((n+1) \times (n+1)\)的矩阵

因此直接取逆计算\(\theta\)的复杂度是\(O(n^3)\)。如果\(n\)不是很大,这是有效的,但是如果\(n\)达到了\(10^4,10^5\)级别,或更高,就需要使用梯度下降了。

下面从其他方面对两种算法进行比较:

区别 梯度下降 正规方程
学习率 \(\alpha\) 需要选择 不需要
迭代 需要多次迭代 一次运算得出
n 的取值 当 n 大时也能较好适用 当 n 小于\(10^4\)还是可以接受的
特征缩放 特征取值范围相差大时需要 不需要缩放
适用情形 适用于各种类型的模型 只适用于线性模型

总结一下,只要特征变量的数目并不大,正规方程是一个很好的计算参数\(\theta\)的方法。

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

4-7 正规方程及不可逆性(Noninvertibility)

对于\(\theta=(X^TX)^{-1}X^Ty\),若\(X^TX\)不可逆?

image-20250304214543386

  • 首先\(X^TX\)不可逆很少发生,并且,在Octave里(当然我不用这个),可逆矩阵求解逆使用inv(),不可逆矩阵求解伪逆使用pinv()

  • 其次,使用大量的特征值的情况下,可能会导致矩阵\(X^TX\)的结果是不可逆的。

    • 具体地说,在 m 小于或等于 n 的时候,例如,有 m 等于 10 个的训练样本也有 n 等于100 的特征数量。要找到适合的 ( n +1 ) 维参数矢量\(\theta\),这将会变成一个 101 维的矢量,尝试从 10 个训练样本中找到满足 101 个参数的值,这工作可能会让你花上一阵子时间,但这并不总是一个好主意。因为,正如我们所看到你只有 10 个样本,以适应这 100 或 101 个参数,数据还是有些少。 稍后我们将看到,如何使用小数据样本以得到这 100 或 101 个参数,通常,我们会使用一种叫做正则化的线性代数方法,通过删除某些特征或者是使用某些技术,来解决当 m 比n 小的时候的问题。即使你有一个相对较小的训练集,也可使用很多的特征来找到很多合适的参数。

所以上面的图片中提供了解决办法:

  • 看特征值里是否有一些多余的特征,像\(x_1\)和\(x_2\)是线性相关的,互为线性函数。删除重复的特征将解决不可逆性的问题。如果特征数量实在太多,可以删除些用较少的特征来反映尽可能多内容,或者考虑使用正则化方法。
  • 如果在 Octave 里,可以用伪逆函数 pinv ( ) 来实现。即使\(X^TX\)不可逆,但算法执行的流程是正确的。

总之,出现不可逆矩阵的情况极少发生,所以在大多数实现线性回归中,不应该过多的关注\(X^TX\)不可逆。