mirror of
https://github.com/Llewellynvdm/php-ml.git
synced 2024-11-05 13:07:52 +00:00
a348111e97
* tests: update to PHPUnit 6.0 with rector * fix namespaces on tests * composer + tests: use standard test namespace naming * update travis * resolve conflict * phpstan lvl 2 * phpstan lvl 3 * phpstan lvl 4 * phpstan lvl 5 * phpstan lvl 6 * phpstan lvl 7 * level max * resolve conflict * [cs] clean empty docs * composer: bump to PHPUnit 6.4 * cleanup * composer + travis: add phpstan * phpstan lvl 1 * composer: update dev deps * phpstan fixes * update Contributing with new tools * docs: link fixes, PHP version update * composer: drop php-cs-fixer, cs already handled by ecs * ecs: add old set rules * [cs] apply rest of rules
93 lines
3.4 KiB
PHP
93 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Phpml\Tests\CrossValidation;
|
|
|
|
use Phpml\CrossValidation\RandomSplit;
|
|
use Phpml\Dataset\ArrayDataset;
|
|
use Phpml\Exception\InvalidArgumentException;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class RandomSplitTest extends TestCase
|
|
{
|
|
public function testThrowExceptionOnToSmallTestSize(): void
|
|
{
|
|
$this->expectException(InvalidArgumentException::class);
|
|
new RandomSplit(new ArrayDataset([], []), 0);
|
|
}
|
|
|
|
public function testThrowExceptionOnToBigTestSize(): void
|
|
{
|
|
$this->expectException(InvalidArgumentException::class);
|
|
new RandomSplit(new ArrayDataset([], []), 1);
|
|
}
|
|
|
|
public function testDatasetRandomSplitWithoutSeed(): void
|
|
{
|
|
$dataset = new ArrayDataset(
|
|
$samples = [[1], [2], [3], [4]],
|
|
$labels = ['a', 'a', 'b', 'b']
|
|
);
|
|
|
|
$randomSplit = new RandomSplit($dataset, 0.5);
|
|
|
|
$this->assertCount(2, $randomSplit->getTestSamples());
|
|
$this->assertCount(2, $randomSplit->getTrainSamples());
|
|
|
|
$randomSplit2 = new RandomSplit($dataset, 0.25);
|
|
|
|
$this->assertCount(1, $randomSplit2->getTestSamples());
|
|
$this->assertCount(3, $randomSplit2->getTrainSamples());
|
|
}
|
|
|
|
public function testDatasetRandomSplitWithSameSeed(): void
|
|
{
|
|
$dataset = new ArrayDataset(
|
|
$samples = [[1], [2], [3], [4], [5], [6], [7], [8]],
|
|
$labels = ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b']
|
|
);
|
|
|
|
$seed = 123;
|
|
|
|
$randomSplit1 = new RandomSplit($dataset, 0.5, $seed);
|
|
$randomSplit2 = new RandomSplit($dataset, 0.5, $seed);
|
|
|
|
$this->assertEquals($randomSplit1->getTestLabels(), $randomSplit2->getTestLabels());
|
|
$this->assertEquals($randomSplit1->getTestSamples(), $randomSplit2->getTestSamples());
|
|
$this->assertEquals($randomSplit1->getTrainLabels(), $randomSplit2->getTrainLabels());
|
|
$this->assertEquals($randomSplit1->getTrainSamples(), $randomSplit2->getTrainSamples());
|
|
}
|
|
|
|
public function testDatasetRandomSplitWithDifferentSeed(): void
|
|
{
|
|
$dataset = new ArrayDataset(
|
|
$samples = [[1], [2], [3], [4], [5], [6], [7], [8]],
|
|
$labels = ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b']
|
|
);
|
|
|
|
$randomSplit1 = new RandomSplit($dataset, 0.5, 4321);
|
|
$randomSplit2 = new RandomSplit($dataset, 0.5, 1234);
|
|
|
|
$this->assertNotEquals($randomSplit1->getTestLabels(), $randomSplit2->getTestLabels());
|
|
$this->assertNotEquals($randomSplit1->getTestSamples(), $randomSplit2->getTestSamples());
|
|
$this->assertNotEquals($randomSplit1->getTrainLabels(), $randomSplit2->getTrainLabels());
|
|
$this->assertNotEquals($randomSplit1->getTrainSamples(), $randomSplit2->getTrainSamples());
|
|
}
|
|
|
|
public function testRandomSplitCorrectSampleAndLabelPosition(): void
|
|
{
|
|
$dataset = new ArrayDataset(
|
|
$samples = [[1], [2], [3], [4]],
|
|
$labels = [1, 2, 3, 4]
|
|
);
|
|
|
|
$randomSplit = new RandomSplit($dataset, 0.5);
|
|
|
|
$this->assertEquals($randomSplit->getTestSamples()[0][0], $randomSplit->getTestLabels()[0]);
|
|
$this->assertEquals($randomSplit->getTestSamples()[1][0], $randomSplit->getTestLabels()[1]);
|
|
$this->assertEquals($randomSplit->getTrainSamples()[0][0], $randomSplit->getTrainLabels()[0]);
|
|
$this->assertEquals($randomSplit->getTrainSamples()[1][0], $randomSplit->getTrainLabels()[1]);
|
|
}
|
|
}
|