-
Notifications
You must be signed in to change notification settings - Fork 17
/
confmat.m
56 lines (49 loc) · 1.32 KB
/
confmat.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
function [C,rate]=confmat(Y,T)
%CONFMAT Compute a confusion matrix.
%
% Description
% [C, RATE] = CONFMAT(Y, T) computes the confusion matrix C and
% classification performance RATE for the predictions mat{y} compared
% with the targets T. The data is assumed to be in a 1-of-N encoding,
% unless there is just one column, when it is assumed to be a 2 class
% problem with a 0-1 encoding. Each row of Y and T corresponds to a
% single example.
%
% In the confusion matrix, the rows represent the true classes and the
% columns the predicted classes. The vector RATE has two entries: the
% percentage of correct classifications and the total number of correct
% classifications.
%
% See also
% CONFFIG, DEMTRAIN
%
% Copyright (c) Ian T Nabney (1996-2001)
[n c]=size(Y);
[n2 c2]=size(T);
if n~=n2 | c~=c2
error('Outputs and targets are different sizes')
end
if c > 1
% Find the winning class assuming 1-of-N encoding
[maximum Yclass] = max(Y', [], 1);
TL=[1:c]*T';
else
% Assume two classes with 0-1 encoding
c = 2;
class2 = find(T > 0.5);
TL = ones(n, 1);
TL(class2) = 2;
class2 = find(Y > 0.5);
Yclass = ones(n, 1);
Yclass(class2) = 2;
end
% Compute
correct = (Yclass==TL);
total=sum(sum(correct));
rate=[total*100/n total];
C=zeros(c,c);
for i=1:c
for j=1:c
C(i,j) = sum((Yclass==j).*(TL==i));
end
end