主成分分析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;
浙公网安备 33010602011771号