奇异值分解SVD
主要参考https://www.cnblogs.com/pinard/p/6251584.html,
https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
奇异值分解(Singular Value Decomposition,SVD),用于降维算法的特征分解、推荐系统、NLP等
1.特征值和特征向量
方阵
A:n×n特征向量
x:1×n——特征值
:——
W:n×n,上述特征向量集合
:n×n,主对角线为n个特征值的对角矩阵
标准化得,则,则,则,则W为酉矩阵
补充:取topK个特征值对应的特征向量即可实现降维,特征值表示特征的重要性
限制:A必须为方阵
2.奇异值分解SVD
特点:不要求分解的矩阵为方阵
待分解矩阵A:m×n
U:m×m,由左奇异向量组成
:m×n,主对角线为奇异值,其他为0
V:n×n,由右奇异向量组成
U和V均为酉矩阵,即
求解上述三个矩阵:
用n×n的方阵做特征值分解,得到n个特征值和特征向量v,作为右奇异向量,得到右侧的V矩阵;
用m×m的方阵做特征值分解,得到n个特征值和特征向量u,作为左奇异向量,得到左侧的U矩阵;
求解奇异值:
另外:
则的特征向量组成V,同理的特征向量组成U。且特征值是奇异值的平方,即
3.例子
4.性质
奇异值和特征值类似,且奇异值减少很快,“在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。”。所以可以用topK个奇异值近似描述矩阵
则实现用三个小矩阵近似描述大矩阵A,如灰色部分
如:在PCA中,需要先计算样本协方差矩阵,再计算最大的d个特征向量,样本数和特征数多的时候计算量很大。一些SVD实现算法不需要先求出协方差矩阵也可以求出右奇异矩阵,sklearn就是使用SVD。另外,左奇异矩阵可以用于行数的压缩
按照参考2的解释,矩阵乘法就是线性变换的过程,特征值大小反映了变换方向的重要性