NAME
AI::ConfusionMatrix - make a confusion matrix
SYNOPSIS
my %matrix;
Loop over your tests
---
$matrix{$expected}{$predicted} += 1;
---
makeConfusionMatrix(\%matrix, 'output.csv');
DESCRIPTION
This module prints a confusion matrix from a hash reference. This module tries to be generic enough to be used within a lot of machine learning projects.
Function
makeConfusionMatrix($hash_ref, $file)
This function makes a confusion matrix from $hash_ref
and writes it to $file
. $file
can be a filename or a file handle opened with the w+
mode.
Examples:
makeConfusionMatrix(\%matrix, 'output.csv');
makeConfusionMatrix(\%matrix, *$fh);
The hash reference must look like this :
$VAR1 = {
'value_expected1' => {
'value_predicted1' => value
},
'value_expected2' => {
'value_predicted1' => value,
'value_predicted2' => value
},
'value_expected3' => {
'value_predicted3' => value
}
};
The output will be in CSV. Here is an example:
,1997,1998,2001,2003,2005,2008,2012,2015,TOTAL,TP,FP,FN,ACC
1997,2,,,,,,,,2,2,0,0,100.00%
1998,,1,,,,,,,1,1,0,0,100.00%
2001,,,1,,,,,,1,1,0,0,100.00%
2003,,,,5,,,1,1,7,5,0,2,71.43%
2005,,,,,7,,,2,9,7,0,2,77.78%
2008,,,,,,3,,,3,3,0,0,100.00%
2012,,,,,,,5,,5,5,1,0,100.00%
2015,,,,,,,,8,8,8,3,0,100.00%
TOTAL,2,1,1,5,7,3,6,11,36,32,4,4,88.89%
Prettified:
| | 1997 | 1998 | 2001 | 2003 | 2005 | 2008 | 2012 | 2015 | TOTAL | TP | FP | FN | ACC |
|-------|------|------|------|------|------|------|------|------|-------|----|----|----|---------|
| 1997 | 2 | | | | | | | | 2 | 2 | 0 | 0 | 100.00% |
| 1998 | | 1 | | | | | | | 1 | 1 | 0 | 0 | 100.00% |
| 2001 | | | 1 | | | | | | 1 | 1 | 0 | 0 | 100.00% |
| 2003 | | | | 5 | | | 1 | 1 | 7 | 5 | 0 | 2 | 71.43% |
| 2005 | | | | | 7 | | | 2 | 9 | 7 | 0 | 2 | 77.78% |
| 2008 | | | | | | 3 | | | 3 | 3 | 0 | 0 | 100.00% |
| 2012 | | | | | | | 5 | | 5 | 5 | 1 | 0 | 100.00% |
| 2015 | | | | | | | | 8 | 8 | 8 | 3 | 0 | 100.00% |
| TOTAL | 2 | 1 | 1 | 5 | 7 | 3 | 6 | 11 | 36 | 32 | 4 | 4 | 88.89% |
AUTHOR
Vincent Lequertier <sky@riseup.net>
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.