您的位置:首页 > 其它

6. 矩阵SVD分解

2017-05-10 16:24 218 查看

6. 矩阵SVD分解

pdf版本下载:https://pan.baidu.com/s/1o82ULa6

html版本下载:https://pan.baidu.com/s/1nvshyTb

  矩阵的SVD(Singular Value Decomposition)分解是矩阵当中的一种重要分解,具有广泛应用。比如说进行数据降维,特征提取,特别是用于图像的压缩。在线性代数里面似乎很少讲到矩阵的奇异值分解,这里单纯从数学原理角度解释一下SVD分解,可能会涉及到一些应用场景。

1 SVD分解的形式

  矩阵Mm∗n存在分解:Mm∗n=Um∗mΣm∗nVTn∗n,其中U、V是正交阵,Σ是对角矩阵。

2 特征值分解EVD

  在进行矩阵的奇异值分解之前,首先来看一下矩阵的特征值分解EVD(Eigen Value Decomposition)。这两者有着很紧密的关系。

特征值分解需要将矩阵分解成这样的形式:

Am∗m=Um∗mΛm∗mU−1m∗m=Um∗mΛm∗mUTm∗m

其中,A是m∗m的满秩对称矩阵,U为正交阵,Λ是由A的特征值组成的对角阵。

证明:

假设矩阵A的m个特征值分别为λi,对应的特征向量分别为xi,那么:

⎧⎩⎨⎪⎪⎪⎪Ax1=λ1x1Ax2=λ2x2...Axm=λmxm

于是:

AU=UΛ

其中,U=[x1x2...xm],Λ=[λ1⋯0 ⋮⋱⋮ 0⋯ λm ]

于是:

A=UΛU−1

3 奇异值分解SVD

  SVD分解的本质:寻找到一组正交基,经过矩阵Am∗n变换之后任然是正交基。

假设我们现在已经找到这样的一组基,譬如:{v1,v2,..,vn}

经过矩阵A映射成为:{Av1,Av2,..,Avn}

因为结果仍然为正交基:Avi⋅Avj=vTiATAvj=0

并且vi⋅vj=0

因此这里的vi我们选择是对称阵ATA的特征向量,所以vi两两正交。并且:

Avi⋅Avj=vTiATAvj=vTiλjvj=λjvTivj=0



  到这里,我们已经找到了一组正交基,经过矩阵A变换之后仍然为正交基。接下来进行SVD分解。

SVD分解:

Avi⋅Avi=λivivi=λi

单位向量:ui=Avi|Avi|=1λi√Avi

所以:Avi=σiui,σi=λi−−√称为奇异值。0≤i≤k=rank(A)

由线性代数的基本知识:可以将{u1,u2,..,uk}扩展到Rm空间中的单位正交基{u1,u2,..,um}

选取{vk+1,..,vn}满足Avi=0,并取σi=0,k+1≤i≤n

于是:

A[v1,..,vk|vk+1,..,vn]=[u1,..,uk|uk+1,..,un]⎡⎣⎢⎢⎢⎢⎢σ1⋮0⋯⋱⋯00⋮σk00⎤⎦⎥⎥⎥⎥⎥

结果:A=UΣVT

4 应用场景

  简单说一个应用:推荐算法。这个事情我们平常也一直可以接触到,比如说上淘宝买东西,他会根据你以前买过的东西或者别人买的东西来给你做推荐,再比如说网易云音乐每天早上6点钟给你推荐你可能喜欢的歌。(我个人觉得网易云音乐这个推荐做的还是不错的),据说它刚开始主打的就是一些小众音乐的个性推荐。推荐算法当中数据的采集是十分稀疏的,比如说有100个用户,1000种商品,那么这个矩阵就有100000个元素,而每个人都可能只买过大概10种商品,那么矩阵当中非零的元素只有1000个,大部分的元素都是0。冗余情况很严重。所以这个时候通过矩阵的分解,可以做到对数据进行压缩。

  很久之前有一个推荐算法的比赛Netflix,当时主办发宣称有选手可以在他们的算法基础上提高10%的精度可以拿走100万美元的奖金。据说当时的冠军就用到了矩阵的SVD分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: