Home > demo2 > xvalidation.m

xvalidation

PURPOSE ^

SYNOPSIS ^

function [Am, As, divTr, divTe, output, memo]=xvalidation(X, Y, model,lambda, nTrials, varargin)

DESCRIPTION ^

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 function [Am, As, divTr, divTe, output, memo]=xvalidation(X, Y, model, ...
0002                                                   lambda, nTrials, varargin)
0003 
0004 opt=propertylist2struct(varargin{:});
0005 opt=set_defaults(opt, 'preproc', 'meandiffs');
0006 
0007 
0008 [divTr,divTe]=sample_divisions(Y,nTrials);
0009 
0010 if isequal(unique(Y),[0 1])
0011   Y=2*Y-1;
0012 end
0013 
0014 if size(Y,1)<size(Y,2)
0015   Y=Y';
0016 end
0017 
0018 A=zeros([nTrials, length(lambda)]);
0019 
0020 memo=repmat(struct('C',[],'out',[],'acc',[]),...
0021             [nTrials,length(lambda)]);
0022 
0023 output=zeros(nTrials(1),length(Y),length(lambda));
0024 
0025 for ii=1:nTrials(1)
0026   for jj=1:nTrials(2)
0027     fcn_preproc=['preproc_' opt.preproc];
0028     [Ftr,optproc]=feval(fcn_preproc, X(divTr{ii,jj}), X(divTr{ii,jj}),opt);
0029     Ytr=Y(divTr{ii,jj});
0030     
0031     Fte=feval(fcn_preproc,X(divTr{ii,jj}),X(divTe{ii,jj}),optproc);
0032     Yte=Y(divTe{ii,jj});
0033     
0034     for kk=1:length(lambda)
0035       fprintf('Fold:%d of Split:%d lambda=%g\n', jj, ii, lambda(kk));
0036       C=feval(['train_' model], Ftr, Ytr, lambda(kk));
0037       out=feval(['apply_' model], C, Fte);
0038       acc=mean(Yte(:).*out>0);
0039       
0040       A(ii,jj,kk)=acc;
0041       memo(ii,jj,kk)=struct('C',C,...
0042                             'out',out,...
0043                             'acc',acc);
0044       output(ii,divTe{ii,jj},kk)=out;
0045     end
0046   end
0047 end
0048 
0049 Am=mean(A,2);
0050 As=shiftdim(std(Am,[],1));
0051 Am=shiftdim(mean(Am,1));

Generated on Sat 22-Aug-2009 22:15:36 by m2html © 2003