Source code for niftynet.evaluation.regression_evaluations
# -*- coding: utf-8 -*-
"""
This module defines built-in evaluation functions for regression applications
"""
from __future__ import absolute_import, division, print_function
import numpy as np
import pandas as pd
from niftynet.evaluation.base_evaluations import BaseEvaluation
[docs]class BaseRegressionEvaluation(BaseEvaluation):
""" Interface for scalar regression metrics """
[docs] def layer_op(self, subject_id, data):
metric_name = self.__class__.__name__
metric_value = self.metric(data['inferred'], data['output'])
pdf = pd.DataFrame.from_records([{'subject_id':subject_id,
metric_name:metric_value}],
('subject_id',))
return [pdf]
[docs] def metric(self, reg, ref):
"""
Computes a scalar value for the metric
:param reg: np.array with inferred regression
:param ref: np array with the reference output
:return: scalar metric value
"""
raise NotImplementedError
#pylint: disable=invalid-name
[docs]class mse(BaseRegressionEvaluation):
""" Computes mean squared error """
[docs] def metric(self, reg, ref):
return np.mean(np.square(reg - ref))
[docs]class rmse(BaseRegressionEvaluation):
""" Computes root mean squared error """
[docs] def metric(self, reg, ref):
return np.sqrt(np.mean(np.square(reg - ref)))
[docs]class mae(BaseRegressionEvaluation):
""" Computes mean absolute error """
[docs] def metric(self, reg, ref):
return np.mean(np.abs(ref - reg))