-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOrzEval.m
More file actions
127 lines (109 loc) · 3.85 KB
/
OrzEval.m
File metadata and controls
127 lines (109 loc) · 3.85 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
classdef OrzEval
properties (SetAccess = public)
ER;
EER;
Thres;
A;
FAR;
FRR;
nP;
nN;
flgSIM;
end% properties
methods
function OB = OrzEval(VAL, Label, varargin)
%function OB = OrzEval(VAL, Label, varargin)
% VAL: 類似度もしくは非類似度(距離)が入った行列、もしくは行ベクトル
% VALが行列の場合、多クラス問題(2クラス以上)と判断
% VALが行ベクトルの場合、1クラスと判断⇒ERを計算しない
% Label: VALの列数と同じサイズの行ベクトル
% VALの正解ラベルを保持
% 多クラス問題の場合、1~クラス数の値
% 1クラス問題の場合、1(Positive)と0(Negative)
% 第三引数: VALの値が類似度か非類似度(距離)を決定する
% デフォルトでは、類似度
% 文字'D'が第三引数に入力された場合、非類似度(距離)として計算
%
% PlotEER: False Reject RateとFalse Alarm RateをFigure(10)に描画
% 引数により、番号を変更可能
% PlotROC: ROC curveをFigure(100)に描画
% 引数により、番号を変更可能
VAL=VAL(:,:);
% 類似度か非類似度か
OB.flgSIM=true;
if nargin == 3
if varargin{1}=='D';
OB.flgSIM=false;
end
end
% One-Class 問題かどうか
if size(VAL,1)>=2
B=zeros(size(VAL));
Lu = unique(Label);
for I=1:size(Lu,2)
B(I,Label==Lu(I))=1;
end
if OB.flgSIM
[v ind] = max(VAL,[],1);
else
[v ind] = min(VAL,[],1);
end
OB.ER = 1-mean(ind == Label);
else
B = zeros(size(Label));
B(Label~=0)=1;
end
VAL=VAL(:);
B=B(:);
OB.nP = sum(B==1);
OB.nN = sum(B==0);
if OB.flgSIM
[OB.A C]= sort(VAL,'ascend');
else
[OB.A C]= sort(VAL,'descend');
end
D = B(C);
OB.FAR = 1-cumsum(D==0)/OB.nN;
OB.FRR = cumsum(D==1)/OB.nP;
[val ind] = min((abs(OB.FAR-OB.FRR)));
OB.EER = (OB.FAR(ind)+OB.FRR(ind))/2;
OB.Thres = OB.A(ind);
end
function PlotEER(OB,varargin)
if nargin == 2
No = varargin{1};
else
No = 10;
end
figure(No)
clf;
hold on
plot(OB.A,OB.FRR,'b');
plot(OB.A,OB.FAR,'r');
title('FRR - FAR');
legend('False Reject Rate','False Alarm Rate',0);
xlabel('Threshold')
ylabel('Rate')
hold off
end
function PlotROC(OB,varargin)
if nargin == 2
No = varargin{1};
color = 'r';
elseif nargin == 3
No = varargin{1};
color = varargin{2};
else
No = 100;
color = 'r';
end
figure(No)
%clf;
hold on
plot(OB.FAR,1-OB.FRR,color);
xlabel('False Positive Rate')
ylabel('True Positive Rate')
hold off
end
end
end