PCA主成分分析与SVG隐语义

来源:互联网 发布:protobuf数据解析 编辑:程序博客网 时间:2024/04/23 16:42

PCA

模式识别中用于主特征提取以实现降维。
假设

X=[x1x2xn]T

是一个n维随机向量。向量
Y=[y1y2yn]T

满足Y=CX
C是正交矩阵,X经过不同的投影变换后
得到如:y1=c11x1+c12x2+c13x3+...+c1nxn
y2=c21x1+c22x2+c23x3+...+c2nxn
其中C2k1+C2k2+...+C2kn=1
使它在得到的y1维度上具有最大的方差,即通过y1这个维度能更好的将不同类别物品分开。而经过投影后的y2维度具有次大方差,依此类推。
如何求出C呢?
由于yi之间不相关,因此整个Y矩阵的协方差矩阵
YYT=CXXTCT=Λ

Λ=λ1λ2λ3......λn

R=XXT则有RCT=CTΛ,将该式展开,得到n2个方程。假使R的第一行乘以CT的第一列,得到了n个方程。根据齐次线性方程组有非零解的条件是系数矩阵的行列式=0,即系数矩阵的秩< n,即|R1λ1I|=0。由此解得λ1。其他λ的值相应也可以得到。有了n个λ的值。又有n2个方程,因此解得矩阵C。
这样对于一个有n个用户,每个用户又有对n个物品的购买记录的数据矩阵N(nn),就可以用PCA通过商品购买记录区分用户(相似的用户还喜欢商品ABCD)。
而对应于矩阵X变换后的矩阵Y其实可以去掉Y的某些排在后面(不重要)的维度,这样在分类时就大大减少了负载。通过减少维度使Xn1Ym1取代,这相当于对矩阵Nnn压缩到了Mmn。直接存储更新M用于分类。
当然你可以选择用PCA通过用户对商品的喜好来分类用户眼中相似的商品(相似的商品有ABCD)。这就是在做列压缩了。
行压缩和列压缩都进行的话,对应相同的原理却要算两趟,SVD则很好的’包装’了PCA。


SVD隐语义模型

用于非方阵的分解
矩阵的特征值λ,特征向量ν,变换基A之间的关系:

Aν=λν

现在假定给你一组已知数据Snn那么我们假设S它是一组变换基,则通过|λEA|=0关系式可以求得S的一组特征值,再通过每个特征值解出对应的特征向量。有人会问这有什么用啊?
通过特征值构成的对角矩阵Σ,特征向量Q,可以将原矩阵表示为
A=QΣQ1

这样就将样本A用三个矩阵来表示了,然而表示需要的存储空间却并没有得到改进。
如果A不是n*n矩阵而是m*n即m个用户n个物品购买记录呢?
Amn=UmmΣmnVTnn

这就是奇异值分解,将任意矩阵分解成上述形式。其中
U称为左奇异量,Σ除了对角线上的值称为奇异值,除对角线外其它都是0(SVD怎么求的),V称为右奇异量。
对于矩阵 Amn通过 (AAT)ν=λν 求得特征向量 ν 就是右奇异量V, σ=λ 就是奇异值且在 Σ 中从大到小排列,有了 ΣVT , μ=Aνσ即左奇异值。
进一步将Σ根据奇异值大小缩减维度将m*n变成r*r;
相应的将U变成m*r;将 VT 变成r*n维。得到
AmnUmrΣrrVTrn

这时候已经实现了 Amn 的压缩存储。
对于上述约等式右乘 Vnr 由于V正交。左边得到 AmnVnr其实这是在对A做列压缩。类似的左乘 Urm 得到UrmAmn这是在对A做行压缩。
通过SVD解得U和V就可以根据需要对A做行压缩或列压缩。

0 0