吴恩达机器学习笔记(二)

一、多元线性回归

1.1 多元线性回归的假设函数

在前面一部分的学习中,我们对训练集只考虑了单一的特征。对于房价预测来说,如下所示,我们只是使用单一的因素——房子面积对房价进行预测,其中的假设函数也只有一个因变量:
h θ ( x ) = θ 0 + θ 1 x h_\theta(x)=\theta_0+\theta_1 x hθ(x)=θ0+θ1x

在这里插入图片描述

但是在实际生活中,我们对一个指标的预测往往需要考虑多个元素。如下图所示,对房价的预测考虑了四个方面的因素,包括房子面积、房间个数、房子所在层数与房子存在的年限,我们可以使用 x 1 、 x 2 、 x 3 、 x 4 x_1、x_2、x_3、x_4 x1x2x3x4 分别表示每个因素,即特征 y y y 表示我们预测得到的变量——房子价格。
在这里插入图片描述
所以我们可以用向量表示包含多个特征的训练集,对于上面的房价预测,我们可以将第 1 1 1 个训练样本表示为 x ( 1 ) = [ 2014 5 1 45 ] x^{(1)}=\left[ \begin{matrix} 2014 \\ 5 \\ 1 \\ 45 \end{matrix} \right] x(1)=20145145,称为第 1 1 1 个特征向量,我们可以使用 x j ( i ) \boldsymbol{x^{(i)}_j} xj(i) 表示第 i i i 个特征向量中的第 j j j 个元素。

当我们拥有了多个特征量后,单一变量的假设函数已经不能满足我们的需要了,所以我们需要引入多个变量的假设函数,对于有 n n n 个特征量的数据集,我们可以将假设函数表示如下:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x) = \theta_0 + \theta_1x_1 + \theta_2x_2+\cdots + \theta_nx_n hθ(x)=θ0+θ1x1+θ2x2++θnxn

为了更加简便的表示上式,我们可以用两个向量内积的形式表示,我们首先设 x 0 = 1 x_0 = 1 x0=1 ,那么 x x x 就可以表示为 x = [ x 0 x 1 x 2 ⋮ x n ] x=\left[ \begin{matrix} x_0 \\ x_1 \\ x_2 \\ \vdots \\ x_n \end{matrix} \right] x=x0x1x2xn ,而其中的参数 θ \theta θ 可以表示为 θ = [ θ 0 θ 1 θ 2 ⋮ θ n ] \theta=\left[ \begin{matrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \vdots \\ \theta_n \end{matrix} \right] θ=θ0θ1θ2θn,因此,假设函数可以表示为:

h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n = θ T x \begin{aligned} h_\theta(x) &= \theta_0 + \theta_1x_1 + \theta_2x_2+\cdots + \theta_nx_n \\ & = \theta_0 x_0 + \theta_1x_1 + \theta_2x_2+\cdots + \theta_nx_n \\ & = \theta^T x \end{aligned} hθ(x)=θ0+θ1x1+θ2x2++θnxn=θ0x0+θ1x1+θ2x2++θnxn=θTx

其中 θ T \theta^T θT 表示 θ \theta θ 的转置。上式其实就表示向量 θ \theta θ x x x 的内积。假设函数满足以上形式的模型就成为多元线性回归模型,多元就是表示有多个因变量。

1.2 多元线性回归的梯度下降

通过上面的讨论,我们得到如下的假设函数:
h θ ( x ) = θ T x = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x) = \theta^Tx=\theta_0 x_0 + \theta_1x_1 + \theta_2x_2+\cdots + \theta_nx_n hθ(x)=θTx=θ0x0+θ1x1+θ2x2++θnxn

