transformers = array_map(static function (Transformer $transformer): Transformer { return $transformer; }, $transformers); $this->estimator = $estimator; } /** * @return Transformer[] */ public function getTransformers(): array { return $this->transformers; } public function getEstimator(): ?Estimator { return $this->estimator; } public function train(array $samples, array $targets): void { if ($this->estimator === null) { throw new InvalidOperationException('Pipeline without estimator can\'t use train method'); } foreach ($this->transformers as $transformer) { $transformer->fit($samples, $targets); $transformer->transform($samples, $targets); } $this->estimator->train($samples, $targets); } /** * @return mixed */ public function predict(array $samples) { if ($this->estimator === null) { throw new InvalidOperationException('Pipeline without estimator can\'t use predict method'); } $this->transform($samples); return $this->estimator->predict($samples); } public function fit(array $samples, ?array $targets = null): void { foreach ($this->transformers as $transformer) { $transformer->fit($samples, $targets); $transformer->transform($samples, $targets); } } public function transform(array &$samples, ?array &$targets = null): void { foreach ($this->transformers as $transformer) { $transformer->transform($samples, $targets); } } }