您的位置:首页 > 其它

机器学习(十一)——机器学习中的矩阵方法(1)LU分解、QR分解

2016-11-28 10:25 225 查看
http://antkillerfarm.github.io/

因子分析的EM估计(续)

去掉和各参数无关的部分后,可得:

∑i=1mE[logp(x(i)|z(i);μ,Λ,Ψ)]=∑i=1mE[1(2π)n/2∣Ψ∣1/2exp(−12(x(i)−μ−Λz(i))TΨ−1(x(i)−μ−Λz(i)))]=∑i=1mE[−12log∣Ψ∣−n2log(2π)−12(x(i)−μ−Λz(i))TΨ−1(x(i)−μ−Λz(i))]

去掉和Λ无关的部分,并求导可得:

∇Λ∑i=1m−E[12(x(i)−μ−Λz(i))TΨ−1(x(i)−μ−Λz(i))](1)

因为公式1中E[⋅]部分的结果实际上是个实数,因此该公式可变形为:

∇Λ∑i=1m−E[tr(12(x(i)−μ−Λz(i))TΨ−1(x(i)−μ−Λz(i)))]

而:

12(x(i)−μ−Λz(i))TΨ−1(x(i)−μ−Λz(i))=12[((x(i)−μ)T−(Λz(i))T)Ψ−1((x(i)−μ)−Λz(i))]=12[(x(i)−μ)TΨ−1(x(i)−μ)−(x(i)−μ)TΨ−1Λz(i)−(Λz(i))TΨ−1(x(i)−μ)+(Λz(i))TΨ−1Λz(i)]

去掉和Λ无关的部分,可得:

12[(Λz(i))TΨ−1Λz(i)−(x(i)−μ)TΨ−1Λz(i)−(Λz(i))TΨ−1(x(i)−μ)]

所以:

∇Λ∑i=1m−E[tr(12[(Λz(i))TΨ−1Λz(i)−(x(i)−μ)TΨ−1Λz(i)−(Λz(i))TΨ−1(x(i)−μ)])]=∇Λ∑i=1m−E[12tr((Λz(i))TΨ−1Λz(i))−12tr((x(i)−μ)TΨ−1Λz(i))−12tr((Λz(i))TΨ−1(x(i)−μ))]=∑i=1m∇ΛE[−12tr(ΛTΨ−1Λz(i)(z(i))T)+tr(ΛTΨ−1(x(i)−μ)(z(i))T)](2)

因为:

∇AtrABATC=CAB+CTABT

所以:

∇Atr(ΛTΨ−1Λz(i)(z(i))T)=z(i)(z(i))TΛTΨ−1+(z(i)(z(i))T)TΛT(Ψ−1)T=z(i)(z(i))TΛTΨ−1+((z(i))T)T(z(i))TΛTΨ−1=2z(i)(z(i))TΛTΨ−1

代入公式2,可得:

∑i=1mE[−Ψ−1Λz(i)(z(i))T+Ψ−1(x(i)−μ)(z(i))T]

由上式等于0,可得:

∑i=1mΛEz(i)∼Qi[z(i)(z(i))T]=∑i=1m(x(i)−μ)Ez(i)∼Qi[(z(i))T]

因此:

Λ=(∑i=1m(x(i)−μ)Ez(i)∼Qi[(z(i))T])(∑i=1mEz(i)∼Qi[z(i)(z(i))T])−1(3)

因为:

Cov(Y)=E[YYT]−E[Y]E[Y]T

所以:

E[YYT]=E[Y]E[Y]T+Cov(Y)

因此根据之前的讨论可得:

Ez(i)∼Qi[(z(i))T]=μTz(i)|x(i)

Ez(i)∼Qi[z(i)(z(i))T]=μz(i)|x(i)μTz(i)|x(i)+Σz(i)|x(i)

将上式代入公式3,可得:

Λ=(∑i=1m(x(i)−μ)μTz(i)|x(i))(∑i=1m(μz(i)|x(i)μTz(i)|x(i)+Σz(i)|x(i)))−1

这里需要注意的是,和之前的混合高斯模型相比,我们不仅要计算Σz(i)|x(i),还要计算E[z]和E[zzT]。

此外,我们还可得出:(推导过程略)

μ=1m∑i=1mx(i)

Φ=1m∑i=1m(x(i)(x(i))T−x(i)μTz(i)|x(i)ΛT−Λμz(i)|x(i)(x(i))T+Λ(μz(i)|x(i)μTz(i)|x(i)+Σz(i)|x(i))ΛT)

机器学习中的矩阵方法

在继续Andrew Ng的讲义之前,我们需要加强一些矩阵的相关知识。虽然Andrew Ng的讲义中已经包含了一个线性代数方面的简介文章,然而真的就只是简介而已,好多内容都没有。

这里推荐一本书《Matrix Methods in Data Mining and Pattern Recognition》。

作者:Lars Eld´en,执教于Linköping University数学系。

http://www.cnblogs.com/daniel-D/p/3204508.html

这是daniel-D写的中文笔记。

这一部分的内容属于数值计算领域,涉及的概念虽然不复杂,但提出一个高效算法,仍然不是件容易的事情。