其中我们用 θ \theta θ 表示参数向量,用 x x x 表示特征向量。对于有 n n n 个特征的训练集, θ \theta θ x x x 都是 n + 1 n+1 n+1 维的,那么对于之前的代价函数:
J ( θ 0 , θ 1 , ⋯   , θ n ) = 1 2 m ∑ i = 1 m [ h ( x ( i ) ) − y ( i ) ] 2 J(\theta_0,\theta_1,\cdots,\theta_n) = \frac{1}{2m} \sum^m_{i=1} \left[ h(x^{(i)})-y^{(i)} \right ] ^2 J(θ0,θ1,,θn)=2m1i=1m[h(x(i))y(i)]2

我们就可以简写为:
J ( θ ) = 1 2 m = 1 2 m ∑ i = 1 m [ h ( x ( i ) ) − y ( i ) ] 2 J(\theta)=\frac{1}{2m}= \frac{1}{2m} \sum^m_{i=1} \left[ h(x^{(i)})-y^{(i)} \right ] ^2 J(θ)=2m1=2m1i=1m[h(x(i))y(i)]2

其表示关于参数向量 θ \theta θ 的函数。

那么梯度下降就可以表示为关于参数向量 θ \theta θ 中每个元素的导数的式子:

do{
θ j = θ j − α ∂ ∂ θ j J ( θ ) \qquad\theta_j = \theta_j-\alpha\frac{\partial}{\partial \theta_j} J(\theta) θj=θjαθjJ(θ)
} while(!convergence)

从上面的式子我们也可以看出,其实对于多个特征的训练集,我们包含的 θ \theta θ 参数也会变多,那么类比于之前的梯度下降算法,我们也可以分别对每个参数 θ i \theta_i θi 更新,首先我们先写出我们的代价函数:
J ( θ ) = 1 2 m ∑ i = 1 m [ h ( x ( i ) ) − y ( i ) ] 2 = 1 2 m ∑ i = 1 m [ θ 0 + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) + ⋯ + θ n x n ( i ) − y ( i ) ] 2 \begin{aligned}J(\theta) & =\frac{1}{2m} \sum^m_{i=1} \left[ h(x^{(i)})-y^{(i)} \right ] ^2 \\ & =\frac{1}{2m} \sum^m_{i=1} \left[ \theta_0 + \theta_1x^{(i)}_1 + \theta_2x^{(i)}_2 + \cdots + \theta_nx^{(i)}_n - y^{(i)} \right ] ^2 \end{aligned} J(θ)=2m1i=1m[h(x(i))y(i)]2=2m1i=1m[θ0+θ1x1(i)+θ2x2(i)++θnxn(i)y(i)]2

其中,上标 i i i 表示训练集中的第 i i i 个样本,下标 n n n 表示该样本对应的特征向量中的第 n n n 个元素,因为我们要分别更新每个参数 θ i \theta_i θi,所以我们就要对每个 θ i \theta_i θi 求导,如果我们记 x 0 ( i ) = 1 x^{(i)}_0 = 1 x0(i)=1 ,则上式对 θ n \theta_n θn 的偏导我们可以表示为:
∂ ∂ θ n J ( θ ) = 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x n ( i ) \frac{\partial}{\partial\theta_n}J(\theta)=\frac{1}{m}\sum^m_{i=1}\left[h_{\theta}(x^{(i)})-y^{(i)}\right]x^{(i)}_n θnJ(θ)=m1i=1m[hθ(x(i))y(i)]xn(i)

因此我们就可以得到对多元线性回归的梯度更新方式:

do{
θ 0 = θ 0 − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x 0 ( i ) \qquad\theta_0 = \theta_0-\alpha\frac{1}{m}\sum^m_{i=1}\left[h_{\theta}(x^{(i)})-y^{(i)}\right]x_0^{(i)} θ0=θ0αm1i=1m[hθ(x(i))y(i)]x0(i)
θ 1 = θ 1 − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x 1 ( i ) \qquad\theta_1 = \theta_1-\alpha\frac{1}{m}\sum^m_{i=1}\left[h_{\theta}(x^{(i)})-y^{(i)}\right]x_1^{(i)} θ1=θ1αm1i=1m[hθ(x(i))y(i)]x1(i)
⋮ \qquad\vdots
θ n = θ n − α 1 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] x n ( i ) \qquad\theta_n = \theta_n-\alpha\frac{1}{m}\sum^m_{i=1}\left[h_{\theta}(x^{(i)})-y^{(i)}\right]x_n^{(i)} θn=θnαm1i=1m[hθ(x(i))y(i)]xn(i)
} while(!convergence)

