⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel_pls.m

📁 Matlab编写的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 + -