-
Notifications
You must be signed in to change notification settings - Fork 0
/
teste_emo.m
95 lines (71 loc) · 2.68 KB
/
teste_emo.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
%{
Determina a taxa de falsa rejeição (FAR) e de falsa aceitação (FAR).
res = Mat. de resultados (MxN), M = Núm. de locuções. N = Núm. de emoções;
frr, far = taxa de falsa rejeição (FAR) e de falsa aceitação (FRR).
%}
function [frr, far, min_erro] = teste_emo(res)
intervalo = 0.01;
emo_col = ['F','A','N','T','E','L','W']; % Determina as emoções a serem buscadas.
% Determina os valores mín. e max. para serem utilizados no cálculo do erro.
ini = min(res(:)); fim = max(res(:));
% Inicializa os vetores de FRR e FAR.
frr = zeros(1, length(ini:intervalo:fim));
far = zeros(1, length(ini:intervalo:fim));
j = 1;
% Laço for para obter os erros para cada valor da verossimilhança.
for i = ini:intervalo:fim
[far(j), frr(j)] = teste_loc_lim(res,i);
j = j+1;
end
% Plot dos FAR e FRR para cada valor de verossimilhança.
t = ini:intervalo:fim;
vet = far == frr;
idx = find(vet == 1);
if ~isempty(idx)
idx = idx(1);
idx_rescale = round(re_scale(idx,(1:length(far)),t));
min_erro = far(idx);
subplot(211);
plot(t,far,'b'); hold on; plot(t,frr,'r'); hold on; plot(idx_rescale,far(idx),'ro'); legend('FAR','FRR'); xlabel('Limiar'); ylabel('Erro (%)'); grid on; title('Variação do erro')
subplot(212);
plot(far,frr,'b'); xlabel('FAR'); ylabel('FRR'); hold on; plot([0 1],[0 1],'r--'); grid on;
else
subplot(211);
plot(t,far,'b'); hold on; plot(t,frr,'r'); hold on; legend('FAR','FRR'); xlabel('Limiar'); ylabel('Erro (%)'); grid on; title('Variação do erro')
subplot(212);
plot(far,frr,'b'); xlabel('FAR'); ylabel('FRR'); hold on; plot([0 1],[0 1],'r--'); grid on;
min_erro = NaN;
end
end
%{
Determina a taxa de falsa rejeição (FAR) e de falsa aceitação (FAR).
Para cada valor de verossimilhança.
res = Mat. de resultados (MxN), M = Núm. de locuções. N = Núm. de emoções;
lim = Verossimilhança mínina para ser considerado dentro da classe.
frr, far = taxa de falsa rejeição (FAR) e de falsa aceitação (FRR).
%}
function [far,frr] = teste_loc_lim(res,lim)
far = 0;
frr = 0;
NLoc = size(res,1);
NEmo = size(res,2);
for col = 1:NEmo
rang1 = 1:31:size(res,1);
rang2 = rang1(col):rang1(col)+30;
for lin = 1:size(res,1)
% Caso seja maior que o lim e esteja fora da categoria.
% Falsa aceitação.
if (res(lin,col) >= lim) && isempty(find(rang2 == lin))
far = far+1;
end
% Caso seja menor que o lim e esteja dentro da categoria.
% Falsa rejeição.
if (res(lin,col) <= lim) && ~isempty(find(rang2 == lin))
frr = frr+1;
end
end
end
% Determinação dos erros.
far = far/(NLoc*(NEmo-1));
frr = frr/NLoc;
end