PCA
模式识别中用于主特征提取以实现降维。
假设
X=[x1x2⋯xn]T
是一个n维随机向量。向量
Y=[y1y2⋯yn]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(n∗n) ,就可以用PCA通过商品购买记录区分用户(相似的用户还喜欢商品ABCD)。
而对应于矩阵 X 变换后的矩阵
当然你可以选择用PCA通过用户对商品的喜好来分类用户眼中相似的商品(相似的商品有ABCD)。这就是在做列压缩了。
行压缩和列压缩都进行的话,对应相同的原理却要算两趟,SVD则很好的’包装’了PCA。
SVD隐语义模型
用于非方阵的分解
矩阵的特征值
λ
,特征向量
ν
,变换基
A
之间的关系:
现在假定给你一组已知数据 Sn∗n 那么我们假设S它是一组变换基,则通过 |λE−A|=0 关系式可以求得S的一组特征值,再通过每个特征值解出对应的特征向量。有人会问这有什么用啊?
通过特征值构成的对角矩阵 Σ ,特征向量 Q ,可以将原矩阵表示为
这样就将样本 A 用三个矩阵来表示了,然而表示需要的存储空间却并没有得到改进。
如果
Am∗n=Um∗mΣm∗nVTn∗n
这就是奇异值分解,将任意矩阵分解成上述形式。其中
U 称为左奇异量,
对于矩阵
进一步将 Σ 根据奇异值大小缩减维度将m*n变成r*r;
相应的将U变成m*r;将 VT 变成r*n维。得到
Am∗n≈Um∗rΣr∗rVTr∗n
这时候已经实现了 Am∗n 的压缩存储。
对于上述约等式右乘 Vn∗r 由于V正交。左边得到 Am∗nVn∗r 其实这是在对A做列压缩。类似的左乘 Ur∗m 得到 Ur∗mAm∗n 这是在对A做行压缩。
通过SVD解得U和V就可以根据需要对A做行压缩或列压缩。