ROC AUC的介绍 ROC和AUC介绍以及如何计算AUC
简单总结一下:
通常二分类输出概率的情况下会使用ROC AUC评估分类起的好坏。
ROC是真阳性率(TPR)和假阳性率(FPR)组成的曲线,AUC是ROC曲线下的面积。
那什么是真阳性率和假阳性率?
混淆矩阵:
TPR = TP/(TP+FN)
FPR = FP/(FP+TN)
那么混淆矩阵是怎么得到的?
首先,要有一个阈值,根据预测概率将预测结果分为positive,negative,然后对比标签即可得到TP,FN,FP,TN四个值。
一个阈值得到一个混淆矩阵,一个混淆矩阵只有一对TPR,FPR,要画出曲线需要多个阈值。
那么这些阈值是怎么得到的?
对预测得到的概率进行从大到小排序,然后从前到后,使用预测分数作为阈值,在这个预测结果前面的(包括这个)为positive,在这个结果后面的为negative,配合标签计算TPR,FPR。这样会得到和预测数据同样多的TPR,FPR对。
那么,AUC这个面积该怎么理解?
从图形上来看,AUC就是TPR>FPR的概率+0.5,即auc=p(TPR>FPR)+0.5
知乎上有人是这么理解的
他的描述即auc=p(TPR>FPR),我认为他少了个0.5
为什么要对概率进行排序呢?
为了处理概率值相等的情况。排序后不论是否相等,只按前后顺序计算。
参考ROC曲线和AUC值的计算
不仅限于概率
ROC AUC不仅仅适用于预测值为概率,只要是分数都可以
不仅限于二分类
对于多分类问题,可以变成多个二分类,两两绘制ROC 计算AUC。代码参考Plot ROC curves for the multiclass problem
二分类的代码可以这样写,顺便绘出ROC曲线
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(np.array(train['TARGET']), train_preds[:,1])
roc_auc = auc(fpr, tpr)
print('ROC curve(area = %0.3f)'% roc_auc)
plt.figure()
lw=2
plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve(area = %0.3f)'% roc_auc)
plt.plot([0,1], [0,1], color='navy', lw=lw, 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('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()