next up previous contents
Next: mb_knnbestk.m Up: k-Nearest Neighbor Classifier Previous: k-Nearest Neighbor Classifier

mb_knntrainpicktest.m

 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 



Copyright ©1999 Michael V. Boland
1999-09-18