好不容易把PCA稍稍弄懂了,记一点笔记以防日后遗忘~
主要记录对矩阵乘法到底是什么,还有PCA中为什么要用方差为什么要用协方差还有为什么要用特征向量的理解。
因为是写给自己看的所以难免有疏漏和错误,另外参考资料1是我见过最好的PCA文章~
什么是降维
想象这样一个场景:有一台电视在播放足球比赛,显示器包含了100万个像素,而球只占1000个像素。在一场比赛中,观众当然会更关注比赛的情况——也就是球的位置(观众应该不会对天空和草皮感兴趣)。因此,可以说人脑将显示器上的100万像素转换成了一个1000像素,也就是说,将数据从100万维降到了1000维。为什么呢?是因为这1000维最重要。
降维有一些作用:
- 降低算法开销(从处理100万维到处理1000维)
- 去除噪声(天空和草皮对于“看球”来说是噪声)
- 使得结果易懂
当然,降维不可避免地会减少数据的信息量。
PCA怎么做
求得数据集的协方差矩阵,并作特征值分析,最大的特征值对应的特征向量称为第一主成分,第二大的特征值对应的特征向量成为第二主成分。选择N个主成分,将数据转换到N个主成分构建的新空间中。
PCA是什么?
(图源:《机器学习实战》:P244)
矩阵代表一种线性变化
两个矩阵相乘的意义是:将右边矩阵中的每一列向量变换到左边矩阵中以每一行行向量为基所表示的空间中去。
细节理解参阅参考资料1
为什么要用方差
考虑图中的大量数据点,如果现在要我们选一条直线,这条线要尽可能覆盖这些点(就是将二维的数据点映射到一维上),应该选哪一条?
我们要选择使数据有最大可分性的一条,通俗来讲,这些点映射到直线上后,要保证重叠的点最少。想一想,怎样以数学的方式来表示最大可分?
我们选择用方差。现在,这个问题转化成了:数据映射到哪一条直线后,数据的方差最大?
为什么要用协方差
刚才考虑的是二维转一维的情况,现在考虑三维转二维
对于降维后的二维数据,我们不仅要看每一个维度上的方差,而且还要看两个维度之间的关系。也就是说,我们希望这两个维度之间不相关(相关的话必定包含一部分重复的信息)
说起不相关想起了什么?就是协方差
现在,降维的问题转化成了:在两个维度之间协方差为0时,使每一个维度方差最大(这里的维度,就是指降维后表示空间的变量)
为什么要用协方差矩阵
仔细观察协方差矩阵,对角线上是变量内方差,其他位置上的都是变量间协方差。所以,对于降维后的数据矩阵,我们希望他的协方差矩阵是一个对角矩阵(即对角线为0)
(该图片来自参考资料1)
因此,我们的目标变成了:找到P,使得D为对角矩阵,并且对角元素从大到小排列(因为对角元素表示的方差,而我们要选择方差最大的变量)
为什么要用特征向量
特征向量满足什么性质?
Av=λv,其中λ是一个常数。
又由上文,C为对称矩阵,对称矩阵有一些很好的性质
1.实对称矩阵不同特征值对应的特征向量必然正交。
2.设特征向量λ重数为 r,则必然存在 r 个线性无关的特征向量对应于λ,因此可以将这 r 个特征向量单位正交化。
我们设C的特征向量分别为e1, e2, e3,…, en,按列组合成矩阵E=(e1, e2, e3,…, en)
根据矩阵运算ETCE(ET为E的转置)的结果正好是一个对角矩阵,其对角线上的值是各特征向量对应的特征值——正合我意。
所以我们现在就找到了P,P为E的转置。
参考资料
[1]:【机器学习】降维——PCA(非常详细) - 阿泽的文章 - 知乎
https://zhuanlan.zhihu.com/p/77151308
[2]:《机器学习实战》