Mercurial > hg > emotion-detection-top-level
diff Code/Classifiers/kmeans_PRAAT_Singing.m @ 4:92ca03a8fa99 tip
Update to ICASSP 2013 benchmark
author | Dawn Black |
---|---|
date | Wed, 13 Feb 2013 11:02:39 +0000 |
parents | 5fd388fdd6ef |
children |
line wrap: on
line diff
--- a/Code/Classifiers/kmeans_PRAAT_Singing.m Mon Sep 10 09:20:12 2012 +0100 +++ b/Code/Classifiers/kmeans_PRAAT_Singing.m Wed Feb 13 11:02:39 2013 +0000 @@ -1,9 +1,10 @@ -function [] = kmeans_Singing( varargin ) +function [] = kmeans_PRAAT_Singing( varargin ) cd 'C:\Users\dawn\Dropbox\TestResults' +DEBUG = 0; % output results file name -masterFileOutputID = fopen( 'kmeans_Singing_All.txt', 'a' ); +masterFileOutputID = fopen( 'kmeans_Singing_PRAAT.txt', 'a' ); % input results file name inputFileName = 'singingPRAATStats.txt'; @@ -273,7 +274,7 @@ columnIndices = []; getBURGFormants = 0; -getAllForamnts=0; +getAllFormants=0; getRobustFormants=0; for i=1 : noOfArguments @@ -298,15 +299,15 @@ elseif( strcmp( varargin{i}, 'formant_Burg' )) getBURGFormants = 1; elseif( strcmp( varargin{i}, 'formant_all' )) - getAllForamnts=1; + getAllFormants=1; elseif( strcmp( varargin{i}, 'formant_robust' )) getRobustFormants=1; end end -outputFileName = 'individualResults/kmeans_Results_'; -resultsFileName = 'kmeans_Results_'; +% outputFileName = 'individualResults/kmeans_Results_'; +% resultsFileName = 'kmeans_Results_'; titleName = ''; for i=1 : noOfArguments % outputFileName = [ outputFileName varargin{i} '_']; @@ -316,16 +317,16 @@ end % titleName = outputFileName; -outputFileName = [ outputFileName titleName ]; -resultsFileName = [ resultsFileName titleName ]; +% outputFileName = [ outputFileName titleName ]; +% resultsFileName = [ resultsFileName titleName ]; fprintf( masterFileOutputID, '\t' ); -outputFileName = [ outputFileName '.txt']; -resultsFileName = [ resultsFileName '.txt']; +% outputFileName = [ outputFileName '.txt']; +% resultsFileName = [ resultsFileName '.txt']; -fileOutputID = fopen( outputFileName, 'w' ); -fileKMeansOutputID = fopen( resultsFileName, 'w' ); +% fileOutputID = fopen( outputFileName, 'w' ); +% fileKMeansOutputID = fopen( resultsFileName, 'w' ); % -------------------- get the data from the results file --------------- lineCount = 0; @@ -390,7 +391,7 @@ outputValues = stripOutFormantValues( vars, outputValues ); end - if( getAllForamnts ) + if( getAllFormants ) spaces = strfind( str3, ' ' ); % remove the string 'maxNoOfFormants' vars = sscanf( str3( spaces(1) : end ), '%f', inf ); outputValues = stripOutFormantValues( vars, outputValues ); @@ -419,33 +420,6 @@ end fclose(inputFileID); -%individual examination of the metrics does confirm that there is little -%difference in emotional content. However, singer identification is OK. - -% figure(2); subplot(211); hold off; -% -% for( i = 1 : length(data) ) -% if( sampleEmotion(i) == 'N') -% plot( i, data(i), 'b.' ); -% else -% plot( i, data(i), 'r.' ); -% end -% hold on; -% end -% -% subplot(212); hold off; -% -% for( i = 1 : length(data) ) -% if( gender(i) == 'M') -% plot( i, data(i), 'b.' ); -% elseif( gender(i) == 'F') -% plot( i, data(i), 'r.' ); -% else -% plot( i, data(i), 'g.' ); -% end -% hold on; -% end - % ------------ apply the k-means classifier ------------------------ noOfClusters = 2; % we are only trying to identify positive and negative emotions @@ -455,61 +429,55 @@ 'start', 'sample', 'Distance', 'cityblock'); %display results grouped by emotion -processKMeansResults( 'cityblock', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); +fprintf( masterFileOutputID, '\n Emotion grouping \n'); +fprintf( masterFileOutputID, 'cityblock \n'); +[ groupStats, groupNames ] = processKMeansResults( 'cityblock', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID ); -disp('press space'); -pause; +fprintf( masterFileOutputID, 'sqEuclidean \n'); [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... 'start', 'sample', 'Distance', 'sqEuclidean'); -processKMeansResults( 'sqEuclidean', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); +[ groupStats, groupNames ] = processKMeansResults( 'sqEuclidean', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID ); -disp('press space'); -pause; +% ------------ +% % display results grouped by gender +% fprintf( masterFileOutputID, '\n Gender grouping \n'); +% noOfClusters = 3; +% +% [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... +% 'start', 'sample', 'Distance', 'cityblock'); +% +% fprintf( masterFileOutputID, 'cityblock \n'); +% [ groupStats, groupNames ] = processKMeansResults( 'cityblock', idx, gender, masterFileOutputID, titleName, DEBUG ); +% [ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID ); +% +% [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... +% 'start', 'sample', 'Distance', 'sqEuclidean'); +% +% fprintf( masterFileOutputID, 'sqEuclidean \n'); +% [ groupStats, groupNames ] = processKMeansResults( 'sqEuclidean', idx, gender, masterFileOutputID, titleName, DEBUG ); +% [ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID ); +% +% -%display results grouped by gender +% +% % [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... +% % 'start', 'sample', 'Distance', 'cosine'); +% % +% % processKMeansResults( 'cosine', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName); +% % +% % disp('press space'); +% % pause; +% +% % [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... +% % 'start', 'sample', 'Distance', 'correlation'); +% % +% % processKMeansResults( 'correlation', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); -noOfClusters = 3; - -[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... - 'start', 'sample', 'Distance', 'cityblock'); - -processKMeansResults( 'cityblock', idx, gender, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); - -disp('press space'); -pause; - -[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... - 'start', 'sample', 'Distance', 'sqEuclidean'); - -processKMeansResults( 'sqEuclidean', idx, gender, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); - -disp('press space'); -pause; - - -% [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... -% 'start', 'sample', 'Distance', 'cosine'); -% -% processKMeansResults( 'cosine', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName); -% -% disp('press space'); -% pause; - -% [idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... -% 'start', 'sample', 'Distance', 'correlation'); -% -% processKMeansResults( 'correlation', idx, sampleEmotion, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ); -% -% disp('press space'); -% pause; - -fprintf( fileOutputID, '\n' ); -fclose( fileOutputID ); -fprintf( fileKMeansOutputID, '\n' ); -fclose( fileKMeansOutputID ); fprintf( masterFileOutputID, '\n' ); fclose( masterFileOutputID ); @@ -533,41 +501,3 @@ end %------------------------------------------------------------------- - -function [] = processKMeansResults( ID, idx, groupingCriteria, fileOutputID, fileKMeansOutputID, masterFileOutputID, titleName ) - - fprintf( fileKMeansOutputID, '%s\t', ID ); - fprintf( masterFileOutputID, '%s\t', ID ); - - if( length( idx ) ~= length( groupingCriteria ) ) - disp('EEEK!'); - pause; - end - - groupIDs = ''; - groupStr = ''; - for( i = 1 : length( idx )) - fprintf( fileOutputID, '%s \t %d \n', groupingCriteria(i), idx(i) ); - gID = [ groupingCriteria(i) num2str( idx(i) )]; - groupIDs = [ groupIDs ; gID ]; - groupStr = [ groupStr gID ]; - end - - % ------------- work out the confusion matrix ------------------------- - - groups = unique( groupIDs, 'rows' ); - noOfGroups = length( groups ); - orderedGroups = sort(cellstr(groups)); - groupStats = []; - for( i = 1 : noOfGroups ) - groupStats(i) = ((length( strfind( groupStr, char(orderedGroups(i)))))/length( idx ) ) * 100; - fprintf( fileKMeansOutputID, '%s \t %f \t', char(orderedGroups(i)), groupStats(i) ); - fprintf( masterFileOutputID, '%s \t %f \t', char(orderedGroups(i)), groupStats(i) ); - end - - figure(1); - bar( groupStats ); - set( gca, 'XTickLabel', orderedGroups ); - title([ titleName ' ' ID]); - -end \ No newline at end of file