A=V*diag(\lambda)*V^(-1)
其中V是由A的特征向量构成的矩阵,diag(\lambda)是由A的特征值构成的对角阵。
对角矩阵S对角线上的元素称为A的奇异值,U的列向量称为左奇异向量,V的列向量为右奇异向量。用特征分解解释为:
SVD在图像中可以实现压缩,重构图像的效果。由于奇异值可以看作是图像的表示标志,并且奇异值越大,它所包含的图像信息也就越多,因此完全可以选取较大的一些奇异值来对图像进行重构。
原始图像如下,shape=(1800,1200,3),过程:reshape——构建USV(分别选取120,360,600个奇异值)——图像重组——plot
奇异值函数svd()的输出是按照从大到小的顺序排列的,并且奇异值下降很快,因此选取值比较大的前面的一些奇异值完全可以还原图像。
4. SVD应用——降维SVD的另一大常见应用是降维,当矩阵的列数多于行数(特征数大于观察样本数)时,通过一次SVD操作可以得到一个维度更小的与预测结果相关的矩阵(与原始矩阵相似)
实现:在原始矩阵上使用一次SVD操作,接着选取前k个最大奇异值,这些列可以从S(Sigma)矩阵中选择,行可以从V^T矩阵中选择。scipy库与scikit-learn库中有相应的SVD方法。构建一个列多于行的矩阵,执行一次SVD,选择前两个奇异值,然后这些元素再重新结合起来,得到原始矩阵的准确再现。最后计算转换的方式有两种。
TruncastedSVD类: n_components = 指定奇异值个数原始的矩阵是(3,5),经过转化得到相似矩阵(3,2)
Scipy 方法:算法流程
参考:
1. 机器之心:https://www.jiqizhixin.com/articles/0301?from=synced&keyword=SVD
2. 博客园:https://www.cnblogs.com/endlesscoding/p/10033527.html