您的位置:首页 > 其它

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

2016-04-18 21:59 337 查看
《机器学习笔记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)=12m∑i=1m(hθ(x(i))−y(i))2我们只要对每个 θ 求偏导数,并使其为 0 即可求出每个 θ 的值:Let∂∂θjJ(θ)=0(j=0,1,2,...,n)这种方法是不是很简单。

我们来看个已经用烂了的例子:房价预测

假设我们有如下的训练数据(样本数量m=4,特征数量n=4)

Size(feet2)Number of bedroomsNumber of floorsAge of house(years)Price($1000)
x0x1x2x3x4y
121045145460
114163240232
115343230315
18522136178
我们记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)1≤i≤m=⎡⎣⎢⎢⎢⎢⎢⎢x(i)0x(i)1x(i)2...x(i)n⎤⎦⎥⎥⎥⎥⎥⎥∈R(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 的逆矩阵记为 A−1,同时其满足下面的特性(具体证明参考线性代数的相关书籍):A×A−1=EA−1×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 descentNormal 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.存在冗余特征。

比如有两个特征

x1x2
meaningsize in feet2size in m2
因为 1m=3.28feet,所以 x1=(3.28)2⋅x2。我们知道线性代数中出现这种线性相关的情况,其行列式值为0,所以不可逆,我们只需确保不会出现冗余特征即可。

2.特征数量 n 过多,而训练样本数 m 过少。

解决方法为删除一部分特征,或者增加样本数量。

上面就是Normal equation及其与梯度下降之区别的大概内容,希望能帮助到大家。

如有错误,期望您能纠正,留言或者加入QQ群

——–转载请注明出处——–
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: