深入理解模型评估之ROC曲线和AUC

模型评估概述

在选择不同模型对训练数据完成建模,并对测试数据完成预测后,我们需要面临的一个重要问题就是如何比较不同模型的优劣,因此如何定义模型评估的标准是至关重要的。分类问题,作为机器学习中最基础也是最重要的一类问题,目前已经有了许多模型评估的准则。

这里以二分类问题为例,最简单粗暴的就是accuracy(准确率), 简单来说就是对于测试集来说,(预测正确的样本数)/(样本总数)。也就是下面混淆矩阵中的(TP+TN)/(TP+FP+FN+TN),但是仅使用准确率去评估模型是存在问题的,比如当我们的数据集正负样本不均衡时,比如正样本占99%,那么即使我们有一个傻瓜模型,永远预测样本标签为正,也能获得99%的准确率。因此,准确率的结果很大程度受我们样本中占大比例的类别的影响。但是往往我们的研究重点恰恰是那一小撮负标签样本,那么这时准确率这一标准作为模型评估准则的问题就被进一步放大了。这个问题的一个比较直接的解决办法就是用各个类别下分别的预测准确率的算术平均值作为评价指标。
在这里插入图片描述
除此之外,比较常见的还有Precision(精准率) =TP/(TP+FP), 以及 Recall(召回率)=TP/(TP+FN)。这两个指标存在互为矛盾的关系,为了提升精准率,分类器应该变得尽可能‘保守’,只有在更有把握时才将样本标记为正样本,但是为了提升召回率,分类器应该尽可能‘激进’,尽可能多地将样本标记为正样本,抱着宁可错杀一百,不放过一个心态进行分类。因此,对于一个模型,尽管可能它的Precision非常高,但是它的召回率往往很低。这样的模型足够优秀吗?不见得,一个具体的例子就是对于用户的产品推荐,某个保守的分类器也许能做到给用户推荐的5个产品都是用户喜欢的,可以说Precision是100%,但是可能用户实际喜欢的产品有很多,比如100个,因此召回率只有5%,显然这个推荐系统的效果并不理想。因此单单从精准率来衡量模型是不充分的,我们需要将连个够指标结合起来,因此就产生了F1指标,它是Precision和Recall的调和平均,相比于单一的Precision或者Recall, 用F1来评估模型的效果是一个更合理的选择。

除了上面所说的主要用于分类问题的模型评估,对于回归问题,一般常用的比如RMSE,MAE, MAPE 等等,这里就不展开了。再展开的话就偏题了哈哈

ROC

OK,我们开始进入正题。什么是ROC曲线呢?
还是回到我们的二分类问题。对于混淆矩阵中的4类TP,FP,TN,FN。我们定义两个指标:
1.TPR (True Positive Rate,也称为sensitivity)= (TP)/(TP+FN) 真阳性率
2. FPR (False Positive Rate,也称为1-specificity)=(FP)/(FP+TN) 假阳性率

我们发现所谓的真阳性率其实本质上和上文提到的召回率是一样的,只是换了个说法。那么这两个指标和ROC的关系是什么呢?当我们用二分类模型比如logisitc regression进行预测时,一般情况下,我们会使用alpha=0.5的
阈值,当模型结果大于0.5,我们将该样本预测为正样本,反之预测为负样本
但是某些情况下,我们也会适度地调整该阈值。但我们设定不同的阈值时,对应情况下我们的预测也会发生改变,导致前面的TPR 和 FPR随之发生改变。我们将不同阈值下(FPR,TPR) 的value pair 绘制在二维直角坐标下,得到的就是所谓的ROC曲线。

现在我们已经明白了ROC曲线的定义,现在我们再来深入思考一下ROC曲线会有怎样的形状呢?

当阈值减小,意味着我们将更多的样本预测为正,那么原始样本中正样本可以越来越彻底得被挖掘出来,那么我们的真阳性率必然是随之上升。 那么我们再来看一下假阳性率,随着我们将更多的样本预测为正,虽然真实的正样本被成功预测的概率上升,但是随着而来产生的一个问题就是,有更多负样本也被错误地预测为正样本了。那么FP 的值迅速增加,TN的值下降,导致假阳性率也随着阈值的降低而增加了。

因此,当阈值降低时,TPR & FPR 同时上升。考虑当阈值降低为0时(虽然实际不太可能),我们将所有样本预测为正,那么 FN 和 TN 均为0(因为我们已经没有任何样本预测为负了),因此 TPR 和 FPR 均为1,对应(1,1)坐标。我们再考虑相反的情况,当阈值上升到1,所有样本均预测为负,那么TP 和TN 均为0,那么TPR 和 FPR 均为0,对应坐标(0,0).

结论:ROC曲线是一条经过(0,0)和(1,1)的递增曲线。

说完了ROC的含义以及对ROC的理解,下一个问题就是,我们为什么使用ROC,或者说相比于其他的指标比如精准/召回构成的图像(PR 曲线), ROC有什么优点呢?
这个问题的答案就是ROC曲线不受样本不均衡的影响。为什么呢?简单来说就是这两个指标的计算都是基于某一类样本(混淆矩阵的某一行),要么完全基于真实正样本,要么完全基于真实负样本。因此,另一个类别样本数量的变化完全不会对当前类别下的指标产生影响。因此,相对而言,ROC曲线在样本比例变动的时候不会发生明显波动。

关于更具体的解释,大家可以去看一下这篇博客,写的非常棒!

AUC

说完了ROC曲线,现在再来看AUC,就没有任何问题了。简单来说,AUC就是ROC曲线与x轴围成的区域的面积,说白了就是AUC曲线下方的面积。
关于AUC的理解,我认为大家看一下这篇博客就能完全理解背后的逻辑了,真的写的很棒!

python计算AUC

相信熟悉Python以及机器学习的朋友都对sklearn这个库不陌生,在sklearn的metrics模块已经帮我们封装好了计算AUC的接口,我们可直接调用,举个简单的栗子。

from sklearn import metrics
from sklearn.metrics import auc
import numpy as np

y_true=np.array([1,1,0,0]) #真实标签,1代表正样本,0代表负样本
y_pred=np.array([0.8,0.4,0.5,0.1]) #二分类输出,表示正样本概率

FPR,TPR,thresholds=metrics.roc_curve(y_true,y_pred)
metrics.auc(FPR,TPR)
#结果:0.75

OK, that’s it! 以上就是这篇博客的全部内容,谢谢大家的阅读!

参考:
1.百面机器学习
2.auc是ROC曲线面积的直观理解
https://blog.csdn.net/hbsydsy/article/details/113913795?utm_term=auc%E6%9B%B2%E7%BA%BF%E4%B8%8B%E9%9D%A2%E7%A7%AF%E6%84%8F%E4%B9%89&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-0-113913795&spm=3001.4430
3.为什么ROC曲线不受样本不均衡问题的影响https://blog.csdn.net/songyunli1111/article/details/82285266

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值