php-ml/tests/Phpml/Metric/ClassificationReportTest.php

133 lines
3.5 KiB
PHP
Raw Normal View History

2016-07-19 19:58:59 +00:00
<?php
2016-07-19 19:59:23 +00:00
2016-11-20 21:53:17 +00:00
declare(strict_types=1);
2016-07-19 19:58:59 +00:00
namespace tests\Phpml\Metric;
use Phpml\Metric\ClassificationReport;
2017-02-03 11:58:25 +00:00
use PHPUnit\Framework\TestCase;
2016-07-19 19:58:59 +00:00
2017-02-03 11:58:25 +00:00
class ClassificationReportTest extends TestCase
2016-07-19 19:58:59 +00:00
{
public function testClassificationReportGenerateWithStringLabels(): void
2016-07-19 19:58:59 +00:00
{
$labels = ['cat', 'ant', 'bird', 'bird', 'bird'];
2016-07-19 19:59:23 +00:00
$predicted = ['cat', 'cat', 'bird', 'bird', 'ant'];
2016-07-19 19:58:59 +00:00
$report = new ClassificationReport($labels, $predicted);
$precision = [
'cat' => 0.5,
'ant' => 0.0,
'bird' => 1.0,
];
$recall = [
'cat' => 1.0,
'ant' => 0.0,
'bird' => 0.67,
];
$f1score = [
'cat' => 0.67,
'ant' => 0.0,
'bird' => 0.80,
];
$support = [
'cat' => 1,
'ant' => 1,
'bird' => 3,
];
$average = [
'precision' => 0.75,
'recall' => 0.83,
'f1score' => 0.73,
];
2016-07-19 19:58:59 +00:00
$this->assertEquals($precision, $report->getPrecision(), '', 0.01);
$this->assertEquals($recall, $report->getRecall(), '', 0.01);
$this->assertEquals($f1score, $report->getF1score(), '', 0.01);
$this->assertEquals($support, $report->getSupport(), '', 0.01);
$this->assertEquals($average, $report->getAverage(), '', 0.01);
}
2016-07-19 20:01:39 +00:00
public function testClassificationReportGenerateWithNumericLabels(): void
2016-07-19 20:01:39 +00:00
{
$labels = [0, 1, 2, 2, 2];
$predicted = [0, 0, 2, 2, 1];
$report = new ClassificationReport($labels, $predicted);
$precision = [
0 => 0.5,
1 => 0.0,
2 => 1.0,
];
$recall = [
0 => 1.0,
1 => 0.0,
2 => 0.67,
];
$f1score = [
0 => 0.67,
1 => 0.0,
2 => 0.80,
];
$support = [
0 => 1,
1 => 1,
2 => 3,
];
$average = [
'precision' => 0.75,
'recall' => 0.83,
'f1score' => 0.73,
];
2016-07-19 20:01:39 +00:00
$this->assertEquals($precision, $report->getPrecision(), '', 0.01);
$this->assertEquals($recall, $report->getRecall(), '', 0.01);
$this->assertEquals($f1score, $report->getF1score(), '', 0.01);
$this->assertEquals($support, $report->getSupport(), '', 0.01);
$this->assertEquals($average, $report->getAverage(), '', 0.01);
}
public function testPreventDivideByZeroWhenTruePositiveAndFalsePositiveSumEqualsZero(): void
{
$labels = [1, 2];
$predicted = [2, 2];
$report = new ClassificationReport($labels, $predicted);
$this->assertEquals([
1 => 0.0,
2 => 0.5,
], $report->getPrecision(), '', 0.01);
}
public function testPreventDivideByZeroWhenTruePositiveAndFalseNegativeSumEqualsZero(): void
{
$labels = [2, 2, 1];
$predicted = [2, 2, 3];
$report = new ClassificationReport($labels, $predicted);
$this->assertEquals([
1 => 0.0,
2 => 1,
3 => 0,
], $report->getPrecision(), '', 0.01);
}
public function testPreventDividedByZeroWhenPredictedLabelsAllNotMatch(): void
{
2016-11-20 21:53:17 +00:00
$labels = [1, 2, 3, 4, 5];
$predicted = [2, 3, 4, 5, 6];
$report = new ClassificationReport($labels, $predicted);
$this->assertEquals([
'precision' => 0,
'recall' => 0,
2016-11-20 21:53:17 +00:00
'f1score' => 0,
], $report->getAverage(), '', 0.01);
}
2016-07-19 19:58:59 +00:00
}