推荐一篇绝对好的文章:理解PCA的数学原理
首先PCA设计严格的数学推导证明!尤其设计矩阵的知识比较多,这里会简要地记录自己学习过程中觉得很重要的东西,具体的细节可以看我上面推荐的一篇文章。
简介
PCA(Principle Component Analysis)主成分分析,主要应用于数据降维,它是一种非监督的降维方法,主要捕获观测数据之间的变异程度。
当数据集的维度过高之后,运用各种算法处理起来的时间复杂度可能会很高,所以需要对数据进行降维处理,而且可以尽量保证数据的信息丢失最少。总的来说,PCA的过程步骤如下:
设有 M M 条 维数据;
(1)、将原始数据按列组成 N∗M N ∗ M 的矩阵 X X ;
(2)、将 的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值;
(3)、求出协方差矩阵: C=1mX⋅XT C = 1 m X ⋅ X T
(4)、求出协方差矩阵的特征值及其对应的特征向量;
(5)、将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k 行组成矩阵 ;
(6)、 Y=PX Y = P X 即为降维到 k k 维后的数据;
证明步骤
关键的步骤:
我们主要目的是:实现数据的降维,并且能够保证数据尽可能不要丢失信息。
这里需要实现的就是两点:
(1)、最大化数据投影后的方差;
(2)、使降维后数据之间的重叠信息尽量少,也就是新的 维空间的基向量相互正交。
所以导致了一个结果:
(1)、降维后数据的协方差矩阵应该是对角矩阵;
(2)、而且对角线上的元素值尽可能大。
最后推导得到:
优化目标变成了寻找一个矩阵
P
P
,满足是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维并满足上述优化条件。
讨论
- PCA捕捉了大部分预测变量方差,第一个主成分是在所有可能的线性组合中能够捕捉最多预测变量方差的组合。之后的主成分依次与之前的主成分不相关。
- PCA作为非监督的降维方法,也不会考虑数据的测量标度和分布,它不会考虑结局变量。所以,没有相关的指导信息,可能得到的主成分与最终的结局变量没有任何关系。
代码
PCA在sklearn中的使用:here
PCA算法一个简单的实现:Github
from sklearn.decomposition import PCA
pca = PCA(n_components=1)
newData = pca.fit_transform(data)
讨论
各降维方法的讨论见:here