2019-04-02 09:07:00 +00:00
|
|
|
<?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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-12 20:25:17 +00:00
|
|
|
public function transform(array &$samples, ?array &$targets = null): void
|
2019-04-02 09:07:00 +00:00
|
|
|
{
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|