TEAP (Toolbox for Emotion Analysis using Physiological Signals) doc
train_and_test_mahnob.m
Go to the documentation of this file.
1 clear
2 clc
3 close all
4 %You need libsvm to run this code you can download it from http://www.csie.ntu.edu.tw/~cjlin/libsvm/
5 %excluding participants database paper
6 %excl_part = [9 12 15];
7 %excluding participants multimodal paper
8 excl_part = [ 3 9 12 15 16 26];
9 %replcea the following with the corerect feature path
10 load('mahnob_features.mat')
11 load clipCodeCoversion
12 clipValences = [1 1 3 2 2 3 3 3 2 3 1 1 1 1 2 1 2 3 2 3];
13 clipArousals = [3 3 2 3 2 2 2 1 2 2 3 2 3 2 1 3 1 3 1 3];
14 
15 emoWords = [{'Sadness'} {'Joy'} {'Disgust'} {'Neutral'} ...
16  {'Amusement'} {'Anger'} {'Fear'} {'Surprise'} {'Anxiety'}];
17 emoMapArousal = [1;2;1; 1;2;3; 3;3;3];
18 emoMapValence = [1;3;1; 2;3;1; 1;2;1];
19 addpath('machine_learning_codes/');
20 %replace the following with your libsvm path
21 addpath('libsvm-3.19/matlab');
22 ctr = 0;
23 for part = 1:30
24  if any(excl_part ==part)
25  continue
26  end
27  for trial = 1:20
28  %if the feedback record is empty the trial was missing so skip it
29  if isempty(features(part,trial).feedback)
30  continue
31  end
32  ctr = ctr+1;
33  EEG_feats(ctr,:) = features(part,trial).EEG_feats(:)';
34  periph_feats(ctr,:) = [features(part,trial).ECG_feats ...
35  features(part,trial).GSR_feats features(part,trial).RES_feats ...
36  features(part,trial).HST_feats];
37  part_vect(ctr) = part;
38  trial_vect(ctr) = trial;
39 
40  % self rported arousal and valence which was not used in any of the
41  % original articles
42  arousal_reported(ctr) = features(part,trial).feedback.felt_arousal;
43  valence_reported(ctr) = features(part,trial).feedback.felt_valence;
44  %translation of reported keywords to three levels of arousal and valence
45  %Soleymani et al. "A multimodal database for affect recognition and implicit tagging."%
46  %Affective Computing, IEEE Trans. 3.1 (2012): 42-55.
47  arousal_keyword(ctr) = emoMapArousal(strcmp(features(part,trial).feedback.felt_emotion,emoWords));
48  valence_keyword(ctr) = emoMapValence(strcmp(features(part,trial).feedback.felt_emotion,emoWords));
49  %the following labels are for
50  %Soleymani et al.
51  %"Multimodal emotion recognition in response to videos."
52  %Affective Computing, IEEE Trans. 3.2 (2012): 211-223.
53  arousal_expected(ctr) = clipArousals(clipCodesConv(part,trial));
54  valence_expected(ctr) = clipValences(clipCodesConv(part,trial));
55  end
56  %normalize per participant
57  EEG_feats(part_vect==part,:) = zscore(EEG_feats(part_vect==part,:));
58  periph_feats(part_vect==part,:) = zscore(periph_feats(part_vect==part,:));
59 
60 end
61 
62 parameters.normalize = 3;
63 parameters.nbClasses = 3;
64 parameters.grid_search = true;
65 parameters.featSelection = 'none';
66 parameters.classifier = 'SVMRbf';
67 parameters.cross_validation = 'one-participant-out';%'k-fold';%'leave-one-out';
68 if length(excl_part)==3
69 
70  %EEG cross validation arousal reported keyword
71  [estimated_self_arousal_EEG, scores_self_arousal_EEG, evals_self_arousal_EEG] = ...
72  cross_validation_module(EEG_feats, arousal_keyword, part_vect, parameters);
73 
74 
75  %EEG cross validation valence reported keyword
76  [estimated_self_valence_EEG, scores_self_valence_EEG, evals_self_valencel_EEG] = ...
77  cross_validation_module(EEG_feats, valence_keyword, part_vect, parameters);
78 
79  %Peripheral cross validation arousal reported keyword
80  [estimated_self_arousal_periph, scores_self_arousal_periph, evals_self_arousal_periph] = ...
81  cross_validation_module(periph_feats, arousal_keyword, part_vect, parameters);
82 
83  %Peripheral cross validation valence reported keyword
84  [estimated_self_valence_periph, scores_self_valence_periph, evals_self_valence_periph] = ...
85  cross_validation_module(periph_feats, valence_keyword, part_vect, parameters);
86 
87 
88  fprintf('EEG database paper eq. arousal results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
89  evals_self_arousal_EEG.classification_rate, mean(evals_self_arousal_EEG.f1s))
90  fprintf('EEG database paper eq. valence results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
91  evals_self_valencel_EEG.classification_rate, mean(evals_self_valencel_EEG.f1s))
92  fprintf('Peripheral database paper eq. arousal results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
93  evals_self_arousal_periph.classification_rate, mean(evals_self_arousal_periph.f1s))
94  fprintf('Peripheral database paper eq. valence results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
95  evals_self_valence_periph.classification_rate, mean(evals_self_valence_periph.f1s))
96  save results_dbpaper evals_self_arousal_EEG evals_self_valencel_EEG evals_self_arousal_periph evals_self_valence_periph
97 else
98  %
99  % %EEG cross validation arousal expected
100  [estimated_expected_arousal_EEG, scores_expected_arousal_EEG, evals_expected_arousal_EEG] = ...
101  cross_validation_module(EEG_feats, arousal_expected, part_vect, parameters);
102  %
103  %
104  % %EEG cross validation valence reported keyword
105  [estimated_expected_valence_EEG, scores_expected_valence_EEG, evals_expected_valencel_EEG] = ...
106  cross_validation_module(EEG_feats, valence_expected, part_vect, parameters);
107  %
108  % %Peripheral cross validation arousal reported keyword
109  [estimated_expected_arousal_periph, scores_expected_arousal_periph, evals_expected_arousal_periph] = ...
110  cross_validation_module(periph_feats, arousal_expected, part_vect, parameters);
111  %
112  % %Peripheral cross validation valence reported keyword
113  [estimated_expected_valence_periph, scores_expected_valence_periph, evals_expected_valence_periph] = ...
114  cross_validation_module(periph_feats, valence_expected, part_vect, parameters);
115 
116 
117  fprintf('EEG TAFFC multimodal paper eq.. arousal results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
118  evals_expected_arousal_EEG.classification_rate, mean(evals_expected_arousal_EEG.f1s))
119  fprintf('EEG TAFFC multimodal paper eq.. valence results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
120  evals_expected_valencel_EEG.classification_rate, mean(evals_expected_valencel_EEG.f1s))
121  fprintf('Peripheral TAFFC multimodal paper eq.. arousal results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
122  evals_expected_arousal_periph.classification_rate, mean(evals_expected_arousal_periph.f1s))
123  fprintf('Peripheral TAFFC multimodal paper eq.. valence results recognition rate = %1.3f averaged F1 = %1.3f\n', ...
124  evals_expected_valence_periph.classification_rate, mean(evals_expected_valence_periph.f1s))
125  %
126  save results_taffc_mm_paper evals_expected_arousal_EEG evals_expected_valencel_EEG evals_expected_arousal_periph evals_expected_valence_periph
127 end
128