之前利用对协方差矩阵进行特征值分解来进行降维操作,如果数据量很大的话,协方差矩阵的计算和之后的特征值分解将会非常的慢,所以如果直接对原始采样数据矩阵A进行矩阵分解来进行降维操作,使用的方法就是SVD。
对A进行SVD分解
的含义
矩阵A是一个mxn的矩阵,它表示的线性变化是将n维原空间中的向量映射到更高维的m空间中,这个等式就意味着在原空间中找到一组新的标准正交向量
,在目标空间中存在着对应的一组标准正交向量
,此时
线性无关。
当A作用在原空间上的某个基向量
上,其线性变换的结果是:对应在目标空间中的
向量沿着自身方向上伸长
倍。(特征值分解是这里的一种特殊情况,即两组标准正交基向量相等)。
转换为:
将u中其他的加入进来
在对角矩阵下方加入m-n行全零:
又由于V各列是标准正交矩阵,
所以:
其中 U 和 V 是由标准正交向量构成的 m 阶和 n 阶方阵, 而
是一个
的对角矩阵。
如何求U和V,以及
而
,所以:
同理:
所以,只需要对
进行特征值分解,对
进行特征值分解,就可以得到这些矩阵
利用SVD进行主成分分析和数据降维
行压缩数据降维
对于最左边:
原本使用的是默认的一组基向量
, 我们通过上面的基变换, 将其用
这一组标准正交基来表示, 由于这一组标准正交基本质上也是由协方差对称矩阵
得到, 因此将各列做基变换后, 数据分布从行的角度来看就彼此无关了。
把每一列看作是一个样本, 各行是不同的特征, 各行彼此无关, 我们可以按照熟悉的方法, 选择最大的 k 个奇异值对应的 k 个标准正交向量, 形成行压缩矩阵:
,把列向量从m维压缩到了k维。
列压缩数据降维
将矩阵A记做:
那么:
类比上面的行压缩过程, 在 V 中, 我们从大到小取前 k 个特征值对应的标准正交特征向量, 就构成了另一个压缩矩阵:
通过
就能实现将
矩阵的各列由 n 维压缩到 k 维。