森之张卫东 发表于 2015-8-2 21:16

PCA主成分分析代码,函数形式

function [contribution,T2,SPE,t2cl,s_cl] =  PCA_model(Xtrain,Xtest)
X_mean = mean(Xtrain);               
X_std = std(Xtrain);                  
[X_row ,X_col]= size(Xtrain);
for i = 1:X_col
    Xtrain(:,i) = (Xtrain(:,i)-X_mean(i))./X_std(i);
    Xtest(:,i) = (Xtest(:,i)-X_mean(i))./X_std(i);
end
[U,S,V]=svd(Xtrain./sqrt(size(Xtrain,1)-1),0);        
D= S^2;
lamda=diag(D);
num_pc=1;
while sum(lamda(1:num_pc))/sum(lamda)<0.9
    num_pc=num_pc+1;
end
D=diag(lamda);
P=V(:,1:num_pc);
&#91;a,b&#93;=size(Xtest);
&#91;r,y&#93;=size(P*P');
I=eye(r,y);
e=Xtest*(I-P*P');
for i=1:a  
T2(i)=Xtest(i,:)*P*inv(D(1:num_pc,1:num_pc))*P'*Xtest(i,:)';
end
for l=1:a
    SPE(l)=e(l,:)*e(l,:)';
end

for j=1:b
    contribution(j)=(norm(e(:,j)))^2;
end

t2cl=num_pc*(X_row-1)*(X_row+1)*icdf('f',0.99,num_pc,X_row-num_pc)/(X_row*(X_row-num_pc));
for i=1:3
     theta(i)=trace((D(num_pc+1:X_col,num_pc+1:X_col))^i);        
end
% 另一种SPE控制线算法
% h=(theta(1)^2)/theta(2);
% g=theta(2)/theta(1);
% conf=0.95;                              
% df=round(h);                           
% delta2a1=g*pinv(df,2);

h0=1-2*theta(1)*theta(3)/(3*theta(2)^2);
ca=icdf('norm',0.99,0,1);
s_cl=theta(1)*(ca*sqrt(2*theta(2)*h0^2)/theta(1)+1+theta(2)*h0*(h0-1)/theta(1)^2)^(1/h0);

森之张卫东 发表于 2015-8-2 21:17

上传一个测试程序。
页: [1]
查看完整版本: PCA主成分分析代码,函数形式