机器学习教程 之 模型性能评价:受试者工作特征曲线 ROC与AUC

模型性能评价是每一位机器学习工作者都需要掌握的一项技能,除了最常见的损失函数比较,今天再向大家介绍一种稍微高明一点儿的方法 ROC与AUC

在正式介绍ROC曲线之前,我们还需要介绍一些额外的知识:分类结果混淆矩阵
这里写图片描述
对于二分类问题,可将样本根据真实类别与学习器预测类别的组合划分为真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN),则显然有了 T P + F P + T N + F N =

很多学习器是为测试样本产生一个预测概率,然后将这个预测值与一个分类阈值进行比较,若大于阈值则分为正类,否则为反类。例如,神经网络在一般情形下是对每一个测试样本预测出一个0~1之间的预测概率,然后将这个值与0.5比较,大于0.5则判为正例,否则为反例。这个预测概率的好坏直接决定了学习器的泛化能力。实际上,根据这个预测结果,我们可以将测试样本进行排序,“最可能“是正例的排在前面,“最不可能“是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点“将样本分类两部分,前一部分判定为正例,后一部分判定为反例。这便是ROC曲线的应用背景,从这里我们应该知道ROC曲线适用于模型处理二分类问题的情形。

在不同的应用任务中,我们可以根据任务需求来采用不同的截断点,例如若我们更重视“查准率“,则可选择排序中靠前的位置进行截断;若更重视“查全率“,则可以选择排序中靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能“的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。

ROC全称是“受试者工作特征“曲线,它源于“二战“中用于敌机检测的雷达信号分析技术。我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,没吃计算出两个重要量的值,分别以它们为横纵坐标作图,就得到了“ROC“曲线。ROC曲线的纵坐标是“真正利率“(TPR),横轴是“假正例率“(FPR),两者分别定义为

T P R = T P T P + F N

F P R = F P T P + F P

显示ROC曲线的图称为ROC图。在进行学习器比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性的断言两者孰优孰劣。此时若一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area under ROC Curve)。

python的sklearn中计算ROC与AUC的函数

import matplotlib.pyplot as plt  
from sklearn.metrics import roc_curve, auc  

fpr,tpr,threshold = roc_curve(y_test, y_score) ###计算真正率和假正率  
roc_auc = auc(fpr,tpr) ###计算auc的值  

plt.figure()  
lw = 2  
plt.figure(figsize=(10,10))  
plt.plot(fpr, tpr, color='darkorange',  
         lw=lw, label='ROC curve (area = %0.2f)' % roc_auc) ###假正率为横坐标,真正率为纵坐标做曲线  
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')   
plt.xlabel('False Positive Rate')  
plt.ylabel('True Positive Rate')  
plt.title('Receiver operating characteristic example')  
plt.show()  

参考文献
[1] 周志华. 机器学习
[2] https://blog.csdn.net/lz_peter/article/details/78054914

发布了74 篇原创文章 · 获赞 269 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Liangjun_Feng/article/details/80800268