1.3 特征缩放

在机器学习中对于有多个特征的数据集,如果能够保证特征的值都在相近的范围内,那么梯度下降算法将会更快的收敛。

先举个例子,如果在房价预测中包含两个特征: x 1 x_1 x1 是房子面积( 0 − 2000 m 2 0-2000m^2 02000m2)和 x 2 x_2 x2 是房间个数( 1 − 5 1-5 15),这里我们可以看出,两个特征的取值范围相差特别大,这时如果对整个模型进行梯度下降就会造成收敛过慢的问题。

如果我们令只有两个特征的模型的假设函数中 θ 0 = 0 \theta_0 = 0 θ0=0 ,那么我们就能够根据 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 做出如下蓝色的代价函数等高线,因为 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 之间的范围相差过大,就会造成等高线非常的瘦高,这样在梯度下降时候,因为 θ 1 \theta_1 θ1 的取值范围过小,所以其对应的参数 θ 1 \theta_1 θ1 在很小范围内变化时候就会导致整个代价函数波动较大,所以会造成如下图箭头所示的梯度不断地变化,最终需要很多次才能达到收敛。
在这里插入图片描述
在这种情况下,一般是通过特征缩放来让梯度的收敛更快。例如对于上面的房子面积和房间个数两个特征,我们可以分别对这两个特征进入如下的处理:
x 1 = x 1 2000 x 2 = x 2 5 \begin{aligned}x_1 &= \frac{x_1}{2000} \\ x_2 &= \frac{x_2}{5}\end{aligned} x1x2=2000x1=5x2

也就是将其中的每个值都除以最大值,这样每个值都被 归一化 [ 0 , 1 ] [0,1] [0,1] 之间了,这时得到的等高线如下图所示:
在这里插入图片描述
可以看到对这种更加均衡的等高线进行梯度优化时会很快的找到收敛点。

更一般的说,特征缩放 通常将特征的取值约束在 [ − 1 , 1 ] [-1,1] [1,1] 范围内,当然,特征的取值并不一定要完全在相同的范围内,只要两个特征的取值范围相差并不是很大就不会造成梯度收敛过慢的问题。

如果出现了上面所示的两个特征取值范围过大,一种方式是上面提到的 归一化,还有一种处理方式是 均值归一化,其过程处理过程如下:
x i = x i − μ i s i x_i = \frac{x_i-\mu_i}{s_i} xi=sixiμi

其中 μ i \mu_i μi 表示 x i x_i xi均值 s i s_i si 表示 x i x_i xi标准差或者 max ⁡ ( x i ) − min ⁡ ( x i ) \max(x_i)-\min(x_i) max(xi)min(xi)

综上所述,特征缩放就是实现将取值范围不同的特征归一化到相同的范围,从而减少梯度下降中迭代的次数,提高梯度下降的速度。

1.4 梯度下降中的技巧

在机器学习中我们需要保证梯度下降算法在工作中不出现意外,梯度下降的目的是通过优化其中的参数 θ \theta θ 将代价函数最小化,随着迭代次数的增加,我们希望得到的关于代价函数的曲线如下图所示:
在这里插入图片描述
上图横轴表示梯度下降中的迭代次数,纵轴表示在第 n n n 次迭代的过程中根据当前的 θ \theta θ 计算得到的代价函数的值。对于一个正确的梯度下降算法,在每次迭代后, J ( θ ) J(\theta) J(θ) 都应该有所下降,当 J ( θ ) J(\theta) J(θ) 不再大幅度下降时,表示梯度下降已经达到收敛。上图中在 300 轮之后代价函数已经不再有很大的波动,也就表示已经趋于收敛。

