|
import numpy as np |
|
|
|
|
|
def getAP(conf, labels): |
|
assert len(conf) == len(labels) |
|
sortind = np.argsort(-conf) |
|
tp = labels[sortind] == 1 |
|
fp = labels[sortind] != 1 |
|
npos = np.sum(labels) |
|
|
|
fp = np.cumsum(fp).astype("float32") |
|
tp = np.cumsum(tp).astype("float32") |
|
rec = tp / npos |
|
prec = tp / (fp + tp) |
|
tmp = (labels[sortind] == 1).astype("float32") |
|
|
|
return np.sum(tmp * prec) / npos if npos > 0 else 1 |
|
|
|
|
|
def getClassificationMAP(confidence, labels): |
|
""" confidence and labels are of dimension n_samples x n_label """ |
|
|
|
AP = [] |
|
for i in range(np.shape(labels)[1]): |
|
AP.append(getAP(confidence[:, i], labels[:, i])) |
|
return 100 * sum(AP) / len(AP) |
|
|