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

📄 plscvsim.m

📁 基于matlab编写的蚁群-偏最小二乘算法(AOC_PLS),该算法实现含变量多的数据的变量的筛选!
💻 M
字号:
%#									
%# function [RMSECV,Yhat,E]=plscvsim(X,Y,XtX,S,standard,A,nxvals)	
%#												
%# AIM:       Performs CROSS-VALIDATION of PLS model with the		
%#	      aim to determine the optimal model complexity.		
%#								
%# PRINCIPLE: PLS cross-validation using the SIMPLS algorithm.		
%#									
%# REFERENCE: S. de Jong, Chemom. Intell. Lab. Syst., 18 (1993) 251-263.
%#									
%# INPUT:								
%#  X        predictor data matrix        (n x px)   centered		
%#  Y        predictand data matrix       (n x m)    centered		
%#  XtX      X'*X booster for px<<n       (px x px) 			
%#           otherwise XtX=[]						
%#  S        X'*Y interset covariances    (px x m)          		
%#  standard 1=yes/0=no autoscaling for X                		
%#  A        max # dimensions to consider (1 x 1)   <optional>     	
%#  nxvals   # cross-validation groups    (1 x 1)   <optional>		
%#									
%# OUTPUT:								
%#  RMSECV   Root Mean Square Error of CV  (m x A)			
%#            each row corresponds to a Y-variable			
%#            each column corresponds to a model using a-components	
%#  Yhat     Predicted Y 		  (n x A*m)			
%#            each row corresponds to the i-th object			
%#            each a-th block of m-columns to Yhat predicted 	
%#                 using a-components					
%#  E        Residual matrix 		  (n x A*m)			
%#            each row corresponds to the i-th object			
%#            each a-th block of m-columns to residuals E obtained 	
%#                 for all m-responses using a-components						
%#								
%# AUTHOR:								
%#	    Sijmen de Jong, 15/6/1997					
%# 	    Unilever Research Laboratorium, Vlaardingen, The Netherlands	
%#	    Copyright (c) 1997 for ChemoAC				
%#	    Dienst FABI, Vrije Universiteit Brussel			
%#	    Laarbeeklaan 103, 1090-Brussel Jette, Belgium		
%#									
%# VERSION: 1.1 (28/02/1998)					
%#									
%# TEST:     Vita Centner						
%#									
 
function [RMSECV,Yhat,E]=plscvsim(X,Y,XtX,S,standard,A,nxvals);

% disp('SIM-PLS cross-validation')
[n,px] = size(X);                       [n,m] = size(Y); 
if nargin<7, nxvals=n; end,             nxvals = min(max(2,nxvals),n);
if nargin<6, A=15; end,                 A = min(A, n-ceil(n/nxvals)-1);
rescale = ones(px,1);
PRESS = zeros(m,A+1);      
groups = 1+rem(0:n-1,nxvals);           %groups=ceil(nxvals*(1:n)/n);
A = min(A, n-ceil(n/nxvals)-1);
E = zeros(n,m*A);
%  clc
for group=1:nxvals
%  home
%  if nxvals==n,disp(['Leave one out object ',num2str(group),' of ',num2str(nxvals)]),end
%  if nxvals~=n,disp(['Leave out deletion group ',num2str(group),' of ',num2str(nxvals)]),end
  out = find(groups==group);            in = find(groups~=group);
  nin = length(in);                     nout = n-nin;
  mXin = -ones(1,nout)*X(out,:)/nin;    mYin = -ones(1,nout)*Y(out,:)/nin;
  Sin = S-X(out,:)'*Y(out,:)-mXin'*(mYin*nin);
  Xout = X(out,:)-mXin(ones(nout,1),:);
  Yout = Y(out,:)-mYin(ones(nout,1),:); 
  if standard
    rescale = sqrt((nin-1)./(n-1-ones(1,nout)*X(out,:).^2-mXin.^2*nin))';
    Sin = rescale(:,ones(m,1)).*Sin;    
  end
  PRESS(:,1) = PRESS(:,1)+(ones(1,nout)*(Yout.^2))';
  if ~isempty(XtX)
    C = XtX-X(out,:)'*X(out,:)-mXin'*(mXin*nin);
    S0 = Sin;
  end  
  StS = Sin'*Sin; 
  V = zeros(px,A); z = zeros(m,1);
  for a = 1:A
    StS = StS-z*z'; [Q,D] = eig(StS); [d,j] = max(diag(D)); r = Sin*Q(:,j(1));
    if isempty(XtX)     
      t = X(in,:)*(rescale.*r); t = t-sum(t)/nin; 
      v = (t'*X(in,:))'.*rescale;
    else
      v = rescale.*(C*(rescale.*r)); 
    end
    if isempty(XtX), f = (t'*Y(in,:))'/(t'*t); else f = (r'*S0)'/(r'*v); end
    Yout = Yout-(Xout*(r.*rescale))*f';
    E(out,(a-1)*m+(1:m))=Yout;
    PRESS(:,a+1) = PRESS(:,a+1)+(ones(1,nout)*(Yout.^2))';
    v = v-V(:,1:max(1,a-1))*(v'*V(:,1:max(1,a-1)))';
    v = v/sqrt(v'*v); V(:,a) = v;
    z = (v'*Sin)'; Sin = Sin-v*z'; 
  end
end
Yhat=kron(ones(1,A),Y-ones(n,1)*mean(Y))-E;
RMSECV=sqrt(PRESS(:,2:A+1)./n);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -