主成分分析:(Principal Component Analysis)
基本思想
主成分分析,顾名思义,就是通过一定的变换将原始数据变换为一组在新维度下的数据表示,并且用数据的主要特征分量代替原数据,来达到降维的目的,并且经过降维去除噪声,发现数据中的模式。
PCA的思想是将n维特征映射到k维上(k < n),把原先的n维特征用数目更少的k维特征取代,这k维是全新的正交特征,是旧特征的线性组合。这k维特征称为主元,这些线性组合最大化样本方差,尽量使新的k维特征互不相关。
简单点讲,对于数据量很大的数据集,或许我们很难直观的分析出该数据集的主要成分,原因就在于在坐标系下,这组数据的分布很散乱,难以观察。但是,如果我们能把这些数据在相应的空间中表示出来,也许我们就可以换个角度找出主成分:
如上图可知,在原始空间中,数据分布散乱并且毫无规律可言,但是,在PC1,PC2方向下,我们看到的又是整齐规律的数据分布。而如何找到PC1,PC2方向正是PCA要做的,就是在更高维的数据中,提取出我们想要的主成分,在这个提取过程中,也就达到了数据降维的目的,同时我们也可以通过PCA方法衡量这些主成分到底占了整个数据的多少信息。
补充:
PCA为什么可以通过一定的变换将原始数据变换成更低维的数据代替?原因就在于原始数据在多个维度(或影响因素)下反映的信息存在一定程度上的重叠(不同维度之间存在相关关系),那么我们就可以用比原来更少的维度(线性无关)来描绘原来的数据,当这些维度可以保留住数据中那些最重要的信息时,数据降维的目的就实现了。
PCA原理详解
预备知识
协方差:通常用Cov表示
协方差是一种用来度量两个变量关系的统计量,其定义为:
其中,
特别地:
此外,还有:
这一过程叫做零均值化,通过每一个数据减去其列对应的均值,达到简化代码的目的。
以上讲的Cov(X,Y)都是二维的,当面对更高维的数据时,我们通常使用协方差矩阵:
例如,当n=3时,
可见,协方差矩阵为对称矩阵,其对角线为各个维度上的方差。
注:方差是衡量数据分布的一个重要的指标。数据的方差越大,则代表数据的分布越分散。PCA便是根据协方差矩阵对角线上的值的大小来选择新轴的
特征值与特征向量:
一般来说,如果一个 n 阶矩阵
通常,在物理意义上,一个高维空间的线性变换可以想象是在对一个向量在各个方向上进行了不同程度的变换,而特征向量之间是线性无关的,它们对应了最主要的变换方向,同时特征值表达了相应的变换程度。值得注意的是:一个矩阵的一组特征向量
PCA的算法步骤
- 第一步:对于原始数据,进行去均值化,即所有的样例数据减去其对应的均值;
- 第二步:计算协方差矩阵;
- 第三步:计算协方差矩阵的特征向量与特征值;
- 第四步:将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵;
- 第五步:将样本点投影到选取的特征向量上。假设样例数为
m
,特征数为
n ,减去均值后的样本矩阵为 DataAdjust ( m×n ),协方差矩阵是 n×n ,选取的k个特征向量组成的矩阵为 EigenVectors ( n×k )。那么投影后的数据 FinalData 为:FinalData(m×k)=DataAdjust(m×n)×EigenVectors(n×k)
整个PCA算法流程貌似非常简单,就是求协方差的特征值和特征向量,然后做数据转换。但是有没有觉得很神奇,为什么求协方差的特征向量就是最理想的k维向量?其背后隐藏的意义是什么?整个PCA的意义是什么?
推导思路
回过头来看PCA的目的,原始数据是分布在以
n
个不同的变量为坐标轴组成的N维空间上,数据在一些轴上(假设其数目为
通过PCA的算法步骤,我们可以知道,我们就用协方差的特征向量的方向来代表这k条轴的方向。那么,为什么协方差矩阵的特征向量就是k维理想特征呢?
以下用最大方差理论和最小误差理论解释上述问题:
1、最大方差理论
在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。所以,我们认为,最好的k维特征是将n维样本点转换为k维后,每一维上的样本方差都很大。
假设,下图有5个样本点:(已经做过预处理,均值为0,特征方差归一)
将样本投影到某一维上,这里用一条过原点的直线表示:
那么,根据我们的方差最大化理论,应当选择使得样本分布方差最大的情况,即如上图可知,问题转化为:找出最优的
投影后方差为:
也即是:
令:
那么,有:
对于 XXT ,假设其某一特征向量为 ξ ,对应的特征值为 λ ,则,存在:
即, λ≥0
故,可知 XXT 为半正定矩阵,而 uTX⋅XTu 为半正定矩阵的二次型,所以,目标函数 max{Var(x)}=max{1nuTXXTu} 必定存在最优解。
对于 1nuTXXTu=uT(1nXXT)u ,易知,其中 1nXXT 即为协方差矩阵 C ,不妨记为:
令 Λ=1nuTXXTu ,则有:
所以:由上式可知, u⃗ 即为协方差矩阵 Σ 的特征向量, Λ=1nuTXXTu 即为协方差矩阵 Σ 的特征值。最佳的投影直线是特征值 λ 最大时对应的特征向量 u1→ ,其次是 λ 第二大对应的特征向量 u2→ ,依次类推。
因此,我们只需要求解协方差矩阵的特征向量与特征值,得到的前 k 大特征值对应的特征向量就是最佳的
在得到前
至此,我们就得到了我们想要的经过降维处理的数据 FinalData 。
注:
可以通过线性代数知识求解 Λ 的最大值:假设协方差矩阵的特征值为: λ1≥λ2≥⋯≥λn≥0 ;根据
2、最小误差理论
回顾我们前面探讨的是求一条直线,使得样本点投影到直线上的点的方差最大。再回想我们学过的线性回归,目的也是求一个线性函数使得直线能够最佳拟合样本点,那么我们能不能认为最佳的直线就是回归后的直线呢?
因此,我们打算选用一种评价直线好坏的方法,来代替评价找到的最佳直线是否为最佳拟合直线。
这种评价直线好坏的方法就是,用点到直线的距离
d2
来度量。
记
xi
在直线上的投影为
xi′
;那么我们就是要最小化
这个公式称作最小平方误差(Least Squared Error)。
而确定一条直线,一般只需要确定一个点,并且确定方向即可。
第一步确定点:
假设要在空间中找一点 x0 来代表这n个样本点,就需要使得
假设 X¯ 为这n个样本点的均值,那么
即: X¯ 可以代表这n个样本点。
第二步确定方向:
假设直线的方向是单位向量 e⃗ 。那么直线上任意一点,比如 xk′ 就可以用点 X¯ 和 e⃗ 来表示:(其中 dk 是点 xk′ 到 X¯ 的距离)
则此时平方误差为:
首先,对 dk 进行求偏导数,得到:
代入 J0(x′k) 中可得:
则,此时要使
令:(由于 ∥e∥2=1 )
求偏导:
令导数为零,得:
即:
而
即: 1n−1S 即为协方差矩阵 C ,
故,同样可知对协方差矩阵求特征向量,就是求解样本点的投影直线的最佳拟合方向,前k个特征向量的方向就是前k个最佳拟合直线方向,也即为前k个主成分方向。
得到k个主成分方向之后,就可以得到投影之后的数据 FinalData 了。
至此,PCA算法的推导过程也就结束了,我们可以看到,整个推导过程重点就在于怎样论证k个特征向量方向就是我们想要的k个主成分方向,这里用了两个理论:最大方差理论和最小平方误差理论。
参考资料:
http://blog.csdn.net/zhongkelee/article/details/44064401
http://blog.csdn.net/hit1524468/article/details/60323173
https://www.zhihu.com/question/30094611/answer/120499954
http://blog.csdn.net/dongtinghong/article/details/14216139
http://blog.sciencenet.cn/blog-1583812-814868.html