| 1 |
efrain |
1 |
<?php
|
|
|
2 |
|
|
|
3 |
declare(strict_types=1);
|
|
|
4 |
|
|
|
5 |
namespace Phpml\CrossValidation;
|
|
|
6 |
|
|
|
7 |
use Phpml\Dataset\Dataset;
|
|
|
8 |
|
|
|
9 |
class RandomSplit extends Split
|
|
|
10 |
{
|
|
|
11 |
protected function splitDataset(Dataset $dataset, float $testSize): void
|
|
|
12 |
{
|
|
|
13 |
$samples = $dataset->getSamples();
|
|
|
14 |
$labels = $dataset->getTargets();
|
|
|
15 |
$datasetSize = count($samples);
|
|
|
16 |
$testCount = count($this->testSamples);
|
|
|
17 |
|
|
|
18 |
for ($i = $datasetSize; $i > 0; --$i) {
|
|
|
19 |
$key = mt_rand(0, $datasetSize - 1);
|
|
|
20 |
$setName = (count($this->testSamples) - $testCount) / $datasetSize >= $testSize ? 'train' : 'test';
|
|
|
21 |
|
|
|
22 |
$this->{$setName.'Samples'}[] = $samples[$key];
|
|
|
23 |
$this->{$setName.'Labels'}[] = $labels[$key];
|
|
|
24 |
}
|
|
|
25 |
}
|
|
|
26 |
}
|