找回密码
 立即注册
搜索

机器学习中的AUC-ROC曲线

AUC-ROC曲线

你曾经建立了你的机器学习模型-那么接上去呢?你需求对它停止评价,并验证它有多好(或有多坏),这样你就可以决议能否完成它。这时就可以引入AUC-ROC曲线了。

这个名字能够有点夸张,但它只是说我们正在计算“Receiver Characteristic Operator”(ROC)的“Area Under the Curve”(AUC)。

别担心,我们会详细了解这些术语的含义,一切都将是小菜一碟!




如今,只需知道AUC-ROC曲线可以协助我们可视化机器学习分类器的功能。虽然它只适用于二值分类成绩,但我们将在最后看到如何扩展它来评价多类分类成绩。

我们还将讨论敏感性(sensitivity )和特异性(specificity )等主题,由于这些是AUC-ROC曲线背后的关键主题。
目录

    什么是敏感性和特异性?预测概率AUC-ROC曲线是什么?AUC-ROC曲线是如何工作的?Python中的AUC-ROC用于多类分类的AUC-ROC
什么是敏感性和特异性?

混淆矩阵:




从混淆矩阵中,我们可以得到一些在后面的文章中没有讨论过的重要度量。让我们在这里谈谈他们。
敏感度/真正例率/召回率





敏感度告诉我们什么比例的正例得到了正确的分类。

一个简单的例子是确定模型正确检测到的实践病人的比例。
假反例率





假反例率(FNR)告诉我们什么比例的正例被分类器错误分类。

更高的TPR和更低的FNR是可取的,由于我们希望正确地分类正类。
特异性/真反例率





特异性告诉我们什么比例的反例类得到了正确的分类。

以敏感性为例,特异性意味着确定模型正确辨认的健康人群比例。
假正例率





FPR告诉我们哪些负类被分类器错误分类。

更高的TNR和更低的FPR是可取的,由于我们想正确地分类负类。

在这些目的中,敏感性特异性能够是最重要的,我们稍后将看到如何运用它们来构建评价目的。

但在此之前,我们先来了解一下为什么预测概率比直接预测目的类要好。
预测概率

机器学习分类模型可以直接预测数据点的实践类别或预测其属于不同类别的概率。

后者使我们对结果有更多的控制权。我们可以确定本人的阈值来解释分类器的结果。这更为慎重!

为数据点设置不同的分类阈值会有意中改变模型的敏感性和特异性。

其中一个阈值能够会比其他阈值给出更好的结果,这取决于我们的目的是降低假反例还是假正例的数量。

请看下表:




度量值随阈值的变化而变化。我们可以生成不同的混淆矩阵,并比较上一节中讨论的各种度量。

但这样做并不明智。相反,我们所能做的是在这些度量之间生成一个图,这样我们就可以很容易地看到哪个阈值给了我们一个更好的结果。

AUC-ROC曲线正好处理了这个成绩!
AUC-ROC曲线是什么?

ROC曲线是二值分类成绩的一个评价目的。它是一个概率曲线,在不同的阈值下绘制TPR与FPR的关系图,从本质上把“信号”与“噪声”分开。

曲线下面积(AUC)是分类器区分类的才能的度量,用作ROC曲线的总结。

AUC越高,模型在区分正类和负类方面的功能越好。




当AUC=1时,分类器可以正确区分一切的正类点和负类点。但是,假如AUC为0,那么分类器将预测一切的否定为一定,一切的一定为否定。




当0.5<AUC<1时,分类器很有能够区分正类值和负类值。这是由于与假反例和假正例相比,分类器可以检测更多的真正例和真反例。




当AUC=0.5时,分类器无法区分正类点和负类点。这意味着分类器要么预测一切数据点的随机类,要么预测常量类。

因此,分类器的AUC值越高,其区分正类和负类的才能就越好。
AUC-ROC曲线是如何工作的

在ROC曲线中,较高的X轴值表示假正例数高于真反例数。而Y轴值越高,则表示真正例数比假反例数高。

因此,阈值的选择取决于在假正例和假反例之间停止平衡的才能。

让我们深化一点,了解不同阈值下ROC曲线的外形,以及特异性和敏感性的变化。




我们可以尝试经过为每个对应于阈值的点生成混淆矩阵来了解此图,并讨论分类器的功能:




A点是敏感性最高,特异性最低的地方。这意味着一切的正类点被正确分类,一切的负类点被错误分类。

理想上,蓝线上的任何一点都对应于真正例率等于假正例率的状况。

这条线上的一切点都对应于属于正类的正确分类点的比例大于属于负类的错误分类点的比例的状况。




虽然B点与A点具有相反的敏感性,但具有较高的特异性。这意味着错误的负类点数量比上一个阈值要低。这表明此阈值比前一阈值好。




在C点和D点之间,在相反特异度下,C点的敏感性高于D点。这意味着,对于相反数量的错误分类的负类点,分类器预测的正类点数量更高。因此,C点的阈值优于D点。

如今,取决于我们要为分类器容忍多少错误的分类点,我们将在B点和C点之间停止选择,以预测你能否可以在PUBG中击败我。

“错误的希望比恐惧更风险。”——J.R.R.托尔金




E点是特异性最高的地方。也就是说没有假正例被模型分类。该模型能对一切的负类点停止正确的分类!假如我们的成绩是给用户提供完美的歌曲引荐,我们会选择这一点。

按照这个逻辑,你能猜出一个完美的分类器对应的点在图上的什么地位吗?

对!它将位于ROC图的左上角,对应于笛卡尔平面中的坐标(0,1)。在这里,敏感性和特异性都将是最高的,分类器将正确地分类一切的正类点和负类点。
Python中的AUC-ROC曲线

如今,要么我们可以手动测试每个阈值的敏感性和特异性,要么让sklearn为我们做这项工作。我们选择sklearn

让我们运用sklearn make_classification 方法创建恣意数据:

我将在此数据集上测试两个分类器的功能:

Sklearn有一个非常有效的方法roc_curve(),它可以在几秒钟内计算分类器的roc!它前往FPR、TPR和阈值:

可以运用sklearn的roc_auc_score()方法计算AUC得分:
0.9761029411764707 0.9233769727403157
我们还可以运用matplotlib绘制这两种算法的ROC曲线:




结果表明,Logistic回归ROC曲线的AUC分明高于KNN-ROC曲线。因此,我们可以说logistic回归在分类数据集中的正类方面做得更好。
用于多类分类的AUC-ROC

就像我之前说过的,AUC-ROC曲线只适用于二元分类成绩。但是,我们可以经过一对多技术将其扩展到多类分类成绩。

因此,假如我们有三个类0、1和2,那么class 0的ROC将如此生成,正例为类0,反例为非类0,也就是类1和类2。以此类推。

多类分类模型的ROC曲线可以确定如下:



结尾

我希望你发现本文有助于了解AUC-ROC曲线度量在衡量分类器功能方面的弱小功能。你会在工业界,甚至在数据迷信常常用到这个。最好熟习一下!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

大神点评3

qgfj2008 2020-7-6 22:07:39 显示全部楼层
沙发位出租,有意请联系电话:13888888888
回复

使用道具 举报

我了个去,顶了
回复

使用道具 举报

大佬,这是大佬
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies