主成分分析PCA的matlab实现

关于PCA的详细说明,参见:http://blog.sina.com.cn/s/blog_61b8694b0101jg4f.html

在此,我把我所用的matlab实现代码列举在此,比较简洁,并附有详细的注释。

训练数据的PCA处理:

function [ mu,sigma,coeff,score,latent ] = PCA( originalData )
% originalData——原始数据,每行代表一组;
% 标准化数据:mu-每列的均值;sigma-每列的标准差;
% PCA降维数据:coeff-系数矩阵;score-PCA降维结果;latent-所有主成分的影响率(%)。

%训练时:
%1、数据标准化,并保存标准化所用的参数;
%2、PCA降维;
%3、选择维度(一般选择累计影响率大于95%的前几个维度),并保留所用的样本均值和系数矩阵;


%1、数据标准化:Z-标准化后的数据;mu-每列的均值;sigma-每列的标准差。
[Z,mu,sigma]=zscore(originalData);
%2、PCA降维:
[coeff,score,latent] = princomp(Z);
%3、选择维度
latent=100*latent/sum(latent);
A=length(latent);
percent_threshold=95;           %百分比阀值,用于决定保留的主成分个数;
percents=0;                          %累积百分比
for n=1:A
    percents=percents+latent(n);
    if percents>percent_threshold
        break;
    end
end
coeff=coeff(:,1:n);               %达到主成分累积影响率要求的系数矩阵;
score=score(:,1:n);              %达到主成分累积影响率要求的主成分;
save PCA mu sigma coeff latent end

 测试数据的PCA处理:

%测试时:
%1、按照训练样本的标准化参数,对测试数据进行处理:
%              Y=(X-mu)/sigma;
%2、再按照训练样本的PCA降维后所选择的系数矩阵对数据进行处理:
%               Y=X*coeff
%   由于在标准化中,已经对数据进行了减去均值处理,所以在此可直接乘系数矩阵。
load PCA
rownum=size(input_test,1);
input_test=(input_test-repmat(mu,rownum,1))./repmat(sigma,rownum,1);
input_test=input_test*coeff;

 

posted on 2016-05-27 16:41  鹿抬头  阅读(16322)  评论(0编辑  收藏  举报

导航