4 %You need libsvm to run
this code you can download it from http:
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];
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');
24 if any(excl_part ==part)
28 %
if the feedback record is empty the trial was missing so skip it
29 if isempty(features(part,trial).feedback)
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;
40 % self rported arousal and valence which was not used in any of the
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
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));
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,:));
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
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);
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);
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);
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);
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
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);
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);
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);
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);
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))
126 save results_taffc_mm_paper evals_expected_arousal_EEG evals_expected_valencel_EEG evals_expected_arousal_periph evals_expected_valence_periph