def acc_metric(solution, prediction, task=BINARY_CLASSIFICATION):
"""
Compute the accuracy.
Get the accuracy stats
acc = (tpr + fpr) / (tn + fp + tp + fn)
Normalize, so 1 is the best and zero mean random...
:param solution:
:param prediction:
:param task:
:return:
"""
label_num = solution.shape[1]
bin_predictions = binarize_predictions(prediction, task)
tn, fp, tp, fn = acc_stat(solution, bin_predictions)
# Bounding to avoid division by 0
eps = np.float(1e-15)
tp = np.sum(tp)
fp = np.sum(fp)
tn = np.sum(tn)
fn = np.sum(fn)
if (task != MULTICLASS_CLASSIFICATION) or (label_num == 1):
accuracy = (np.sum(tp) + np.sum(tn)) / (
np.sum(tp) + np.sum(fp) + np.sum(tn) + np.sum(fn)
)
else:
accuracy = np.sum(tp) / (np.sum(tp) + np.sum(fp))
if (task != MULTICLASS_CLASSIFICATION) or (label_num == 1):
base_accuracy = 0.5 # random predictions for binary case
else:
base_accuracy = 1. / label_num
# Normalize: 0 for random, 1 for perfect
score = (accuracy - base_accuracy) / sp.maximum(eps, (1 - base_accuracy))
return score
classification_metrics.py 文件源码
python
阅读 27
收藏 0
点赞 0
评论 0
评论列表
文章目录