📄 kernel_pls.m
字号:
function [W, P, Q, R, T, X_explained, Y_explained]=kernel_pls(X,Y,A);
%[W, P, Q, R, beta,explained_rate]=mkernel1(X,Y,A)
% Mean-centering and scaling of the variables
[nn1, np]=size(X);
[nn2, nm]=size(Y);
if nn1 ~= nn2
disp('unmatched data size');
%exit;
end
nn=nn1;
% mean-centering & scaling of the process variables
%X=X-ones(nn,1)*mean(X);
%X=X./(ones(nn,1)*std(X));
% mean-centering & scaling of the quality variables
%Y=Y-ones(nn,1)*mean(Y);
%Y=Y./(ones(nn,1)*std(Y));
% modified kernel algorithm
W=[];P=[];Q=[];R=[]; T=[]; X_explained=norm(X);Y_explained=norm(Y);
XY=X'*Y;
for i=1:A
if nm==1
w=XY;
else
[C,D]=eig(XY'*XY);
q=C(:,find(diag(D)==max(diag(D))));
w=XY*q;
end
w=w/sqrt(w'*w);
r=w;
for j=1:i-1
r=r-(P(:,j)'*w)*R(:,j);
end
t=X*r;
tt=t'*t;
p=(X'*t)/tt;
q=(r'*XY)/tt;
XY=XY-(p*q)*tt;
T=[T t];
W=[W w];
P=[P p];
Q=[Q q'];
R=[R r];
Y_g_a=X*R*Q';
X_g_a=T*P';
X_explained=[X_explained, norm(X-X_g_a)];
Y_explained=[Y_explained, norm(Y-Y_g_a)];
if i>1 & (Y_explained(i-1)-Y_explained(i)<0.1)
% break
end
pc_num=i-1;
end
beta=R(:,1:i)*Q(:,1:i)';
Y_g=X*beta;
X_g=T*P';
X_e=norm(X-T*P');
explained_rate=cal_R2_new(Y,Y_g);
% for i=1:nm
% temp1=norm(Y(:,i)-Y_g(:,i))^2;
% temp2=norm(Y(:,i)-mean(Y(:,i))*ones(nn,1))^2;
% explained_rate(i)=1-temp1/temp2;
% end
%xishu=[beta;explained_rate];
%figure
%plot(0:1:11,X_explained,':h')
%hold on
%plot(0:1:11,Y_explained,'r:h')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -