def AUCROC_weighting(gbc): N = math.fsum([len(samples) for _, samples in gbc.iteritems()]) N2 = N * N waucs = [(len(samples1) * len(samples2) / N2, calc_auc(_ROC(samples1 + samples2, cls1))) for (cls1, samples1), (cls2, samples2) in combinations(gbc.items(), 2)] wsum = math.fsum((x[0] for x in waucs)) # TODO can wsum be 0? what if? return math.fsum(map(lambda x: x[0] * x[1], waucs)) / wsum
def test_auc(self): test_data = [ ([(0, 0), (1, 2), (2, 0)], 2.), ([(0, 1), (1, 1)], 1), ([(0., 0.5), (1, 2), (2, 2.)], 1.25 + 2.) ] for curve, expected_auc in test_data: self.assertEqual(expected_auc, calc_auc(curve))
def AUCROC_nonweighting(gbc): return avg([calc_auc(_ROC(samples1 + samples2, cls1)) for (cls1, samples1), (cls2, samples2) in combinations(gbc.items(), 2)])
def AUCROC_nonweighting(gbc): return avg([ calc_auc(_ROC(samples1 + samples2, cls1)) for (cls1, samples1), (cls2, samples2) in combinations(gbc.items(), 2) ])
def test_auc(self): test_data = [([(0, 0), (1, 2), (2, 0)], 2.), ([(0, 1), (1, 1)], 1), ([(0., 0.5), (1, 2), (2, 2.)], 1.25 + 2.)] for curve, expected_auc in test_data: self.assertEqual(expected_auc, calc_auc(curve))