Mercurial > hg > aasp-d-case-metrics
view scene_classification/sceneClassificationMetrics_eval.m @ 5:1f977a3aab1a
overall confusion matrix: check for rowsum equality; and format cm as rounded percentages
author | Dan Stowell <dan.stowell@elec.qmul.ac.uk> |
---|---|
date | Mon, 13 May 2013 14:42:31 +0100 |
parents | dcaf371d33e3 |
children |
line wrap: on
line source
function [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(numfolds, foldsGTlist, foldstestlist) % Function takes as input a number of folds (numfolds), a text file % containing a list of filenames with the ground truth per fold (foldsGTlist), % and a text file containing a list of filenames with the classification % output (foldstestlist) % % e.g. [confusionMat, AccFolds, Acc, Std] = sceneClassificationMetrics_eval(5, 'foldGTlist.txt', 'foldtestlist.txt'); % Initialize classList = {'bus','busystreet','office','openairmarket','park','quietstreet','restaurant','supermarket','tube','tubestation'}; confusionMat = zeros(10,10); AccFolds = zeros(1,numfolds); % For each fold fid1 = fopen(foldsGTlist,'r'); fid2 = fopen(foldstestlist,'r'); for i=1:numfolds % Load classification output and ground truth tline1 = fgetl(fid1); [fileIDGT,classIDGT] = loadClassificationOutput(tline1); tline2 = fgetl(fid2); [fileID,classID] = loadClassificationOutput(tline2); % Compute confusion matrix per fold confusionMatTemp = zeros(10,10); for j=1:length(classIDGT) pos = strmatch(fileIDGT{j}, fileID, 'exact'); posClassGT = strmatch(classIDGT{j}, classList, 'exact'); posClass = strmatch(classID{pos}, classList, 'exact'); confusionMatTemp(posClassGT,posClass) = confusionMatTemp(posClassGT,posClass) + 1; end % Compute accuracy per fold AccFolds(i) = sum(diag(confusionMatTemp))/sum(sum(confusionMatTemp)); confusionMat = confusionMat + confusionMatTemp; end fclose(fid1); fclose(fid2); % Compute global accuracy and std Acc = mean(AccFolds); Std = std(AccFolds);