Mercurial > hg > emotion-detection-top-level
diff Code/Classifiers/getConfusionMatrix.m @ 4:92ca03a8fa99 tip
Update to ICASSP 2013 benchmark
author | Dawn Black |
---|---|
date | Wed, 13 Feb 2013 11:02:39 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Code/Classifiers/getConfusionMatrix.m Wed Feb 13 11:02:39 2013 +0000 @@ -0,0 +1,828 @@ +function [ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames,... + masterFileOutputID, distanceMeasure ) + + groupNames = char(groupNames); + + % for emotion detection give the confusion matrix as + % ----------------------------------------------------------------- + % positive correctly identified | positive incorrectly identified (1,2) + % negative incorrectly identified (2,1) | negative correctly identified + % ------------------------------------------------------------------ + % which group has the most samples? + [maxValue, maxIndex] = max( groupStats ); + maxGroup = groupNames( maxIndex,: ); + + % if we are performing emotion detection + if( ~isempty(strfind( groupNames(1,:), 'N' )) ... + || ~isempty(strfind( groupNames(1,:), 'P' ))) + confusionMatrix = zeros(2,2); + + % check groups for any missing + if( length(groupStats) < 4 ) + % find the missing group + if( groupFind( groupNames, 'N1' ) == 0 ) + % missing N1 + groupNames = [groupNames; 'N1']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'N2' ) == 0 ) + % missing N2 + groupNames = [groupNames; 'N2']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'P1' ) == 0 ) + % missing P1 + groupNames = [groupNames; 'P1']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'P2' ) == 0 ) + %missing P2 + groupNames = [groupNames; 'P2']; + groupStats = [groupStats 0]; + end + end + % let the group with the maximum success (either 1 or 2) be the + % cluster for that emotion + if( strfind( maxGroup, 'N' )) + % negative samples were detected most reliably + confusionMatrix(2,2) = maxValue; + if( strfind( maxGroup, '1' )) + % group 1 is the negative group + % find the number of positive samples incorrectly identified + idx = groupFind( groupNames, 'P1' ); + confusionMatrix(1,2) = groupStats( idx ); + % group 2 is the positive group + % find the number of positive samples correctly identified + idx = groupFind( groupNames, 'P2' ); + confusionMatrix(1,1) = groupStats( idx ); + % find the number of negative samples incorrectly identified + idx = groupFind( groupNames, 'N2' ); + confusionMatrix(2,1) = groupStats( idx ); + else + % group 2 is the negative group + % find the number of positive samples incorrectly identified + idx = groupFind( groupNames, 'P2' ); + confusionMatrix(1,2) = groupStats( idx ); + % group 1 is the positive group + % find the number of positive samples correctly identified + idx = groupFind( groupNames, 'P1' ); + confusionMatrix(1,1) = groupStats( idx ); + % find the number of negative samples incorrectly identified + idx = groupFind( groupNames, 'N1' ); + confusionMatrix(2,1) = groupStats( idx ); + end + else + % positive samples were detected most reliably + confusionMatrix(1,1) = maxValue; + if( strfind( maxGroup, '1' )) + % group 1 is the positive group + % find the number of positive samples incorrectly identified + idx = groupFind( groupNames, 'P2' ); + confusionMatrix(1,2) = groupStats( idx ); + % group 2 is the negative group + % find the number of negative samples correctly identified + idx = groupFind( groupNames, 'N2' ); + confusionMatrix(2,2) = groupStats( idx ); + % find the number of negative samples incorrectly identified + idx = groupFind( groupNames, 'N1' ); + confusionMatrix(2,1) = groupStats( idx ); + else + % group 2 is the positive group + % find the number of positive samples incorrectly identified + idx = groupFind( groupNames, 'P1' ); + confusionMatrix(1,2) = groupStats( idx ); + % group 1 is the negative group + % find the number of negative samples correctly identified + idx = groupFind( groupNames, 'N1' ); + confusionMatrix(2,2) = groupStats( idx ); + % find the number of negative samples incorrectly identified + idx = groupFind( groupNames, 'N2' ); + confusionMatrix(2,1) = groupStats( idx ); + end + end + + confusionMatrix(3,3) = confusionMatrix(1,1) + confusionMatrix(2,2); + disp(distanceMeasure); + % print latex results to the screen + str1 = sprintf(' & %2.2f & %2.2f & \\\\', confusionMatrix(1,1), confusionMatrix(1,2) ); + disp(str1); + str1 = sprintf(' & %2.2f & %2.2f & \\\\', confusionMatrix(2,1), confusionMatrix(2,2) ); + disp(str1); + str1 = sprintf(' & & & %2.2f \\\\',confusionMatrix(3,3) ); + disp(str1); + disp(' '); + + fprintf( masterFileOutputID, '\n %f \t %f \n %f \t %f \n %f \t %f \t %f \n', confusionMatrix(1,1), confusionMatrix(1,2), confusionMatrix(2,1), confusionMatrix(2,2), 0, 0, confusionMatrix(3,3)); + end + + % for gender detection give the confusion matrix as + % -------------------------------------------------------------------- + % male correctly identified as male | male incorrectly identified as female | male incorrectly identified as trans + % female incorrectly identified as male | female correctly identified | female incorrectly identified as trans + % trans incorrectly identified as male | trans incorrectly identified as female | trans correctly identified + % -------------------------------------------------------------------- + + % if we are performing gender detection + if( ~isempty(strfind( groupNames(1,:), 'F' )) ... + || ~isempty(strfind( groupNames(1,:), 'M' ))... + || ~isempty(strfind( groupNames(1,:), 'T' ))) + confusionMatrix = zeros(3,3); + + % check groups for any missing + if( length(groupStats) < 9 ) + % find the missing group + if( groupFind( groupNames, 'M1' ) == 0 ) + groupNames = [groupNames; 'M1']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'M2' ) == 0 ) + groupNames = [groupNames; 'M2']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'M3' ) == 0 ) + groupNames = [groupNames; 'M3']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'F1' ) == 0 ) + groupNames = [groupNames; 'F1']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'F2' ) == 0 ) + groupNames = [groupNames; 'F2']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'F3' ) == 0 ) + groupNames = [groupNames; 'F3']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'T1' ) == 0 ) + groupNames = [groupNames; 'T1']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'T2' ) == 0 ) + groupNames = [groupNames; 'T2']; + groupStats = [groupStats 0]; + end + if( groupFind( groupNames, 'T3' ) == 0 ) + groupNames = [groupNames; 'T3']; + groupStats = [groupStats 0]; + end + + end + + + % let the group with the maximum success (either 1, 2 or 3) be the + % cluster for that gender + if( strfind( maxGroup, 'M' )) + % male samples were detected most reliably + confusionMatrix(1,1) = maxValue; + if( strfind( maxGroup, '1' )) + % group 1 is the male group + % find the female group (F2 or F3, can't be F1) + idx1 = groupFind( groupNames, 'F2' ); + idx2 = groupFind( groupNames, 'F3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % group 1 is the male group + % female is group 2 and trans group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 3 and trans is group 2 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + + elseif( strfind( maxGroup, '2' )) + % group 2 is the male group + + % find the female group (F1 or F3, can't be F2) + idx1 = groupFind( groupNames, 'F1' ); + idx2 = groupFind( groupNames, 'F3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % female is group 1 and trans group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 3 and trans is group 1 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + else + % group 3 is the male group + + % find the female group (F1 or F2, can't be F3) + idx1 = groupFind( groupNames, 'F1' ); + idx2 = groupFind( groupNames, 'F2' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % female is group 1 and trans group 2 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 2 and trans is group 1 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + end + + % -------------------------------------------------------------------- + % male correctly identified as male (1,1) | male incorrectly identified as female (1,2) | male incorrectly identified as trans + % female incorrectly identified as male (2,1) | female correctly identified (2,2) | female incorrectly identified as trans + % trans incorrectly identified as male (3,1) | trans incorrectly identified as female (3,2) | trans correctly identified (3,3) + % -------------------------------------------------------------------- + + elseif( strfind( maxGroup, 'F' )) + % female samples were detected most reliably + confusionMatrix(2,2) = maxValue; + if( strfind( maxGroup, '1' )) + % group 1 is the female group + % find the male group (F2 or F3, can't be F1) + idx1 = groupFind( groupNames, 'M2' ); + idx2 = groupFind( groupNames, 'M3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % male is group 2 and trans group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 1 + % male is group 3 and trans is group 2 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + + elseif( strfind( maxGroup, '2' )) + % group 2 is the female group + % find the male group (M1 or M3, can't be M2) + idx1 = groupFind( groupNames, 'M1' ); + idx2 = groupFind( groupNames, 'M3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % male is group 1 and trans group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % group 2 is the female group + % male is group 3 and trans is group 1 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + else + % group 3 is the female group + % find the male group (M1 or M2, can't be M3) + idx1 = groupFind( groupNames, 'M1' ); + idx2 = groupFind( groupNames, 'M2' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % male is group 1 and trans group 2 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 3 + % male is group 2 and trans is group 1 + + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,3) = groupStats( idx ); + + % trans correctly identified as trans + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,3) = groupStats( idx ); + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + end + % -------------------------------------------------------------------- + % male correctly identified as male (1,1) | male incorrectly identified as female (1,2) | male incorrectly identified as trans + % female incorrectly identified as male (2,1) | female correctly identified (2,2) | female incorrectly identified as trans + % trans incorrectly identified as male (3,1) | trans incorrectly identified as female (3,2) | trans correctly identified (3,3) + % -------------------------------------------------------------------- + + elseif( strfind( maxGroup, 'T' )) + % trans samples were detected most reliably + confusionMatrix(3,3) = maxValue; + if( strfind( maxGroup, '1' )) + % group 1 is the trans group + % find the female group (F2 or F3, can't be F1) + idx1 = groupFind( groupNames, 'F2' ); + idx2 = groupFind( groupNames, 'F3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % female is group 2 and male group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % female is group 3 and male is group 2 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + end + + elseif( strfind( maxGroup, '2' )) + % group 2 is the trans group + % find the female group (F1 or F3, can't be F2) + idx1 = groupFind( groupNames, 'F1' ); + idx2 = groupFind( groupNames, 'F3' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % female is group 1 and male group 3 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % group 2 is the trans group + % female is group 3 and male is group 1 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T3' ); + confusionMatrix(3,2) = groupStats( idx ); + + end + + else + % group 3 is the trans group + % find the female group (F1 or F2, can't be F3) + idx1 = groupFind( groupNames, 'F1' ); + idx2 = groupFind( groupNames, 'F2' ); + if( groupStats( idx1 ) > groupStats( idx2 ) ) + % female is group 1 and male group 2 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,2) = groupStats( idx ); + + else + % group 3 is the trans group + % female is group 2 and male is group 1 + % find the number of male samples incorrectly identified as female + idx = groupFind( groupNames, 'M2' ); + confusionMatrix(1,2) = groupStats( idx ); + % find the number of male samples incorrectly identified as trans + idx = groupFind( groupNames, 'M3' ); + confusionMatrix(1,3) = groupStats( idx ); + % male correctly identified as male + idx = groupFind( groupNames, 'M1' ); + confusionMatrix(1,1) = groupStats( idx ); + + % female correctly identified as female + idx = groupFind( groupNames, 'F2' ); + confusionMatrix(2,2) = groupStats( idx ); + % female incorrectly identified as male + idx = groupFind( groupNames, 'F1' ); + confusionMatrix(2,1) = groupStats( idx ); + % female incorrectly identified as trans + idx = groupFind( groupNames, 'F3' ); + confusionMatrix(1,3) = groupStats( idx ); + + % trans incorrectly identified as male + idx = groupFind( groupNames, 'T1' ); + confusionMatrix(3,1) = groupStats( idx ); + % trans incorrectly identified as female + idx = groupFind( groupNames, 'T2' ); + confusionMatrix(3,2) = groupStats( idx ); + end + + end + end + + confusionMatrix(4,4) = confusionMatrix(1,1) + confusionMatrix(2,2) + confusionMatrix(3,3); + disp(distanceMeasure); + % print latex results to the screen + str1 = sprintf(' & %2.2f & %2.2f & %2.2f & \\\\', confusionMatrix(1,1), confusionMatrix(1,2), confusionMatrix(1,3) ); + disp(str1); + str1 = sprintf(' & %2.2f & %2.2f & %2.2f & \\\\', confusionMatrix(2,1), confusionMatrix(2,2), confusionMatrix(2,3) ); + disp(str1); + str1 = sprintf(' & & & & %2.2f \\\\',confusionMatrix(4,4) ); + disp(str1); + disp(' '); + + fprintf( masterFileOutputID, '\n %f \t %f \t %f \n %f \t %f \t %f \n %f \t %f \t %f \n %f \t %f \t %f \t %f \n', confusionMatrix(1,1), confusionMatrix(1,2), confusionMatrix(1,3), confusionMatrix(2,1), confusionMatrix(2,2), confusionMatrix(2,3), confusionMatrix(3,1), confusionMatrix(3,2), confusionMatrix(3,3), 0, 0, 0, confusionMatrix(4,4)); + end + + + +end + +function [idx] = groupFind( groupNames, str ) + + idx = 0; + for( i=1: length( groupNames ) ) + if( ~isempty(strfind( groupNames(i,:), str(1) )) && ~isempty(strfind( groupNames(i,:), str(2) ))) + idx = i; + end + end +end \ No newline at end of file