用MATLAB编写的PLS算法程序

  • 格式:docx
  • 大小:16.19 KB
  • 文档页数:2

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clear all;

load DATA1;

load DATA3;

[X0,Y0]=stda(X,Y);

x0=X0;

y0=Y0;

[W,T,U,V,RX,RY,YY]=regress(X0,Y0);

T11=T;

[W2,T2,U2,V2,RX2,RY2,YY2]=regress(RX,RY);

T3=[T T2];

X6=W*V;

[M1 N1]=size(X0);

M2=eye(N1);

X7=V2*(M2-W*U')*W2;

out1=X6+X7;

X9=X0*out1;

[press1,ss1,j]=pressing(X0,Y0,YY,X9);

L=length(press1);

T3(:,1)=T;

T3(:,2)=T2;

W3(:,1)=W;U3(:,1)=U;

W3(:,2)=W2;U3(:,2)=U2;

F1=1;out=G;

if press1(2)<=press1(1)

for i=3:j-2

[W3(:,i),T(:,i),U(:,i),V3(i),RX3,RY3,YY3(:,i)]=regress(RX2,RY2);

for k=1:i-1

F1=F1*(M2-W3(:,k)*U3(:,k)');

end

X8=V3(i)*F1*W3(:,i);

G=G+X8;

out=G;

X10=X0*out;

end

[b,bint,r,rint,statss]=regress(Y0,T3);

else

[b,bint,r,rint,statss]=regress(Y0,T);

out=X6;

T3=T;

end

function[X0,Y0]=stda(X,Y);

A=mean(X);

B=mean(Y);

A0=std(X);

B0=std(Y);

L=length(A0);

for i=1:L

X0(:,i)=(X(:,i)-A(1,i))/A0(1,i);

end

Y0=(Y-B)/B0;

function[W1,T1,U1,V1,RX1,RY1,YY]=regress(X1,Y1);

Z0=X1'*Y1;

W1=Z0/norm(Z0,2);

T1=X1*W1;

U1=X1'*T1/(T1'*T1);

V1=Y1'*T1/(T1'*T1);

RX1=X1-T1*U1';

RY1=Y1-T1*V1;

YY=T1*V1;

function[press,SS,j]=pressing(X2,Y2,YX1,YX2)

[M1 N1]=size(X2);

press(1)=0;

press(2)=0;

SS(1)=0;

SS(2)=0;

for i=1:M1

X5=X2;

Y5=Y2;

X5(i,:)=[];

Y5(i)=[];

[W5,T5,U5,V5,RX5,RY5,YY5]=regress(X5,Y5);

Y6(i)=V5*X2(i,:)*W5;

press(1)=press(1)+(Y2(i)-Y6(i))^2;

SS(1)=SS(1)+(Y2(i)-YX1(i))^2;

[W25,T25,U25,V25,RX25,RY25,YY25]=regress(RX5,RY5);

T35=[T5 T25];

[b5,bint5,r5,rint5,stats5]=regress(Y5,T35);

X65=W5*V5;

[M15 N15]=size(X5);

M25=eye(N15);

X75=V25*(M25-W5*U5')*W25;

X85=X65+X75;

X95(i)=X2(i,:)*X85;

press(2)=press(2)+(Y2(i)-X95(i))^2;

SS(2)=SS(2)+(Y2(i)-YX2(i))^2;

end

W35(:,1)=W5;U35(:,1)=U5;

W35(:,2)=W25;U35(:,2)=U25;

F=1;j=3;S=0;

while press(j-1)<=press(j-2)

press(j)=0;

[W35(:,j),T35(:,j),U35(:,j),V35(j),RX35,RY35,YY35(:,j)]=regress(RX25,RY 25);

for k=1:j-1

F=F*(M25-W35(:,k)*U35(:,k)');

end

for i=1:M1

S=S+X2(i,:)*F*V35(j)*W35(:,j);

press(j)=press(j)+(Y2(i)-S9-S)^2;

end

RX25=RX35;

RY25=RY35;

j=j+1;

end