function[knntrials,trainidx,pickidx,testidx,bestk]= mb_knntrainpicktest(features,classes,trainsize, picksize,permutations,tryk) % MB_KNNTRAINPICKTEST - Train/pick/test a kNN classifier % % [KNNTRIALS TRAINIDX PICKIDX TESTIDX BESTK] = ... % MB_KNNTRAINPICKTEST(FEATURES,CLASSES,TRAINSIZE,PICKSIZE,... % PERMUTATIONS,TRYK) % % Outputs: % KNNTRIALS % TRAINIDX - {N}x{N} cell array of random indices used to indicate % training samples % PICKIDX - {C}x{N} cell array of random indices for pick samples % TESTIDX - {C}x{N} cell array of random indices for test samples % BESTK - a vector of the best values of k for each permutation % % Inputs: % FEATURES - 1xC cell array of features (C=number of classes) % CLASSES - 1xC cell array of classes (one-of-N format) % TRAINSIZE - number of training samples per permutation % PICKSIZE - number of pick samples per permutation % PERMUTATIONS - number of networks to train % TRYK - vector of velues to try for K % % % M. Boland - 13 Apr 1999 % $Id: mb_knntrainpicktest.m_tmp,v 1.1 1999/06/26 14:16:36 boland Exp $ if (~iscell(features) | ~iscell(classes)), error('FEATURES and CLASSES must be cell arrays.') ; end if ((length(features)~=length(classes))) error('FEATURES and CLASSES must have the same number of elements') ; end % % Reset the random number generator rand('state',0) ; % % Number of classes numc = length(features) ; for i = 1:permutations, clear idx ; trainin = [] ; pickin = [] ; testin = [] ; trainclass = [] ; pickclass = [] ; testclass = [] ; % % Generate train/pick/test data for each class (j) for each network (i) for j = 1:numc, % % new random indices for each class idx{j} = randperm(size(features{j},1)) ; % % Save the indices so that we know which samples were placed in which % category (train/pick/test) trainidx{j}{i} = idx{j}(1:trainsize) ; pickidx{j}{i} = idx{j}(trainsize+1:trainsize+picksize) ; testidx{j}{i} = idx{j}(trainsize+picksize+1:end) ; trainin = [trainin ; features{j}(idx{j}(1:trainsize),:)] ; pickin = [pickin ; features{j}(... idx{j}(trainsize+1:trainsize+picksize),:)]; testin = [testin ; features{j}(... idx{j}(trainsize+picksize+1:end),:)] ; trainclass = [trainclass ; classes{j}(idx{j}(1:trainsize),:)] ; pickclass = [pickclass ; classes{j}(... idx{j}(trainsize+1:trainsize+picksize),:)]; testclass = [testclass ; classes{j}(... idx{j}(trainsize+picksize+1:end),:)] ; end % % Normalize the input features [trainnorm picknorm] = mb_featurenorm(trainin,pickin) ; [trainnorm testnorm] = mb_featurenorm(trainin,testin) ; % % Choose the best k for this permutation bestk(i) = mb_knnbestk(trainnorm,trainclass,picknorm,pickclass,tryk) ; % % Use mb_mlptraintest for each train/pick pair [knntrials{i}.cmat knntrials{i}.crate knntrials{i}.missed ... knntrials{i}.info] = ... mb_knn(trainnorm,trainclass,testnorm,testclass,bestk(i)) ; end>>>>
>>