matlab实现主成分分析代码

%3.1_cwstd.m,用总和标准化法标准化矩阵
 
function std=cwstd(vector) 
cwsum=sum(vector,1);           %对列求和 
[a,b]=size(vector);              %矩阵大小,a 为行数,b 为列数 
for i=1:a 
     for j=1:b 
         std(i,j)= vector(i,j)/cwsum(j); 
     end 
end 



% 3.2_cwfac.m 计算相关系数矩阵 

function result=cwfac(vector); 
fprintf('相关系数矩阵:\n') 
std=CORRCOEF(vector)        %计算相关系数矩阵 
fprintf('特征向量(vec)及特征值(val):\n') 
[vec,val]=eig(std)   %求特征值(val)及特征向量(vec) 
newval=diag(val) ; 
[y,i]=sort(newval) ;     %对特征根进行排序,y 为排序结果,i 为索引 
fprintf('特征根排序:\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)=k; 
     if sumrate>0.85 break; 
     end                 %记下累积贡献率大85%的特征值的序号放入newi中
end                      
fprintf('主成分数:%g\n\n',length(newi)); 
fprintf('主成分载荷:\n') 
for p=1:length(newi) 
     for q=1:length(y) 
          result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p)); 
     end 
end                   %计算载荷 
disp(result) 


%3.3 _cwscore.m,计算得分  

  
function score=cwscore(vector1,vector2); 
sco=vector1*vector2; 
csum=sum(sco,2); 
[newcsum,i]=sort(-1*csum); 
[newi,j]=sort(i); 
fprintf('计算得分:\n') 
score=[sco,csum,j] %得分矩阵:sco为各主成分得分;csum为综合得分;j为排序结果 
        

%3.4 cwprint.m 
%filename为文本文件文件名,a为矩阵行数(样本数),b为矩阵列数(变量指标数)   

function print=cwprint(filename,a,b);  
        
fid=fopen(filename,'r') 
vector=fscanf(fid,'%g',[a b]); 
fprintf('标准化结果如下:\n') 
v1=cwstd(vector) 
result=cwfac(v1); 
cwscore(v1,result); 


你可能感兴趣的:(vector,function,matlab)