除了通过上图的曲线判断收敛,还有一种方式是通过 自动收敛测试,该方法需要选择一个 阈值 ϵ \boldsymbol{\epsilon} ϵ,如果 J ( θ ) J(\theta) J(θ) 在每次的迭代中减少的量小于这个阈值,就表示梯度下降达到了收敛。但是对于不同的学习任务,这个收敛阈值的选择是很困难的,因此最好的方式还是通过上图的曲线进行收敛判断。

梯度下降的公式中有一个参数就是学习率 α \alpha α ,如下所示:
θ j = θ j − α ∂ ∂ θ j J ( θ ) \theta_j = \theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta) θj=θjαθjJ(θ)

前面已经说过,选择不同的 α \alpha α 会对梯度下降造成不同的影响。

通过 J ( θ ) J(\theta) J(θ) 的曲线图,我们还可以对算法是否在正常工作做出判断,如下左图所示,如果我们得到的代价函数曲线是一直上升的,也就是代价函数的值随着迭代的次数逐渐增大,这其实就表示我们的学习率 α \alpha α 的选择过大,造成迭代过程中参数一次次越过 J ( θ ) J(\theta) J(θ) 的最底点,从而引起代价函数的值增大,如下右图所示。

在这里插入图片描述

如果我们得到的 J ( θ ) J(\theta) J(θ) 的曲线如下图所示,其实也是表示选择的学习率 α \alpha α 过大。
在这里插入图片描述
已经有数学证明,只要选择的学习率 α \alpha α 足够小,就能够让代价函数在每次迭代中不断减小,但是我们也不能选择太小的学习率,因为这会造成梯度下降的过程收敛过慢。

学习率只是在整个模型开始时候选择,我们可以选择一个比较小的学习率,在训练过程中不改变,但是这可能会造成时间的浪费,对于比较大的样本集,可以选择在刚开始时候选择比较大的学习率,随着迭代次数的减少逐渐减少学习率。

1.5 特征选择与多项式回归

1.5.1 特征选择

首先我们看一个例子,如果我们只有房子的长(frontage)和宽(depth)两个特征,按照之前的讨论,我们需要建立如下的假设函数:
h θ ( x ) = θ 0 + θ 1 × f r o n t a g e + θ 2 × d e p t h h_{\theta}(x)=\theta_0 + \theta_1\times frontage + \theta_2 \times depth hθ(x)=θ0+θ1×frontage+θ2×depth

但是房价可能只与房子的面积相关,因此我们可以创造一个面积特征,从而构造一个更加合理的模型,首先我们令面积:
x = f r o n t a g e × d e p t h x = frontage \times depth x=frontage×depth

之后我们就能直接使用面积这一个特征构造假设函数:
h θ ( x ) = θ 0 + θ 1 x h_{\theta}(x)=\theta_0 + \theta_1x hθ(x)=θ0+θ1x

从这个例子可以看出,我们通过从原有的特征里进行选择,定义新的特征可以得到一个更好的模型。

1.5.2 多项式回归

类似与特征选择,我们可以通过 多项式函数 ,使用线性回归的方式来拟合非常复杂的函数,甚至是非线性函数,这就是 多项式回归

对于如下住房价格的数据集,可能有多个不同的模型用于拟合,

在这里插入图片描述
使用一元的线性回归并不能很好的拟合这些数据,所以我们可以选择如下的二次函数或三次函数对数据进行拟合
h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 h θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 + θ 3 x 3 \begin{aligned}h_\theta(x) &=\theta_0 + \theta_1 x +\theta_2x^2 \\ h_\theta(x) & =\theta_0 + \theta_1 x +\theta_2x^2+\theta_3x^3\end{aligned} hθ(x)hθ(x)=θ0+θ1x+θ2x2=θ0+θ1x+θ2x2+θ3x3

但是如下图所示,一个二次函数的模型可能并不能很好的对数据做出预测

在这里插入图片描述

所以我们可能需要如下所示的三次函数来更好的拟合数据:

