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