是干什么的?
首先有一组数据蓝色点,PCA所谓的降维操作就是找到一个新的坐标系(旋转的两条直线式垂直的,我们可以用一组标准正交基来指示),然后减掉其中一些维度,使误差足够小。
![](https://img.haomeiwen.com/i6346776/5124031ff17f618f.png)
基本思路
假设我们有一个数据,其中n代表了特征的个数,m代表了样本数。首先对
的特征进行零均值化。
协方差矩阵(这里应该除以m,不妨碍推导),C的对角线代表了特征自身的方差,而其他位置比如
代表了特征
和特征
之间的协方差。
我们想要对原来的数据X做一个行变换,把原来的特征组合成新的特征,而新的特征之间没有关联,也就是新的矩阵
的协方差矩阵里只有对角线元素,其他位置都是0.
Want: ,
是一个对角阵
带入得到
,展开得到
,同志们这不就是对
进行对角化吗?因为
是实对称矩阵,一定可以对角化
,原式中的
就是对角化后的特征向量矩阵
其中特征值大小代表了
里面特征的方差大小,特征值越大,特征的方差越大,信息量越多。我们挑选主成分的话,只要挑选前面比较大的特征值对应的特征就可以了。
计算PCA的步骤
总结一下PCA的步骤:
1. 将原始数据按列组成n行m列矩阵X
2. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3. 求出协方差矩阵
4. 求出协方差矩阵的特征值及对应的特征向量
5. 将特征向量按对应特征值大小从左到右按列排列成矩阵,取前k行组成矩阵
6. 即为降维到k维后的数据
与SVD的关系
以上就是先求协方差矩阵然后特征值分解的方法,那么可以不求协方差矩阵吗?可以,直接用SVD。
SVD可以分解任意矩阵:
上面通过特征值分解其实得到的就是这里的
矩阵,通过成熟的SVD方法很容易求得这些矩阵。
参考:
Machine Learning — Singular Value Decomposition (SVD) & Principal Component Analysis (PCA)
网友评论