在这里插入图片描述
所以我们就可以构建如下的假设函数:
h θ ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) 2 + θ 3 ( s i z e ) 3 \begin{aligned}h_\theta(x) &=\theta_0 + \theta_1 x_1 +\theta_2x_2 +\theta_3x_3 \\ & =\theta_0 + \theta_1 (size) +\theta_2(size)^2+\theta_3(size)^3\end{aligned} hθ(x)=θ0+θ1x1+θ2x2+θ3x3=θ0+θ1(size)+θ2(size)2+θ3(size)3

但是需要注意的是,我们这样构建模型后,特征缩放的作用就更加明显了,因为如果 x 1 x_1 x1 的取值范围是 [ 1 , 1000 ] [1,1000] [1,1000],那么 x 2 x_2 x2 的取值范围就会达到 [ 1 , 1000000 ] [1,1000000] [1,1000000] ,而 x 3 x_3 x3 的取值范围会达到 [ 1 , 1 0 9 ] [1,10^{9}] [1,109],如果不进行特征缩放,那么梯度收敛的过程会非常慢。

除此之外,我们还可以根据数据创建平方根构成的多项式回归,即

h θ ( x ) = θ 0 + θ 1 ( s i z e ) + θ 2 ( s i z e ) h_\theta(x)=\theta_0+\theta_1(size)+\theta_2\sqrt{(size)} hθ(x)=θ0+θ1(size)+θ2(size)

这是因为平方根函数的图像大致如下,可以更好的拟合数据
在这里插入图片描述

二、正规方程

前面我们对代价函数求最小值都是使用梯度更新的方式,这里提出一种正规方程的算法,可以不再通过下面的梯度迭代的方式求使得代价函数最小的参数 θ \theta θ,通过正规方程的方法,可以直接获得最优值。
在这里插入图片描述

2.1 正规方程

在微积分中,对于有多个参数的表达式,我们可以直接分别对每个参数求偏导,令偏导数等于 0 ,这样就可以直接得到使得整体表达式最小的参数值。如下所示的表达式:
J ( θ 0 , θ 1 , ⋯   , θ n ) = 1 2 m ∑ i = 1 m [ h θ ( x ( i ) ) − y ( i ) ] 2 J(\theta_0,\theta_1,\cdots,\theta_n) = \frac{1}{2m} \sum^m_{i=1} \left[ h_\theta(x^{(i)})-y^{(i)} \right ] ^2 J(θ0,θ1,,θn)=2m1i=1m[hθ(x(i))y(i)]2

我们可以直接分别对每个 θ n \theta_n θn 求导,并令每个 ∂ ∂ θ n J ( θ ) = 0 , \frac{\partial}{\partial\theta_n}J(\theta)=0, θnJ(θ)=0,,求出此时的 θ n \theta_n θn 的值,就是我们最终要求的解。

正规方程也是基于求导的方式,不过并不需要一步一步的计算导数,而是通过矩阵直接求解最优的参数值。

考虑如下的训练集,其中包含 m = 4 m=4 m=4 个样本,每个数据有 n = 4 n=4 n=4 个特征,
在这里插入图片描述
首先我们先对以上数据加入一列 x 0 = 1 x_0=1 x0=1,如下所示:
在这里插入图片描述

这样我们就可以根据数据集的所有特征构建一个 特征矩阵,该特征矩阵包含所有训练样本的特征变量,是一个 m × ( n + 1 ) m\times (n+1) m×(n+1) 的矩阵,如下所示:
X = [ 1 2104 5 1 45 1 1416 3 2 40 1 1534 3 2 30 1 852 2 1 36 ] X=\left[\begin{matrix} 1 & 2104 & 5 & 1 & 45 \\ 1 & 1416 & 3 & 2 & 40 \\ 1 & 1534 & 3 & 2 & 30 \\ 1 & 852 & 2 & 1 & 36 \end{matrix} \right] X=11112104141615348525332122145403036

