矩阵奇异值分解(SVD)与主成份分析(PCA)详解
鸣谢
本文引用了如下文章,如有侵权,请联系删除
主成分分析(PCA)原理详解
邹博机器学习教程
矩阵奇异值分解(SVD)
- 奇异值分解(Singular Value Decomposition)是一种重要的矩阵分解方法,可以看作对称方阵在任意矩阵上的推广。
- 假设A是一个m*n阶实矩阵,则存在一个分解使得:
Am∗n=Um∗mσm∗nVTn∗n
但这个U和V怎么确定呢?
有如下公式:(AT⋅A)vi=λivi⇒{σi=λi−−√ui=1σiA⋅vi⇒A=UσV
因为AT⋅A 为一个n*n的矩阵,所以它也有自己对应的特征值和特征向量,其中vi为AT⋅A 的第i个特征向量,λi 为它的第i个特征值,它总共有多少个特征值和特征向量不确定,但是肯定是有的(即使没有,i取0就好了)。
其中σ 对角线上的第i个元素称为矩阵A的第i个奇异值
其中U的第i列称为A的关于σi 的左奇异向量
其中V的第i列称为A的关于σi 的右奇异向量
通常我们将奇异值由大到小排列。这样σ 就能由A唯一确定了
下面我们来举个例子:
那么就能得到:
矩阵U和V都可以变换为单位正交方阵(如上述所示),即
说了那么多,我们已经知道了矩阵奇异值分解是在“干什么”了,但是我们还不知道矩阵奇异值分解有“什么用”,或者说我们“为什么”要进行矩阵奇异值分解呢?不要急,俗话说有图有真相,让我们用图说话。
光看这个图好像也不是很清晰,其实是这样的,上述公式我们已经说了:
其中
其中U的第i列称为A的关于
其中V的第i列称为A的关于
通常我们将奇异值由大到小排列。
因为矩阵的“奇异值”又叫做“特征值”,顾名思义,这些特征值可以从某种意义上代表矩阵的“特征”。又由于上述所说矩阵A的特征值和矩阵U以及V的列向量存在一一对应关系,那么我们可以选取一部分的特征值,以及它们对应的特征向量,为了保证矩阵的维度不变我们将其它的特征值和特征向量全部变成0就行了。
这样我们就做了一种类似于“特征提取”的操作,就如上图所示。并且显而易见的,我们提取的特征值越多,SVD得到的结果就与原图越相似,如果我们不做任何提取,也就是保留所有的特征值,那么SVD就相当于没有效果,结果与原图完全相同,换句话说我们就是保留了原图的所有特征。
SVD的不足
上面我们举了例子,SVD是很粗暴的将数据的特征值排一个序,然后选取最大的几个特征值来代表原数据的特征,这在图像处理方面确实没有问题,因为图像存储在电脑中说白了就是一堆灰度值点而已,它们之间是没有联系的,单纯的提取最有特点的部分是没有问题的。
但是!但是!但是!
许多的数据集中,每个数据的属性之间是有联系的!如此一来,单纯的提取特征的手段得到的效果必然是不会好的,所以我们得对SVD进行加强!于是我们的PCA闪耀登场!
主成份分析(PCA)
上述说了SVD不能考虑属性间关联的缺陷,所以我们得解决这个问题,如何才能表示属性间的关联呢?回想数理统计的知识,是不是想到了协方差!
没错!属性间的协方差就能表达属性间的联系!
如此一来,我们得到数据之后不直接对其进行SVD了,我们要做一些“预处理”,我们先求各个数据的协方差矩阵!
比如我们有个3维的数据(x,y,z),那么协方差矩阵是:
然后我们通过这个协方差矩阵求得SVD方法中的矩阵U与V,然后再根据求出的U与V去用SVD的原理提取原数据的特征就行了。这样我们的“提取规则(也就是矩阵U和V)”是考虑了原数据属性间的联系而制定的,弥补了SVD的缺陷。
很显然,其实PVA就是考虑了原数据的属性间的联系的SVD。
本文仅为我的一家之言,欢迎指出错误。