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));