同时我们对样本的标签也进行矩阵化,得到一个 m m m 维的向量,如下:
y = [ 460 232 315 178 ] y=\left[\begin{matrix} 460 \\ 232 \\ 315 \\ 178 \end{matrix} \right] y=460232315178

之后我们令参数向量 θ = ( X T X ) − 1 X T y \boldsymbol{\theta = (X^TX)^{-1}X^Ty} θ=(XTX)1XTy,这样我们就能够计算出使得代价函数最小的 θ \theta θ 参数向量。

根据上面的描述,我们可以获得更加一般的描述,对于有 m m m 个样本的数据集 { ( x ( 1 ) , y ( 1 ) ) , ⋯   , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),\cdots,(x^{(m)},y^{(m)})\} {(x(1),y(1)),,(x(m),y(m))},其中每个 x ( i ) = [ x 0 ( i ) x 1 ( i ) x 2 ( i ) ⋮ x n ( i ) ] x^{(i)}=\left[\begin{matrix} x^{(i)}_0 \\ x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n \end{matrix} \right] x(i)=x0(i)x1(i)x2(i)xn(i) 是一个 n + 1 n+1 n+1 维的特征向量,其中 x 0 ( i ) = 1 x^{(i)}_0 = 1 x0(i)=1,这样我们就可以构建一个特征矩阵 X,表示为:
X = [ ( x ( 1 ) ) T ( x ( 2 ) ) T ( x ( 3 ) ) T ⋮ ( x ( m ) ) T ] X=\left[\begin{matrix} (x^{(1)})^T \\ (x^{(2)})^T \\ (x^{(3)})^T \\ \vdots \\ (x^{(m)})^T \end{matrix} \right] X=(x(1))T(x(2))T(x(3))T(x(m))T

标签的特征向量 y y y 可以表示为:
y = [ y ( 1 ) y ( 2 ) y ( 3 ) ⋮ y ( m ) ] y=\left[\begin{matrix} y^{(1)} \\ y^{(2)} \\ y^{(3)} \\ \vdots y^{(m)} \end{matrix} \right] y=y(1)y(2)y(3)y(m)

为什么我们要构造这样的等式呢?我们首先看对于一个样本的假设函数:
h θ ( x ) = θ 0 x 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n h_\theta(x)=\theta_0 x_0 + \theta_1x_1 + \theta_2x_2+\cdots + \theta_nx_n hθ(x)=θ0x0+θ1x1+θ2x2++θnxn

