sklearn: metrics

真实情况|预测正|预测反
|:-:|:-:|:-:|
正|TP(真正例)|FN(假反例)
反|FP(假正例|TN(真反例)

查全率sensitivity/true positive rate/recall_score/ TPR

TPR = TP / (TP + FN)

1
sm.recall_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)

specificity(true negative rate) SPC

SPC = TN/(TN+FP)

查准率precision_score/positive predictive value/PPV

PPV = TP/(TP+FP)

1
2
import sklearn.metrics as sm
sm.precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)

negative predictive value (NPV)

NPV = TN/(TN+FN)

accuracy (ACC)

ACC = (TP+TN)/(TP+FP+FN+TN)

1
sm.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

F1是基于查准率与查全率的调和平均

1/F1 = 0.5*(1/P+1/R)

1
sm.f1_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None)

F_beta是加权调和平均

1/F_beta = 1/(1+beta^2)*(1/P+beta^2/R)

ß>O 度量了查全率对查准率的相对重要性

ß>1 时查全率有更大影响 ;

ß < 1 时查准率有更大影响.

ß = 1时退化为标准的 F1

1
sm.fbeta_score(y_true, y_pred, beta, labels=None, pos_label=1, average='binary', sample_weight=None)

Matthews correlation coefficient (MCC)

ROC曲线

我们根据学习器的预测结果对样例进行排序,

按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,

分别以它们为横、纵坐标作图就得到了 ROC 曲线

横轴是假正例率False Positive Rate(FPR)
纵轴是真正例率True Positive Rate(TPR)

1
sm.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)

AUC

Area Under ROC Curve

若一个学习器的 ROC 曲线被另 一个学 习器的曲线完全”包住”,

则可断言后者的性能优于前者;若两个学习 器的 ROC 曲线发生交叉,

则难以-般性地断言两者孰优孰劣 . 此时如果一定要进行比较,

则较为合理的判据是比较 ROC曲线下的面积 ,即 AUC

1
2
3
4
5
6
7
8
>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> pred = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = metrics.roc_curve(y, pred, pos_label=2)
>>> plt.plot(fpr, tpr) # ROC curve
>>> metrics.auc(fpr, tpr)
0.75