正规方程引入
到目前为止,我们一直使用的线性回归的算法是梯度下降法,例如下图所示,梯度下降的目标就是找到一组参数值从而使得代价函数
J
(
θ
)
J(\theta)
J(θ)的值最小,即图中下凸函数的全局最小值
其中,梯度下降的算法如下:
左边是梯度下降算法,我们会反复做这一步
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
0
,
θ
1
)
\theta_j:=\theta_j-\alpha{\large\frac {\partial} {\partial\,\theta_j}}J(\theta_0,\theta_1)
θj:=θj−α∂θj∂J(θ0,θ1),直到梯度下降收敛到最小值。也就是说,利用梯度下降算法实现我们模型的优化目标是一个不断迭代更新参数的过程。
那么,我们就会想是不是对于所有的模型或者说所有的问题,我们都只能使用梯度下降算法来实现目标,得到模型参数的最优值呢?答案是否定的,对于这个问题,数学家们给出了另一种方式来求解模型参数最优值——正规方程。
与梯度下降算法相反,正规方程提供了一种求参数 θ \theta θ 的解析解法,这使得我们不再需要运行迭代算法,而是可以一步就求出参数 θ \theta θ 的最优值。
微积分(数学方法)
首先,我们给出一个例子,假如我们现在有一个线性回归模型,其对应的代价函数如下图所示
即
J
(
θ
)
=
a
θ
2
+
b
θ
+
c
J(\theta)=a\theta^2+b\theta+c
J(θ)=aθ2+bθ+c,其中,参数
θ
\theta
θ是一个实数,很显然,代价函数是关于参数
θ
\theta
θ的一元二次方程,那么,我们现在如何最小化这个代价函数呢?
学习过微积分的同学应该知道,对于一个一元二次方程,我们该如何求解它的最小值,很显然,我们只需要将函数对自变量求导,然后令导数值等于 0 0 0,接着解出自变量的值,即在函数最小值下自变量的值,即令 ∂ J ( θ ) ∂ θ = 0 {\Large\frac {\partial J(\theta)} {\partial\,\theta}}=0 ∂θ∂J(θ)=0,解出 θ \theta θ 即可。
理解为什么要这样做并不难,例如,我们如果对二维函数图像上的某一点求导,其导数值就是这一点切线的斜率,那么,我们将函数 J ( θ ) J(\theta) J(θ)对自变量 θ \theta θ 求导之后,其导数值 ∂ J ( θ ) ∂ θ {\Large\frac {\partial J(\theta)} {\partial\,\theta}} ∂θ∂J(θ)就相当于是任一点切线斜率的函数,通过观察上述图像,我们可以知道,在函数 J ( θ ) J(\theta) J(θ)取到最小值时,其对应的切线斜率是 0 0 0的,所以我们令 ∂ J ( θ ) ∂ θ = 0 {\Large\frac {\partial J(\theta)} {\partial\,\theta}}=0 ∂θ∂J(θ)=0,自然就可以求解出切线斜率为 0 0 0对应的那一点。
到这里,我们应该了解到通过微积分,我们是可以实现一步求参的,但我们还需要将其推广到更一般的情况。
之前我们介绍了多元线性回归,其中,我们的参数
θ
\theta
θ 是以向量的形式存在的,即我们不只有一个参数,那么,我们如何将微积分的方法推广到多个参数的情况呢?
如上图所示,我们只需要分别对每一个参数求偏导,再令它们的偏导值等于
0
0
0 即可,即
∂
J
(
θ
)
∂
θ
1
=
∂
J
(
θ
)
∂
θ
2
=
…
…
=
∂
J
(
θ
)
∂
θ
m
=
0
{\Large\frac {\partial J(\theta)} {\partial\,\theta_1}}={\Large\frac {\partial J(\theta)} {\partial\,\theta_2}}=……={\Large\frac {\partial J(\theta)} {\partial\,\theta_m}}=0
∂θ1∂J(θ)=∂θ2∂J(θ)=……=∂θm∂J(θ)=0,即可一步解出参数
θ
j
,
j
∈
[
1
,
m
]
\theta_j,\;j\in[1,m]
θj,j∈[1,m] 的最优值。
我们介绍完了如何利用微积分的方法求解参数最优值,但对于工程问题来说,这显然是数学方法,而不是工程方法,因为我们还是需要计算偏导数项,然后令其等于 0 0 0 再解出参数的值,在代码实现时,我们还是需要写出特定的数学方程,然后迭代解出每一个参数的最优值
正规方程(工程方法)
假设我们现在有如下图所示的一个数据集,数据集中的样本数量
m
=
4
m=4
m=4
很显然,这是一个多元线性回归的问题,因为此时我们有四个特征量,根据我们之前介绍的多元线性回归,我们将参数和特征都表示成了向量的形式,同时,为了更好地表达我们的假设函数,我们在数据集中还添加了一列
x
0
x_0
x0,并且我们令
x
0
=
1
x_0=1
x0=1,即下图所示
现在,我们构建一个矩阵
X
X
X 来表示我们训练样本中的所有特征变量,对于上述数据集,则有
X
=
[
1
2104
5
1
45
1
1416
3
2
40
1
1534
3
2
30
1
852
2
1
36
]
X=\begin{bmatrix}1 & 2104 & 5 & 1 & 45 \\1 & 1416 & 3 & 2 & 40\\1 & 1534 & 3 & 2 & 30\\1 & 852 & 2 & 1 & 36\end{bmatrix}
X=
11112104141615348525332122145403036
,显然,
X
X
X的维度是
4
×
5
4×5
4×5,对于样本的预测值,我们构建一个向量
y
y
y 来表示,即
y
=
[
460
232
315
178
]
y=\begin{bmatrix}460 \\232 \\315 \\178 \end{bmatrix}
y=
460232315178
,显然,
y
y
y 是一个
4
4
4维向量,更一般来说,
X
X
X 会是一个
m
×
(
n
+
1
)
m×(n+1)
m×(n+1) 的矩阵,
y
y
y 会是一个
m
m
m 维向量。
如果我们令向量 θ = ( X T X ) − 1 X T y \theta=(X^TX)^{-1}X^Ty θ=(XTX)−1XTy,那么,此时求出的参数向量 θ \theta θ,其中的元素会对应着每一个参数的最优值,即此时的参数会最小化代价函数,这一点在数学上已经被严格证明,当然,大家也可以自己在纸上证明一下。
推导过程如下:
————————————————
版权声明:上述推导过程为优快云博主「阳阳yyx」的原创
原文链接:https://blog.youkuaiyun.com/qq_29317617/article/details/86312154
另外,需要注意的是,之前在梯度下降算法中,我们提到了进行特征缩放对于梯度下降收敛效率的重要性,但是如果我们使用正规方程法,那么就不需要进行特征缩放
正规方程法与梯度下降算法相比
梯度下降和正规方程相比较(在m个训练样本,n个特征的情况下)
梯度下降算法 | 正规方程法 |
---|---|
需要选取学习率 | 不需要选取学习率 |
多次迭代 | 一步求参 |
算法时间复杂度是 o ( k n 2 ) o(kn^2) o(kn2) | 算法时间复杂度是 o ( n 3 ) o(n^3) o(n3) |
特征量多的情况也运行地相当好 | 特征量少的情况下效率相当高 |
那么,对于实际情况而言,我们如何选择合适的方法呢?
我们可以以 n = 10000 n=10000 n=10000为分界线,当特征数量大于这个值时,我们会更加偏向于使用梯度下降法,当特征数量小于这个值时,我们更加偏向于使用正规方程法。
其实,随着学习算法越来越复杂,我们会发现正规方程法并不适用于这些复杂的学习算法,我们将不得不继续使用梯度下降法,所以说梯度下降法是一个非常有用的算法,既可以用在有大量特征的线性回归问题中,也可以用在更加复杂的学习算法之中,但是对于线性回归这个特定的模型,正规方程法则是一个比梯度下降法更快的替代算法,所以也值得我们去学习。