Mercurial > hg > emotion-detection-top-level
diff Code/Classifiers/kmeans_Singing.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/kmeans_Singing.m Wed Feb 13 11:02:39 2013 +0000 @@ -0,0 +1,135 @@ +function [] = kmeans_Singing( inputFileName ) + +cd 'C:\Users\dawn\Dropbox\TestResults' +inputFileName + +DEBUG = 1; +% output results file name +outputFileName = ['kmeans_' inputFileName]; +masterFileOutputID = fopen( outputFileName, 'a' ); + +fprintf( masterFileOutputID, '\n RESULTS FILE NAME: %s\n', inputFileName); +inputFileID = fopen( inputFileName ); + +titleName = ''; + +fprintf( masterFileOutputID, '\t' ); + +% -------------------- get the data from the results file --------------- + +lineCount = 0; +fileCount = 0; +data = []; +while( ~(feof(inputFileID)) ) + + outputValues = []; + thestr = fgetl(inputFileID); + fileCount = fileCount + 1; + + % determine whether we have a positive or negative sample + sampleEmotion( fileCount ) = 'U'; + if( ~(isempty(strfind(thestr,'pos')))) + % sample is positive + sampleEmotion( fileCount ) = 'P'; + elseif( ~(isempty(strfind(thestr,'neg')))) + % sample is negative + sampleEmotion( fileCount ) = 'N'; + else + disp('EEEK!'); + fileCount = fileCount - 1; +% pause; + end + + % determine whether we have a male, female or trans sample +% gender( fileCount ) = '?'; +% if( ~(isempty(strfind(thestr,'fem')))) +% % gender is female +% gender( fileCount ) = 'F'; +% elseif( ~(isempty(strfind(thestr,'male')))) +% % gender is male +% gender( fileCount ) = 'M'; +% elseif( ~(isempty(strfind(thestr,'trans')))) +% % gender is trans +% gender( fileCount ) = 'T'; +% else +% disp('EEEK!'); +% pause; +% end + + if(( ~(isempty(strfind(thestr,'pos')))) || ( ~(isempty(strfind(thestr,'neg')))) ) + %how many values are in the string? +% spaces = strfind( thestr, ' ' ); + spaces = [ strfind( thestr, sprintf('\t')) strfind( thestr, ' ' )]; + numberstr = thestr( spaces(1) : end ); % chop off the file name + vars = sscanf( numberstr, '%f', inf ); + data( fileCount, : ) = vars; + end + lineCount = lineCount + 1; + +end +fclose(inputFileID); + +% ------------ apply the k-means classifier ------------------------ + +noOfClusters = 2; % we are only trying to identify positive and negative emotions + + +[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... + 'start', 'sample', 'Distance', 'cityblock'); + +%display results grouped by emotion +fprintf( masterFileOutputID, '\n Emotion grouping \n'); +fprintf( masterFileOutputID, 'cityblock \n'); +[ groupStats, groupNames ] = processKMeansResults( 'cityblock', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID, 'cityblock' ); + + +fprintf( masterFileOutputID, 'sqEuclidean \n'); +[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... + 'start', 'sample', 'Distance', 'sqEuclidean'); + +[ groupStats, groupNames ] = processKMeansResults( 'sqEuclidean', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID, 'sqEuclidean' ); + + +fprintf( masterFileOutputID, 'cosine \n'); +[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... + 'start', 'sample', 'Distance', 'cosine'); + +[ groupStats, groupNames ] = processKMeansResults( 'cosine', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID, 'cosine' ); + + +fprintf( masterFileOutputID, 'correlation \n'); +[idx ctrs]=kmeans( data, noOfClusters, 'Replicates',100,... + 'start', 'sample', 'Distance', 'correlation'); + +[ groupStats, groupNames ] = processKMeansResults( 'correlation', idx, sampleEmotion, masterFileOutputID, titleName, DEBUG ); +[ confusionMatrix ] = getConfusionMatrix( groupStats, groupNames, masterFileOutputID, 'correlation' ); + +% -------------------------------------------------------------------- + +% 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 ); + +fprintf( masterFileOutputID, '\n' ); +fclose( masterFileOutputID ); + +end + +