ROC曲线(Receptive Operating Characteristic,接受者工作曲线)和AUC(area under the curve,特指ROC曲线下的面积)通常用于评价一个二分类的优劣。AUC指标可以有两种解释
- 传统的曲线下面积
- A U C = P ( P 正 > P 负 ) AUC = P(P_{正} > P_{负}) AUC=P(P正>P负)。例如0.7的AUC可以表示,在70%的情况下,模型对正样本的打分高于负样本。
ROC曲线的纵坐标是真阳率(TPR),横坐标是假阳率(FPR)
下面解释图中四个点和一个曲线
- A点:这是一个完美的分类器
- B点:最糟糕的分类器
- C点:分类器全部输出正样本
- D点:分类器全部输出负样本
可以看出,曲线越接近左上角,该分类器的性能越好。
如何绘制ROC曲线
- ROC:通过调整模型预测的阈值可以得到不同的点,将这些点连成的一条曲线。
显然,对于一个特定的分类器和特定的数据集,其真阳率和假阳率都是一个定值。那么就需要人为的改动模型认为是正类的概率阈值,从而得到多组(TPR, FPR)。
实际操作就是,先按每个测试样本的概率值排序,然后从高到低的将概率值作为阈值。当测试样本的正样本概率大于等于阈值时输出为正,否则为负。这样有多少组样本就能得到多少个ROC上的点。
代码实现
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
y_score = rdf.fit(train_x, train_y).predict_proba(test_x)
fpr, tpr, thre = roc_curve(test_y, y_score[:, 1])
roc_auc = auc(fpr, tpr)
def drawRoc(roc_auc,fpr,tpr):
plt.subplots(figsize=(7, 5.5))
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()
drawRoc(roc_auc, fpr, tpr)