机器学习笔记03:Normal equation与梯度下降的比较

版权声明:本文为博主原创文章,未经博主允许不得转载,否则将被起诉。 https://blog.csdn.net/Artprog/article/details/51172025

《机器学习笔记02》中已经讲了多变量的梯度下降法,以及其他的一些小技巧和注意事项。下面来讲一种更加数学化的方法,我们称之为Normal equation,网上也没找到什么标准的翻译,就暂且称其为矩阵方程法吧。


一、简单回顾梯度下降

如下图所示,我们在进行梯度下降的时候,一般都会执行多次迭代,才能得出最佳的一组 θ 值。

这里写图片描述

我们能不能只用一次数学意义上的计算就能把所有的 θ 值都求出来呢,答案是可以的,我们用到的就是 normal equation(矩阵方程法)


二、Normal equation

先来看看单元变量的Normal equation方法:

1.当 θR 时,误差函数为

J(θ)=aθ2+bθ+c
此时只需要很简单地对 θ 求导数,使其导数为 0 即可求出 θ
LetθJ(θ)=0

2.当 θRn+1 时,误差函数为
J(θ0,θ1,...,θn)=12mi=1m(hθ(x(i))y(i))2
我们只要对每个 θ 求偏导数,并使其为 0 即可求出每个 θ 的值:
LetθjJ(θ)=0(j=0,1,2,...,n)
这种方法是不是很简单。

我们来看个已经用烂了的例子:房价预测
假设我们有如下的训练数据(样本数量m=4,特征数量n=4

Size(feet2) Number of bedrooms Number of floors Age of house(years) Price($1000)
x0 x1 x2 x3 x4 y
1 2104 5 1 45 460
1 1416 3 2 40 232
1 1534 3 2 30 315
1 852 2 1 36 178


我们记

X=11112104141615348525332122145403036;y=460232315178
上面的 X 为一个 4×5 的矩阵, y 为一个 4×1 的向量(矩阵)。


接着来看看对上面这个例子的一般性公式(formulas)。假设我们有 m 组训练数据:(x(1),y(1)),(x(2),y(2)),...,x(m),y(m);其中每组数据均有 n 个特征。我们记:

x(i)1im=x(i)0x(i)1x(i)2...x(i)nR(n+1);X=(x(1))T(x(2))T(x(3))T...(x(m))T=x(1)0x(2)0x(3)0...x(m)0x(1)1x(2)1x(3)1...x(m)1x(1)2x(2)2x(3)2...x(m)2...............x(1)nx(2)nx(3)n...x(m)n;y=y(1)y(2)y(3)...y(m)
例如:
x(i)=[1x(i)1],X=1111x(1)1x(2)1...x(m)1;y=y(1)y(2)...y(m)
同时,我们记
θ=θ0θ1θ2...θn


好了,那么 θ 为多少呢?结论是:

θ=(XTX)1XTy
我们来证明一下,但首先要回顾一下线性代数:
1.单位矩阵 E 是一个对角线全为1,其他元素都为零的方阵 :
E=1000...00100...00010...00001...0..................0000...1

2.方阵 A 的逆矩阵记为 A1,同时其满足下面的特性(具体证明参考线性代数的相关书籍):
A×A1=E
A1×A=E

下面我们开始证明,首先根据上面的记法得到一个方程:
y=Xθ
首先在等式两边同时左乘一个 XT,得到
XTy=XTXθ
再在等式两边同时左乘一个 (XTX)1,得到
(XTX)1XTy=(XTX)1(XTX)θ
消去(XTX)1(XTX)
θ=(XTX)1XTy
好了,到这里我们就可以用Matlab或者Octove来直接解出 θ 的值了,或者也可用其他高级编程语言编写程序来计算。


三、梯度下降和Normal equation的比较

正如你看到的,Normal equation 在数学计算的意义上,能够一下子就把 θ 的值给算出来,但是让我们来考虑一下这样一个事实: 我们需要计算一个式子 θ=(XTX)1XTy 的值,首先假设矩阵 X 是一个规模为 m×n 的矩阵,则仅仅计算 (XTX)1 的时间复杂度就为 O(n3) (在计算转置的时候仅是取值,不在内存上做真正的转置,即计算 XTX 需要的时间为 O(n2);另外,在计算逆矩阵的时候,我们只考虑了其伴随矩 (XTX) 阵直接乘以常数 1|XTX| 所需要的时间,而计算伴随矩阵和常数 1|XTX| (包括计算行列式的值)所需要的时间都未考虑,所以其计算花费是可想而知的)

但是 Normal equation 也有一个好处就是不用对样本进行 Feature scaling(特征缩放:《见机器学习笔记02》,而特征缩放对于梯度下降(Gradient descent)来说是非常重要的。我们将梯度下降和Normal equation的区别总结如下:

假设我们有 m 组样本,每个样本有 n 个特征

Gradient descent Normal equation
Needs to choose α (需要选取合适的α) No need to choose α (不需要α)
Needs many iterations (需要很多次的迭代计算) No need to iterate (不需要迭代计算)
Works well even when n is very large (在n很大时,能工作得很好) Needs to calculate (XTX)1 (需要计算(XTX)1,其时间复杂度为O(n3))
Slow if n is very large (当n非常大时,速度非常慢)


我们如何来选择使用哪种方法么呢?这个就要跟着感觉走了。因为我们无法精确的得到选择Gradient descent还是Normal equation的阈值。一般如果 n 不超过1000的话,选用Normal equation还是挺好的,如果要是 n 超过10000的话,那么矩阵 X 的规模将是10000×10000,这时候Gradient descent将是一个更好的选择。


另外,这里注意一点:如果矩阵 (XTX) 不可逆怎么办呢?原因有二:
1.存在冗余特征。
比如有两个特征

x1 x2
meaning size in feet2 size in m2

因为 1m=3.28feet,所以 x1=(3.28)2x2。我们知道线性代数中出现这种线性相关的情况,其行列式值为0,所以不可逆,我们只需确保不会出现冗余特征即可。
2.特征数量 n 过多,而训练样本数 m 过少。
解决方法为删除一部分特征,或者增加样本数量。


上面就是Normal equation及其与梯度下降之区别的大概内容,希望能帮助到大家。
如有错误,期望您能纠正,留言或者加入QQ群

——–转载请注明出处——–

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页