classdef janis_ensemble_majorityVote < janis_classifier
methods (Static)
function shortName = name
shortName = 'Classifier Ensemble: Majority Vote';
end
function beVisbile = shouldBeVisible
beVisbile = false;
end
end
methods
function this = train(this,trainPatterns,trainLabels)
classifierStruct.trainPatterns = trainPatterns;
classifierStruct.trainLabels = trainLabels';
this.classifierStruct = classifierStruct;
end
function [predictions decFactors] = test(this,testPatterns)
performances = cell(size(this.classifierStruct.trainPatterns,2));
predictions = [];
for valis=1:size(this.classifierStruct.trainPatterns,2)
performances{valis} = this.classifierStruct.trainPatterns{valis}.computeForSubjects(testPatterns);
predictions = [predictions; this.classifierStruct.trainPatterns{valis}.predicted(end,:)];
end
for sub=1:size(predictions,2)
observed = unique(predictions(:,sub));
[n,bins] = hist(double(predictions(:,sub)),double(observed));
maxObs = max(n);
maxVals = bins(n==maxObs);
if isempty(maxVals) && length(observed) == 1
maxVals = observed;
end
if (size(maxVals,1)>1)
meanDec = mean(performances{end,1}.decFactors(end).decVals);
if length(meanDec) < 3
resTemp(1,sub) = int32(mean(performances{end,1}.decFactors(end).decVals) > 0);
else
[val loc] = max(meanDec);
resTemp(1,sub) = loc;
warning('Patt situation in Multiclass - decision handling extremely experimental!');
end
warning('Patt situation - will decide on decision values instead of labels');
else
resTemp(1,sub) = maxVals;
end
decFactors.decVals(sub) = mean((predictions(:,sub)-0.5)*2);
end
predictions = resTemp';
end
function classifierStruct = getClassifier(this,trainPatterns,trainLabels)
classifierStruct.trainPatterns = trainPatterns;
classifierStruct.trainLabels = trainLabels;
end
function jc = uiconfigure(this)
msgbox('Nothing to configure here.');
end
function show(this)
show@janis_classifier(this);
end
end
end