二值分类器(Binary Classifier)是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多,比如 precision、recall、F1 score、P-R 曲线 等。但也这些指标或多或少只能反映模型在某一方面的性能。相比而言,ROC 曲线则有很多优点,经常作为评估二值分类器最重要的指标之一。
ROC曲线是 Receiver Operating Characteristic Curve 的简称,中文名为“受试者工作特征曲线”。ROC 曲线源于军事领域,而后在医学领域应用甚广,“受试者工作特征曲线”这一名称也正是来自于医学领域。
- 混淆矩阵
预测 | 预测 | |
---|---|---|
真实 | ||
真实 |
- ROC曲线的横坐标为假阳性率(False Positive Rate,FPR)。FPR 的计算方法为:
- 纵坐标为真阳性率(True Positive Rate,TPR)。TPR 的计算方法为:
说明:“召回率”即“真阳性率”,含义为真实是 的那些数据里预测对的比例。
roc_curve
>>> import numpy as np
>>> from sklearn.metrics import roc_curve
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> fpr, tpr, thresholds = roc_curve(y, scores, pos_label=2)
>>> fpr
array([0. , 0. , 0.5, 0.5, 1. ])
>>> tpr
array([0. , 0.5, 0.5, 1. , 1. ])
>>> thresholds
array([1.8 , 0.8 , 0.4 , 0.35, 0.1 ])
roc_auc_score
>>> import numpy as np
>>> from sklearn.metrics import roc_auc_score
>>> y_true = np.array([0, 0, 1, 1])
>>> y_scores = np.array([0.1, 0.4, 0.35, 0.8])
>>> roc_auc_score(y_true, y_scores)
0.75
auc
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.auc.html
>>> 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)
>>> metrics.auc(fpr, tpr)
0.75
可以看出,以上两个函数的返回值是一样的,即 auc 曲线下方的面积。