matlab中利用princomp实现PCA降维
在matlab中有函数princomp可以实现数据的降维,本文主要说明该函数的用法。
PCA的作用:
PCA(主成分分析法),主要用来对数据进行降维,比如在机器学习中,我们提取了大量的特征,并针对这些特征进行分类,这些特征的维度很高,在利用SVM进行分类的时候会消耗大量的时间,PCA降维是将这些特征映射到另一个空间里面,并且去除数据冗余。
假设有样本m个。每个样本提取n维特征,构成一个m*n维的矩阵X,降维之后的矩阵为Y, 在降维的过程中需要满足以下两个条件:
(a) Y的维度小于X的维度;
(b) Y的各个维度之间的差异越大越好(差异越大,表示数据的冗余越小,这也是可以降维的基本条件);
PCA原理
- 首先衡量
X(m*n)
中各维特征之间的相关性,通过计算X中各列之间的协方差构成协方差矩阵D(n*n)=X'X,其中X'是X的转置,注意这里的X是零均值化之后的X
,为了实现数据的降维,我们希望数据之间的相关性越小越好,也就是去掉那些相关性较高的冗余数据,换个角度也就是说希望协方差矩阵D
是一个对角阵; - 现在假设有一个转换矩阵
P
,将X
映射到另一个空间得到Y
,即Y=XP
,使得转换之后的Y
的协方差矩阵D1是一个对角阵,即:
D1=Y'Y=(XP)'(XP)=P'X'XP=P'DP
也就是已知D1
是对角阵,D
是X
的协方差矩阵,PCA问题就转换成一个实对称矩阵的对角化问题,利用相关的矩阵知识可以求解得到P。其实P就是由D的特征向量组成。
PCA降维的步骤
还是假设有m个样本,每个样本的特征用n维表示,生成矩阵A(m*n)
1. 将A的每一列进行零均值化,即用每一列的数据减去该列的均值得到矩阵X
;
2. 计算协方差矩阵D=X'X
;
3. 计算协方差矩阵D
的特征值与特征向量;
4. 将特征向量按照对应特征值的大小按列排列生成矩阵P’;
5. 假设我们要将n
维的向量降维成k
维,只需要取P’的前k列构成矩阵P;
6. 求解降维后的数据Y=XP
;