主成分分析 MATLAB

clc,clear 
sn=[7 26 6 60 78.5
    1 29 15 52 74.3
    11 56 8 20 104.3
    11 31 8 47 87.6
    7 52 6 33 95.9
    11 55 9 22 109.2
    3 71 17 6 102.7
    1 31 22 44 72.5
    2 54 18 22 93.1
    21 47 4 26 115.9
    1 40 23 34 83.8
    11 66 9 12 113.3
    10 68 8 12 109.4
    ];
[m,n]=size(sn);num=3; %num为选取的主成分的个数 
mu=mean(sn);sigma=std(sn); 
snb=zscore(sn); %数据标准化 
b=snb(:,1:end-1); %x1,x2,x3,x4的数据赋给b 
r=cov(b);  %标准化数据的协方差阵就是相关系数阵 
[x,y,z]=pcacov(r); 
f=repmat(sign(sum(x)),size(x,1),1); 
x=x.*f; 
%以下是普通的小二乘法回归 
r=[ones(m,1),b]\snb(:,end);  %标准化数据的回归方程系数 
bzh=mu./sigma; 
ch10=mu(end)-bzh(1:end-1)*r(2:end)*sigma(end)  %原始数据的常数项 
fr=r(2:end);fr=fr'; 
ch1=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数 
%以下是主成分回归 
pval=b*x(:,1:num); 
rp=[ones(m,1),pval]\snb(:,end);  %主成分数据的回归方程系数 
beta=x(:,1:num)*rp(2:num+1);           %标准化数据的回归方程系数 
ch20=mu(end)-bzh(1:end-1)*beta*sigma(end)  %原始数据的常数项 
fr=beta'; 
ch2=fr./sigma(1:end-1)*sigma(end) %原始数据的x1,x2等等系数 
check1=sqrt(sum((sn(:,1:end-1)*ch1'+ch10-sn(:,end)).^2)/(m-n)) 
check2=sqrt(sum((sn(:,1:end-1)*ch2'+ch20-sn(:,end)).^2)/(m-num-1)) 
 

你可能感兴趣的:(Matlab,matlab,p2p,开发语言)