/** * @param array $coefficients * @param array $features * @param float $outcome * @return array */ public function gradient(array $coefficients, array $features, float $outcome) : array { $gradient = []; $baseGradient = $this->gradient->gradient($coefficients, $features, $outcome); for ($i = 0; $i < count($baseGradient); $i++) { $penalty = $i || !$this->ignoreFirst ? $this->lambda * pow(abs($coefficients[$i]), $this->level - 1) : 0.0; $gradient[] = $baseGradient[$i] + $penalty; } return $gradient; }