threshold = $threshold; } public function fit(array $samples, ?array $targets = null): void { $this->variances = array_map(static function (array $column): float { return Variance::population($column); }, Matrix::transposeArray($samples)); foreach ($this->variances as $column => $variance) { if ($variance > $this->threshold) { $this->keepColumns[$column] = true; } } } public function transform(array &$samples, ?array &$targets = null): void { foreach ($samples as &$sample) { $sample = array_values(array_intersect_key($sample, $this->keepColumns)); } } }