SVD原理
SVD将矩阵分解为三个矩阵的乘积,即
其中,A是m×n的矩阵,U是m×m的矩阵,V是n×n的矩阵,
∑
\sum
∑是m×n的除主对角线上的元素以外全为0的矩阵。并且满足:
U
T
U
=
I
,
V
T
V
=
I
U^TU=I,V^TV=I
UTU=I,VTV=I
将奇异值从大到小排列,会发现奇异值的减少特别快,很多情况下,前10%甚至1%的奇异值的和就占了全部奇异值之和的99%以上。因此,可以用最大的k个奇异值对应的左右奇异向量来近似描述矩阵,即
因此SVD也是一种降维技术,保存小一点的矩阵即可重构出原矩阵A。
[1] https://www.zhihu.com/question/34143886/answer/131046490
SVD的应用----LSI
LSI(或者LSA,潜在语义分析),简单来说:
给定矩阵A, shape = (m,n),其中m是文档数,n是单词数,
a
i
j
a_{ij}
aij表示第i篇文档中第j个单词的特征,比如:词频、TF-IDF。
通过SVD,将A分解成三个矩阵。
A = XBY
X: shape=(m,k), 含义:
x
i
j
x_{ij}
xij表示第i篇文档和第j个主题的相关性
B: shape=(k,k),含义:
b
i
j
b_{ij}
bij表示第i个主题和第j个词义的相关性
Y: shape=(k,n),含义:
y
i
j
y_{ij}
yij表示第i个词义和第j个词语的相关性
分解后得到的X和Y矩阵是十分有用的,通过X,可以进一步分析出主题相似的文章;通过Y,可以进一步分析出同义词。
注意:奇异值分解后,X,Y中的元素可以是负的,因此在这一点上并不好。
SVD和PCA的关系
在PCA中,要找到样本协方差矩阵 X T X X^TX XTX的最大的d个特征值对应的特征向量,其中X是m×n,m是样本个数,n是样本维度。
对X进行SVD,得到
X
=
U
∑
V
T
X = U\sum V^T
X=U∑VT
X
T
X
=
V
∑
∑
V
T
X^TX = V\sum \sum V^T
XTX=V∑∑VT,因此PCA需要的是右奇异矩阵V。
PCA算法的背后真正的实现就是用的SVD,好处是:有一些SVD实现算法可以不求出协方差矩阵 X T X X^TX XTX,也能求出右奇异矩阵V。
[1] https://blog.csdn.net/abcjennifer/article/details/8131087
[2] https://www.cnblogs.com/pinard/p/6251584.html