还有另外一本书《Liner Algebra Done Right》,也值得推荐。这本书从定义矩阵算子,而不是通过行列式,来解释各种线性代数原理,提供了一种独特的视角。因为算子是有明确的几何或物理意义的,而行列式则不然。

作者:Sheldon Jay Axler,1949年生,美国数学家。普林斯顿大学本科,UCB博士,MIT博士后,San Francisco State University教授。美国的数学系基本就是本科和博士,很少有硕士。因为数学,尤其是理论数学,需要高度的抽象思维能力,半调子的硕士,既不好找工作,也不好搞科研。

三角矩阵的求逆问题

⎡⎣⎢l11l21l310l22l3200l33⎤⎦⎥⎡⎣⎢u1100u12u220u13u23u33⎤⎦⎥

以3阶方阵为例,上面左边的矩阵被称为下三角矩阵(lower triangular matrix),而右边的矩阵被称为上三角矩阵(upper triangular matrix)。

对于矩阵求逆问题来说,下三角矩阵是一类比较简单的矩阵,求逆难度仅高于对角阵。

下三角矩阵的逆矩阵也是下三角矩阵,因此:

AA−1=⎡⎣⎢⎢⎢a11a21…an10a22…an2…………00…ann⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢b11b21…bn10b22…bn2…………00…bnn⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢10…001…0…………00…1⎤⎦⎥⎥⎥

由矩阵乘法定义,可得:

cij=∑k=jiaikbkj

由cij=1,i=j,可得:bii=1aii

由cij=0,i≠j,可得:

cij=∑k=ji−1aikbkj+aiibij=0

因此:

bij=−1aii∑k=ji−1aikbkj=−bii∑k=ji−1aikbkj

上三角矩阵求逆,可通过转置转换成下三角矩阵求逆。这里会用到以下性质:

(AT)−1=(A−1)T

LU分解

LU分解可将矩阵A分解为A=LU,其中L是下三角矩阵,U是上三角矩阵。

LU分解的用途很多,其中之一是求逆:

A−1=(LU)−1=U−1L−1

LU分解有若干种算法,常见的包括Doolittle、Cholesky、Crout算法。

注:Myrick Hascall Doolittlee,1830~1913。

Andr´e-Louis Cholesky,1875~1918,法国数学家、工程师、军官。死于一战战场。

Prescott Durand Crout,1907~1984,美国数学家,22岁获MIT博士。

这里只介绍一下Doolittle算法。

A=⎡⎣⎢⎢⎢a11a21…an1a12a22…an2…………a1na2n…ann⎤⎦⎥⎥⎥=LU=⎡⎣⎢⎢⎢1l21…ln101…ln2…………00…1⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢u110…0u12u22…0…………u1nu2n…unn⎤⎦⎥⎥⎥

由矩阵乘法定义,可知:

a1j=u1j,j=1,2,…,n

aij={∑jt=1litutj,∑i−1t=1litutj+uij,j<ij≥i

因此:

u1j=a1j,j=1,2,…,n(U的第1行)

lj1=aj1/u11,j=1,2,…,n(L的第1列)

For i=2,3,…,n do

uii=aii−∑i−1t=1litutj

uij=aij−∑i−1t=1litutj for j=i+1,…,n(U的第i行)

lji=aji−∑i−1t=1ljtutiuii for j=i+1,…,n(L的第i列)

End

unn=ann−∑n−1t=1lntutn

参见:

http://www3.nd.edu/~zxu2/acms40390F11/Alg-LU-Crout.pdf

QR分解

任意实数方阵A,都能被分解为A=QR。这里的Q为正交单位阵,即QTQ=I。R是一个上三角矩阵。这种分解被称为QR分解。

QR分解也有若干种算法,常见的包括Gram–Schmidt、Householder和Givens算法。

注:Jørgen Pedersen Gram,1850~1916,丹麦数学家,在矩阵、数论、泛函等领域皆有贡献。他居然是被自行车撞死的…

Erhard Schmidt,1876~1959,德国数学家,哥廷根大学博士,柏林大学教授。David Hilbert的学生。20世纪数学界的几位超级大神之一。1933年前的哥廷根大学数学系,秒杀其他所有学校。所谓“一流的学生去哥廷根,智商欠费才去藤校”。

Alston Scott Householder,1904~1993,美国数学家,芝加哥大学博士,田纳西大学教授。ACM主席。

James Wallace Givens, Jr.,1910~1993,美国数学家,普林斯顿大学博士,西北大学教授。参与UNIVAC I机器项目(1951年),这是最早的商用计算机。

这里只介绍Gram–Schmidt算法,这个算法虽然名为Gram–Schmidt,然而拉普拉斯和柯西早就已经用过了。

首先介绍一下向量的投影运算的符号表示。



如上图所示,根据余弦定理和向量点乘的定义可得:

a⋅b=|a||b|cosθ

因此,向量a在向量b上的投影向量a1,可表示为:

a1=|a|cosθb^=|a|a⋅b|a||b|b|b|=a⋅b|b|2b=a⋅bb⋅bb=⟨a,b⟩⟨b,b⟩b

特别的,当b为单位向量时:

a1=⟨a,b⟩(4)

我们定义投影符号如下:

projea=⟨e,a⟩⟨e,e⟩e
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习