Skip to content

Commit 2ff1a85

Browse files
adding Ben's auc code.
1 parent 41b116e commit 2ff1a85

File tree

1 file changed

+61
-0
lines changed
  • Chapter7_BayesianMachineLearning

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#contributed by Ben Hammer, 2013
2+
3+
4+
def tied_rank(x):
5+
"""
6+
Computes the tied rank of elements in x.
7+
8+
This function computes the tied rank of elements in x.
9+
10+
Parameters
11+
----------
12+
x : list of numbers, numpy array
13+
14+
Returns
15+
-------
16+
score : list of numbers
17+
The tied rank f each element in x
18+
19+
"""
20+
sorted_x = sorted(zip(x,range(len(x))))
21+
r = [0 for k in x]
22+
cur_val = sorted_x[0][0]
23+
last_rank = 0
24+
for i in range(len(sorted_x)):
25+
if cur_val != sorted_x[i][0]:
26+
cur_val = sorted_x[i][0]
27+
for j in range(last_rank, i):
28+
r[sorted_x[j][1]] = float(last_rank+1+i)/2.0
29+
last_rank = i
30+
if i==len(sorted_x)-1:
31+
for j in range(last_rank, i+1):
32+
r[sorted_x[j][1]] = float(last_rank+i+2)/2.0
33+
return r
34+
35+
def auc(actual, posterior):
36+
"""
37+
Computes the area under the receiver-operater characteristic (AUC)
38+
39+
This function computes the AUC error metric for binary classification.
40+
41+
Parameters
42+
----------
43+
actual : list of binary numbers, numpy array
44+
The ground truth value
45+
posterior : same type as actual
46+
Defines a ranking on the binary numbers, from most likely to
47+
be positive to least likely to be positive.
48+
49+
Returns
50+
-------
51+
score : double
52+
The mean squared error between actual and posterior
53+
54+
"""
55+
r = tied_rank(posterior)
56+
num_positive = len([0 for x in actual if x==1])
57+
num_negative = len(actual)-num_positive
58+
sum_positive = sum([r[i] for i in range(len(r)) if actual[i]==1])
59+
auc = ((sum_positive - num_positive*(num_positive+1)/2.0) /
60+
(num_negative*num_positive))
61+
return auc

0 commit comments

Comments
 (0)