Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
18 / 18 |
Imputer | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
10 | |
100.00% |
18 / 18 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
preprocess | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
preprocessSample | |
100.00% |
1 / 1 |
3 | |
100.00% |
4 / 4 |
|||
getAxis | |
100.00% |
1 / 1 |
4 | |
100.00% |
7 / 7 |
<?php | |
declare (strict_types = 1); | |
namespace Phpml\Preprocessing; | |
use Phpml\Preprocessing\Imputer\Strategy; | |
class Imputer implements Preprocessor | |
{ | |
const AXIS_COLUMN = 0; | |
const AXIS_ROW = 1; | |
/** | |
* @var mixed | |
*/ | |
private $missingValue; | |
/** | |
* @var Strategy | |
*/ | |
private $strategy; | |
/** | |
* @var int | |
*/ | |
private $axis; | |
/** | |
* @param mixed $missingValue | |
* @param Strategy $strategy | |
* @param int $axis | |
*/ | |
public function __construct($missingValue = null, Strategy $strategy, int $axis = self::AXIS_COLUMN) | |
{ | |
$this->missingValue = $missingValue; | |
$this->strategy = $strategy; | |
$this->axis = $axis; | |
} | |
/** | |
* @param array $samples | |
*/ | |
public function preprocess(array &$samples) | |
{ | |
foreach ($samples as &$sample) { | |
$this->preprocessSample($sample, $samples); | |
} | |
} | |
/** | |
* @param array $sample | |
* @param array $samples | |
*/ | |
private function preprocessSample(array &$sample, array $samples) | |
{ | |
foreach ($sample as $column => &$value) { | |
if ($value === $this->missingValue) { | |
$value = $this->strategy->replaceValue($this->getAxis($column, $sample, $samples)); | |
} | |
} | |
} | |
/** | |
* @param int $column | |
* @param array $currentSample | |
* @param array $samples | |
* | |
* @return array | |
*/ | |
private function getAxis(int $column, array $currentSample, array $samples): array | |
{ | |
if (self::AXIS_ROW === $this->axis) { | |
return array_diff($currentSample, [$this->missingValue]); | |
} | |
$axis = []; | |
foreach ($samples as $sample) { | |
if ($sample[$column] !== $this->missingValue) { | |
$axis[] = $sample[$column]; | |
} | |
} | |
return $axis; | |
} | |
} |