mirror of
https://github.com/Llewellynvdm/php-ml.git
synced 2024-09-29 07:29:01 +00:00
48 lines
1008 B
PHP
48 lines
1008 B
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace Phpml\Preprocessing;
|
||
|
|
||
|
final class LabelEncoder implements Preprocessor
|
||
|
{
|
||
|
/**
|
||
|
* @var int[]
|
||
|
*/
|
||
|
private $classes = [];
|
||
|
|
||
|
public function fit(array $samples, ?array $targets = null): void
|
||
|
{
|
||
|
$this->classes = [];
|
||
|
|
||
|
foreach ($samples as $sample) {
|
||
|
if (!isset($this->classes[(string) $sample])) {
|
||
|
$this->classes[(string) $sample] = count($this->classes);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function transform(array &$samples): void
|
||
|
{
|
||
|
foreach ($samples as &$sample) {
|
||
|
$sample = $this->classes[(string) $sample];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function inverseTransform(array &$samples): void
|
||
|
{
|
||
|
$classes = array_flip($this->classes);
|
||
|
foreach ($samples as &$sample) {
|
||
|
$sample = $classes[$sample];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string[]
|
||
|
*/
|
||
|
public function classes(): array
|
||
|
{
|
||
|
return array_keys($this->classes);
|
||
|
}
|
||
|
}
|