可以发现其表示的就是参数 θ \theta θ 和特征向量 x x x 的乘积,那么我们把上面的特征矩阵 X X X θ \theta θ 写成相乘的形式:
X θ = y ⇒ [ x 0 ( 1 ) x 1 ( 1 ) x 2 ( 1 ) ⋯ x n ( 1 ) x 0 ( 2 ) x 1 ( 2 ) x 2 ( 2 ) ⋯ x n ( 2 ) x 0 ( 3 ) x 1 ( 3 ) x 2 ( 3 ) ⋯ x n ( 3 ) ⋮ ⋮ ⋮ ⋱ ⋮ x 0 ( m ) x 1 ( m ) x 2 ( m ) ⋯ x n ( m ) ] [ θ 0 θ 1 θ 2 θ 3 ⋮ θ n ] = [ y ( 1 ) y ( 2 ) y ( 3 ) ⋮ y ( m ) ] X\theta =y \quad \Rightarrow \quad \left[ \begin{matrix} x^{(1)}_0 & x^{(1)}_1 & x^{(1)}_2 & \cdots & x^{(1)}_n &\\ x^{(2)}_0 & x^{(2)}_1 & x^{(2)}_2 & \cdots & x^{(2)}_n \\ x^{(3)}_0 & x^{(3)}_1 & x^{(3)}_2 & \cdots & x^{(3)}_n \\ \vdots & \vdots & \vdots & \ddots & \vdots & \\ x^{(m)}_0 & x^{(m)}_1 & x^{(m)}_2 & \cdots & x^{(m)}_n \end{matrix}\right] \left[\begin{matrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \theta_3 \\ \vdots \\ \theta_n \end{matrix}\right] =\left[\begin{matrix} y^{(1)} \\ y^{(2)} \\ y^{(3)} \\ \vdots \\ y^{(m)} \end{matrix} \right] Xθ=yx0(1)x0(2)x0(3)x0(m)x1(1)x1(2)x1(3)x1(m)x2(1)x2(2)x2(3)x2(m)xn(1)xn(2)xn(3)xn(m)θ0θ1θ2θ3θn=y(1)y(2)y(3)y(m)

如果我们将矩阵相乘,比如 X X X 的第一行相乘得到的结果为:
θ 0 x 0 ( 1 ) + θ 1 x 1 ( 1 ) + θ 2 x 2 ( 1 ) + ⋯ + θ n x n ( 1 ) = y ( 1 ) \theta_0 x^{(1)}_0 + \theta_1x^{(1)}_1 + \theta_2x^{(1)}_2+\cdots + \theta_nx^{(1)}_n = y^{(1)} θ0x0(1)+θ1x1(1)+θ2x2(1)++θnxn(1)=y(1)

可以发现,我们只是将每个假设函数写成了矩阵相乘的形式。

为什么满足代价函数最小的 θ = ( X T X ) − 1 X T y \boldsymbol{\theta = (X^TX)^{-1}X^Ty} θ=(XTX)1XTy 呢?这是因为当我们将代价函数也写成矩阵形式后,求代价函数相对于参数向量 θ \theta θ 的导数,并令该导数为 0 0 0 就可以求出 θ = ( X T X ) − 1 X T y \boldsymbol{\theta = (X^TX)^{-1}X^Ty} θ=(XTX)1XTy,这些详细的步骤会在后面讲解。

这里我们需要注意的是,在梯度下降中我们为了让梯度下降的更快,引入了特征缩放,但是如果使用正规方程的方法求解使代价函数最小的参数向量 θ \theta θ,我们就不需要通过特征缩放将所有特征变换到相近的范围了,因为特征缩放主要的目的是让梯度下降更快的收敛,但是我们使用正规方程并不需要进行反复的求解梯度,所以特征取值的范围对其并没有影响。

梯度下降需要选择学习率 α \alpha α 和进行多次迭代,但是正规方程的方法并不需要这些,只需要一步的计算就可以得到最优的参数值,但是正规变换在参数量过多时候,会造成矩阵的运算时间过长,矩阵运算的时间复杂度一般为 O ( n 3 ) O(n^3) O(n3),所以在参数量过多时候选择梯度下降会比正规方程的方法更好。

正规方程对于线性回归这个特定的模型很有用,但是对于更加复杂的学习算法,正规方程并不适用,所以梯度下降算法仍然是一个更普遍的方法。

2.2 正规方程在矩阵不可逆情况下的解决方法

在我们使用正规方程 θ = ( X T X ) − 1 X T y \boldsymbol{\theta = (X^TX)^{-1}X^Ty} θ=(XTX)1XTy 时候,我们需要求解 X T X X^TX XTX 的逆矩阵,但是有可能的情况是该矩阵是不可逆的,如果该该矩阵是不可逆的,主要有两个可能的原因:

  1. 参与学习的特征中出现了多余特征
    加入特征中存在两个特征,其中一个特征 x 2 = c × x 1 x_2 = c \times x_1 x2=c×x1 ,那么我们构成的特征矩阵 X X X 就会包含两列成比例,这就会造成行列式为 0 ,从而造成矩阵不可逆。这种情况可以选择删除一部分多余的特征。
  2. 数据集中样本的数量 m 小于特征的个数 n
    这会造成参数向量的个数(n+1)大于样本的个数,要想从 m m m 个较小的样本中找到 n + 1 n+1 n+1 个大的参数,就会有可能造成上卖弄的矩阵不可逆。在这种情况下可以选择删除一部分参数,或者使用后面介绍的正则化方式处理数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值