Source code for niftynet.evaluation.classification_evaluations
# -*- coding: utf-8 -*-
"""
This module defines built-in evaluation functions for classification
applications
Many classification metrics only make sense computed over all subjects,
so aggregation is used.
"""
from __future__ import absolute_import, division, print_function
import numpy as np
import pandas as pd
from niftynet.evaluation.base_evaluations import BaseEvaluation
from niftynet.evaluation.base_evaluator import ScalarAggregator,\
DataFrameAggregator
[docs]class accuracy(BaseEvaluation):
[docs] def layer_op(self, subject_id, data):
metric_name = 'accuracy_'
if self.app_param.output_prob:
inferred_label = np.argmax(data['inferred'][0,0,0,0,:])
else:
inferred_label = data['inferred'][0,0,0,0,0]
pdf = pd.DataFrame.from_records([{'subject_id':subject_id,
'acc_i':inferred_label,
'acc_l':data['label'][0,0,0,0,0]}],
index=('subject_id',))
return [pdf]
[docs] def aggregate(self, df):
print(df)
agg = pd.DataFrame.from_records([{'accuracy':(df.acc_i==df.acc_l).mean()}])
return [agg]
[docs] def get_aggregations(self):
return [DataFrameAggregator(('subject_id',), self.aggregate)]