PCA降维算法及MATLAB实现

来源:互联网 发布:怎么降低软件版本 编辑:程序博客网 时间:2024/05/18 18:47

PCA降维算法及MATLAB实现

关于PCA降维算法的相关理解及在MATLAB中的应用
参考资料地址如下:

  • http://blog.csdn.net/watkinsong/article/details/8234766
  • http://blog.csdn.net/a1154761720/article/details/50721452
  • http://www.voidcn.com/blog/jiandanjinxin/article/p-5006758.html

PCA原理

  • PCA主要用于数据降维,找那些变化大的元素,即方差大的那些维,而去除掉那些变化不大的维,计算主成分的目的是将高维数据投影到较低维空间这个投影矩阵可以将特征从高维降到低维。

  • 举例:
    对于一个训练集,100个对象模板,特征是10维,那么它可以建立一个100*10的矩阵,作为样本。
    求这个样本的协方差矩阵,得到一个10*10的协方差矩阵,然后求出这个协方差矩阵的特征值和特征向量,应该有10个特征值和特征向量,我们根据特征值的大小,取前四个特征值所对应的特征向量,构成一个10*4的矩阵,这个矩阵就是我们要求的特征矩阵,100*10的样本矩阵乘以这个10*4的特征矩阵,就得到了一个100*4的新的降维之后的样本矩阵,每个特征的维数下降了。

  • 个人理解:通过PCA降维的矩阵的数据并没有减少而是同过不同的权值调整特征向量的表达

PCA实现步骤

(1)把原始数据中每个样本用一个向量表示,然后把所有样本组合起来构成一个矩阵。为了避免样本的单位的影响,样本集需要标准化(一般都是去均值化)。
(2)求该矩阵的协方差矩阵。
(3)求步骤2中得到的协方差矩阵的特征值和特征向量。
(4)将求出的特征向量按照特征值(降序排列)进行组合形成一个映射矩阵,并根据指定的PCA保留的特征个数取出映射矩阵的前n行或者前n列作为最终的映射矩阵。
(5)用步骤4的映射矩阵对原始数据进行映射,达到数据降维的目的。

MATLAB自带函数实现

[COEFF,SCORE,latent,tsquare] = princomp(X)    %函数调用

设X为m*n的矩阵
COEFF: X 的协方差矩阵的特征值所对应的特征向量组成的矩阵 (n*n); (即变换矩阵)
SCORE: X去均值后的最终映射矩阵(m*n)
Latent : SCORE每列的方差(n*1)
tsquare: 没用到。

A=cumsum(latent)./sum(latent);  %latent可以算出降维后的空间所能表示原空间的程度,找到累积值大于95%的成分(即降维标准)while A(i)<0.95    i=i+1endtranMatrix = pc(:,1:i)          %做主成分变换矩阵,则从原来的N维空间降到I维空间。x0 = bsxfun(@minus,X,mean(X,1)); %pca内建函数在算协方差的时候先减了个样本均值x0*tranMatrix  %样本集转换

可以观察到转换后的样本集即为SCORE的前 I 列
至此,我们可以开展后续的主成分分析工作。

这是这两天学习PCA的心得体会,有不足、错误之处欢迎大家指出。本人新进阶小白,新开博客记录自己的学习心得。量变的积累,质变的期待。
1 0
原创粉丝点击