📄 dualpls.m
字号:
function [alpha,testY,varargout] = dualpls(K,Ktest,Y,T,varargin)%function [alpha,testY,varargout] = dualpls(K,Y,Ytest,T,varargin)%% Performs dual (kernel) PLS discrimination%%INPUTS% K = the training kernel matrix% Ktest = the kernel matrix (dimension ell x elltest)% Y = the training label matrix (ell x m)% T = the number of PLS components to take% varargin = optional argument specifying the true test label matrix% of size elltest x m, if %%OUTPUTs% alpha = the dual vectors corresponding to the PLS classfier% testY = the estimated label matrix for the test samples% varargout = the test error, optional when varargin is specified (the% true test labels)%%%For more info, see www.kernel-methods.net%%Note: this code has not been tested extensively.% K is an ell x ell kernel matrix% Y is ell x m containing the corresponding output vectors% T gives the number of iterations to be performedell=size(K,1);trainY=0;KK = K; YY = Y;for i=1:T YYK = YY*YY'*KK; beta(:,i) = YY(:,1)/norm(YY(:,1)); if size(YY,2) > 1, % only loop if dimension greater than 1 bold = beta(:,i) + 1; while norm(beta(:,i) - bold) > 0.001, bold = beta(:,i); tbeta = YYK*beta(:,i); beta(:,i) = tbeta/norm(tbeta); end end tau(:,i) = KK*beta(:,i); val = tau(:,i)'*tau(:,i); c(:,i) = YY'*tau(:,i)/val; trainY = trainY + tau(:,i)*c(:,i)'; trainerror = norm(Y - trainY,'fro')/sqrt(ell); w = KK*tau(:,i)/val; KK = KK - tau(:,i)*w' - w*tau(:,i)' + tau(:,i)*tau(:,i)'*(tau(:,i)'*w)/val; YY = YY - tau(:,i)*c(:,i)';end% Regression coefficients for new dataalpha = beta * ((tau'*K*beta)\tau')*Y;% Ktest gives new data inner products as rows, Ytest true outputselltest = size(Ktest',1);testY = Ktest' * alpha;if ~isempty(varargin) Ytest = varargin{1}; testerror = norm(Ytest - testY,'fro')/sqrt(elltest) varargout = testerror;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -