% Classifier design based on GMM vsdOpt=vsdOptSet; % ====== Load DS.mat fprintf('Loading DS.mat...\n'); load DS.mat load bestInputIndex.mat bestInputIndex=1:size(DS.input,1); % This is for HMM DS2=DS; % DS2 is DS after input selection and normalization DS2.input=DS2.input(bestInputIndex, :); % Use the selected features DS2.inputName=DS2.inputName(bestInputIndex); % Update the input names based on the selected features if vsdOpt.useInputNormalize [DS2.input, mu, sigma]=inputNormalize(DS2.input); % Input normalization end priors=classDataCount(DS2); % Take data count of each class as the class probability % ====== Down sample the training data %fprintf('Down sampling DS2...\n'); %DS2.input=DS2.input(:, 1:vsdOpt.downSampleRate:end); %DS2.output=DS2.output(:, 1:vsdOpt.downSampleRate:end); % ====== GMM classifier cvData=cvDataGen(DS2, 2); % 2-fold cross-validation DS=cvData(1).DS; TS=cvData(1).TS; count1=classDataCount(DS); count2=classDataCount(TS); vecOfGaussianNum=1:min([count1, count2]); vecOfGaussianNum=[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]; vecOfGaussianNum=2:2:30; gmmTrainPrm=gmmTrainPrmSet; gmmTrainPrm.plotOpt=1; covType=1; figure; [gmmData, recogRate1, recogRate2]=gmmcTrainEvalWrtGaussianNum(DS, TS, vecOfGaussianNum, covType, gmmTrainPrm); print -dpng gmmcTrainEvalWrtGaussianNum [maxRr, index]=max(recogRate2); line(vecOfGaussianNum(index), maxRr*100, 'marker', 'o', 'color', 'r'); fprintf('Saving gmmData...\n'); save gmmData gmmData index recogRate1 recogRate2