資源簡介
用MATLAB實現的主成分分析法,有數據,可直接運行

代碼片段和文件信息
clc
clear?all
fid=fopen(‘data.txt‘‘r‘)
X=fscanf(fid‘%g‘[10?35]);
X=X‘;
ans=fclose(fid)
%fprintf(‘標準化結果如下:\n‘)
%vl=cwstd(vector)
%result=cwfac(vl);
%[resultstd]=cwfac(X);
%cwscore(stdresult);
fprintf(‘標準樣本變換法標準化的(std):\n‘)
std=zscore(X)
fprintf(‘計算相關系數矩陣(st):\n‘)
st=corrcoef(std)
fprintf(‘特征向量(vec)及特征值(val):\n‘)
[vecval]=eig(st)
newval=diag(val);
[yi]=sort(newval);??????%對特征根進行排序,y為排序結果,i為索引
fprintf(‘特征根排序:\n\n‘)
for?z=1:length(y)
????newy(z)=y(length(y)+1-z);
end
fprintf(‘%g\n‘newy)
rate=y/sum(y);%【計算貢獻率】
fprintf(‘\n貢獻率:\n‘)
newrate=(newy/sum(newy))%
sumrate=0;
newi=[];
for?k=length(y):-1:1
????sumrate=sumrate+rate(k);
????newi(length(y)+1-k)=i(k);
????if?sumrate>0.85?break;?%【70%在這里改動】
????end??
end????????
fprintf(‘主成分數:%g\n\n‘length(newi));%【newi里放的是主成分】
fprintf(‘主成分荷載:\n‘)
for?p=1:length(newi)
????for?q=1:length(y)
????????result(qp)=sqrt(newval(newi(p)))*vec(qnewi(p));
????end
end%計算荷載
disp(result)
sco=std*result;
csum=sum(sco2);
[newcsumi]=sort(-1*csum);
[newij]=sort(i);
fprintf(‘計算得分:\n‘)
score=[scocsumj]%得分矩陣:sco為各主成分得分;csum為綜合得分;j為排序結果
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2955??2012-10-27?14:42??PCA\data.txt
?????文件???????1257??2012-10-31?13:23??PCA\pca.m
?????目錄??????????0??2013-01-15?14:33??PCA
-----------?---------??----------?-----??----
?????????????????4212????????????????????3
- 上一篇:Matlab 常微分方程數值解法
- 下一篇:誤差分析計算公式和對應的matlab實現
評論
共有 條評論