主成分分析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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM