**Note:** In order to maintain the convention of *maximizing* validation scores, this * metric outputs the negative of the original score. * * @category Machine Learning * @package Rubix/ML * @author Andrew DalPino */ class MeanAbsoluteError implements Metric { /** * Return a tuple of the min and max output value for this metric. * * @return \Rubix\ML\Tuple{float,float} */ public function range() : Tuple { return new Tuple(-INF, 0.0); } /** * The estimator types that this metric is compatible with. * * @internal * * @return list */ public function compatibility() : array { return [ EstimatorType::regressor(), ]; } /** * Score a set of predictions. * * @param list $predictions * @param list $labels * @throws \Rubix\ML\Exceptions\InvalidArgumentException * @return float */ public function score(array $predictions, array $labels) : float { PredictionAndLabelCountsAreEqual::with($predictions, $labels)->check(); if (empty($predictions)) { return 0.0; } $error = 0.0; foreach ($predictions as $i => $prediction) { $error += abs($labels[$i] - $prediction); } return -($error / count($predictions)); } /** * Return the string representation of the object. * * @internal * * @return string */ public function __toString() : string { return 'Mean Absolute Error'; } }