2016-05-05 21:29:11 +00:00
|
|
|
<?php
|
|
|
|
|
2016-11-20 21:53:17 +00:00
|
|
|
declare(strict_types=1);
|
2016-05-05 21:29:11 +00:00
|
|
|
|
2018-01-06 12:09:33 +00:00
|
|
|
namespace Phpml\Tests\SupportVectorMachine;
|
2016-05-05 21:29:11 +00:00
|
|
|
|
2018-02-25 21:56:36 +00:00
|
|
|
use Phpml\Exception\InvalidArgumentException;
|
2016-05-05 21:29:11 +00:00
|
|
|
use Phpml\SupportVectorMachine\DataTransformer;
|
2017-02-03 11:58:25 +00:00
|
|
|
use PHPUnit\Framework\TestCase;
|
2016-05-05 21:29:11 +00:00
|
|
|
|
2017-02-03 11:58:25 +00:00
|
|
|
class DataTransformerTest extends TestCase
|
2016-05-05 21:29:11 +00:00
|
|
|
{
|
2017-11-14 20:21:23 +00:00
|
|
|
public function testTransformDatasetToTrainingSet(): void
|
2016-05-05 21:29:11 +00:00
|
|
|
{
|
|
|
|
$samples = [[1, 1], [2, 1], [3, 2], [4, 5]];
|
|
|
|
$labels = ['a', 'a', 'b', 'b'];
|
|
|
|
|
|
|
|
$trainingSet =
|
2018-07-04 21:42:22 +00:00
|
|
|
'0 1:1.000000 2:1.000000 '.PHP_EOL.
|
|
|
|
'0 1:2.000000 2:1.000000 '.PHP_EOL.
|
|
|
|
'1 1:3.000000 2:2.000000 '.PHP_EOL.
|
|
|
|
'1 1:4.000000 2:5.000000 '.PHP_EOL
|
2016-05-05 21:29:11 +00:00
|
|
|
;
|
|
|
|
|
2018-10-28 06:44:52 +00:00
|
|
|
self::assertEquals($trainingSet, DataTransformer::trainingSet($samples, $labels));
|
2016-05-05 21:29:11 +00:00
|
|
|
}
|
2016-05-06 20:38:50 +00:00
|
|
|
|
2017-11-14 20:21:23 +00:00
|
|
|
public function testTransformSamplesToTestSet(): void
|
2016-05-06 20:38:50 +00:00
|
|
|
{
|
|
|
|
$samples = [[1, 1], [2, 1], [3, 2], [4, 5]];
|
|
|
|
|
|
|
|
$testSet =
|
2018-07-04 21:42:22 +00:00
|
|
|
'0 1:1.000000 2:1.000000 '.PHP_EOL.
|
|
|
|
'0 1:2.000000 2:1.000000 '.PHP_EOL.
|
|
|
|
'0 1:3.000000 2:2.000000 '.PHP_EOL.
|
|
|
|
'0 1:4.000000 2:5.000000 '.PHP_EOL
|
2016-05-06 20:38:50 +00:00
|
|
|
;
|
|
|
|
|
2018-10-28 06:44:52 +00:00
|
|
|
self::assertEquals($testSet, DataTransformer::testSet($samples));
|
2016-05-06 20:38:50 +00:00
|
|
|
}
|
2018-02-06 19:39:25 +00:00
|
|
|
|
|
|
|
public function testPredictions(): void
|
|
|
|
{
|
|
|
|
$labels = ['a', 'a', 'b', 'b'];
|
|
|
|
$rawPredictions = implode(PHP_EOL, [0, 1, 0, 0]);
|
|
|
|
|
|
|
|
$predictions = ['a', 'b', 'a', 'a'];
|
|
|
|
|
2018-10-28 06:44:52 +00:00
|
|
|
self::assertEquals($predictions, DataTransformer::predictions($rawPredictions, $labels));
|
2018-02-06 19:39:25 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testProbabilities(): void
|
|
|
|
{
|
|
|
|
$labels = ['a', 'b', 'c'];
|
|
|
|
$rawPredictions = implode(PHP_EOL, [
|
|
|
|
'labels 0 1 2',
|
|
|
|
'1 0.1 0.7 0.2',
|
|
|
|
'2 0.2 0.3 0.5',
|
|
|
|
'0 0.6 0.1 0.3',
|
|
|
|
]);
|
|
|
|
|
|
|
|
$probabilities = [
|
|
|
|
[
|
|
|
|
'a' => 0.1,
|
|
|
|
'b' => 0.7,
|
|
|
|
'c' => 0.2,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'a' => 0.2,
|
|
|
|
'b' => 0.3,
|
|
|
|
'c' => 0.5,
|
|
|
|
],
|
|
|
|
[
|
|
|
|
'a' => 0.6,
|
|
|
|
'b' => 0.1,
|
|
|
|
'c' => 0.3,
|
|
|
|
],
|
|
|
|
];
|
|
|
|
|
2018-10-28 06:44:52 +00:00
|
|
|
self::assertEquals($probabilities, DataTransformer::probabilities($rawPredictions, $labels));
|
2018-02-06 19:39:25 +00:00
|
|
|
}
|
2018-02-25 21:56:36 +00:00
|
|
|
|
|
|
|
public function testThrowExceptionWhenTestSetIsEmpty(): void
|
|
|
|
{
|
|
|
|
$this->expectException(InvalidArgumentException::class);
|
|
|
|
$this->expectExceptionMessage('The array has zero elements');
|
|
|
|
|
|
|
|
DataTransformer::testSet([]);
|
|
|
|
}
|
2016-05-05 21:29:11 +00:00
|
|
|
}
|