召回率(机器学习模型的衡量不止准确率:还有精度和召回率)

机器学习模子的权衡不止准确率:另有精度和召回率

我们倾向于使用准确率,是由于熟习它的界说,而不是由于它是评价模子的最佳东西!精度(查准率)和召回率(查全率)等目标对权衡机器学习的模子功能好坏常基本的,特别是在不屈衡分布数据集的案例中,在周志华传授的「西瓜书」中就特别具体地先容了这些看法。

GitHub 地点:
https://github.com/WillKoehrsen/Data-Analysis/blob/master/recall_precision/recall_precision_example.ipynb

为分类职责选择准确的权衡目标

倘使或人声称创建了一个可以识别登上飞机的可怕分子的模子,并且准确率(accuracy)高达 99%。你信赖吗?好了,有这么一个模子:将从美国机场腾飞的一切搭客简便地标注为非可怕分子。已知美国整年均匀有 8 亿人次的搭客,并且在 2000-2017 年间共发觉了 19 名可怕分子,这个模子到达了接近完善的准确率——99.9999999%。这听起来的确令人印象深入,但是我猜疑美国国土宁静局不会在近期置办这个模子。只管这个模子拥有接近完善的准确率,但是在这个成绩中准确率显然不是一个切合的度量目标。

可怕分子检测是一个不屈衡的分类成绩:我们必要辨别的种别有两个——可怕分子和非可怕分子,此中一个种别代表了极大大多的数据点。另一个不屈衡分类成绩显如今当疾病在群众中的发病率很低时的疾病监测。在这两种情况下,正例种别——疾病或可怕分子,远远少于负例种别的数目。这种成绩是数据封建中比力稀有的例子,此中准确率并不是评价模子功能的很好的权衡标准。

直观地说,我们晓得在可怕分子检测的成绩中公布一切的数据点为负例(非可怕分子)是毫无裨益的,相反,我们应该聚焦于正例(可怕分子)的识别。直觉报告我们,我们应该最大化的是统计学上称为召回率或查全率(recall)的权衡目标,大概是最大化模子找到数据会合一切干系案例的才能。召回率的准确界说是:真正例除以(真正例+假反例)的和,如下图所示。真正例(true positives)是被真确分类的正例数据点,假反例(false negatives)是被错误分类的负例数据点。在可怕分子检测的例子中,TP 是被准确识别的可怕分子,FN 是模子误分类为非可怕分子的可怕分子的数据点。召回率可以被了解为模子找到数据会合一切感兴致的数据点的才能。

你约莫注意到了这个等式中的一些细节:假如我们将一切的一局部都猜测为可怕分子,那么模子的召回率就是 1.0!如此我们就取得了一个完善的模子吗?固然,不是!与数据封建中的绝大大多看法一样,在我们想要最大化的目标之间存在一个权衡。在召回率的例子中,当召回率增大的时分,精度就会减小。相反,直觉报告我们,一个将 100% 的搭客标志为可怕分子的模子约莫是不成用的,由于我们必需克制每一个搭客的飞行。统计学为我们提供了表达直觉的词汇:这个新的模子是低精度(precision)的,大概说较低的仅识别干系数据点的才能。

精度被界说为真正例除以(真正例+假正例)的和,如下图所示。假正例(FP)指的是模子将实践上是反例的样本误判为正例的情况,大概说,在我们的例子中指的是那些被模子推断为可怕分子,而实践上不是可怕分子的一局部。召回率(查全率)表达的是模子找到数据会合干系实例的才能,而精度(查准率)表达模子找到的数据点中实践干系的比例。

如今我们可以看到,第一个模子给一切的一局部标上了非可怕分子的标签,这个模子是不克不及使用的。只管它有着近乎完善的准确率,但是它的精度和召回率都是零,由于没有 TP(真正例)!假定我们稍微地修正一下模子,然后将一个一局部准确地识别为可怕分子。如今,精度是 1(没有假正例,FP),但是召回率很低,由于实践上会有很多假反例(FN)。假定我们走到了另一个极度,将一切的搭客标志为可怕分子,召回率就会是 1——我们将捉住每一个可怕分子,但是精度会特别低,我们终极会拘留很多无辜的人。换言之,随着精度的增长,召回率会低落,反之亦然。

精度—召回率权衡

团结精度和召回率

在某些情况中,我们约莫必要以捐躯另一个目标为代价来最大化精度大概召回率。比如,在之前的例子中,在对患者举行随访反省的开头疾病筛查中,我们约莫渴望取得接近于 1 的召回率—我们想找到一切实践抱病的患者。假如随访反省的代价不是很高,我们可以承受较低的精度。但是,假如我们想要找到精度和召回率的最佳组合,我们可以使用 F1 score 来对两者举行团结。

F1 score 是对精度和召回率的调安静均:

我们使用调安静均而不是简便的算术均匀的缘故是:调安静均可以处罚极度情况。一个具有 1.0 的精度,而召回率为 0 的分类器,这两个目标的算术均匀是 0.5,但是 F1 score 会是 0。F1 score 给了精度和召回率相反的权重,它是通用 Fβ目标的一个特别情况,在 Fβ中,β 可以用来给召回率和精度更多大概更少的权重。(另有其他办法可以团结精度和召回率,比如二者的几多均匀,但是 F1 score 是最常用的。) 假如我们想创建一个具有最佳的精度—召回率均衡的模子,那么就要实验将 F1 score 最大化。

可视化精度和召回率

我以前向你抛出了几个新术语,接下去我将经过一个例子向你展现它们在实践中是怎样使用的。在使用之前,我们要简便地谈一谈精度和召回率的看法。

起主要先容一下殽杂矩阵(confusion matrix),给定一个模子的猜测标签时,它可以被用来快速盘算精度和召回率。二分类的殽杂矩阵统共包含四个不同的后果:真正例(TP)、假正例(FP)、真反例(TN),以及假反例(FN)。列表现真实值,行表现猜测值。行和列的交织点指的就是这四种后果。比如,假如我们将一个数据点猜测为正例,但是它实践上是反例,那么这就是一个假正例。

用殽杂矩阵盘算精度和召回率必要找到矩阵中对应的值,并使用以下的等式举行盘算。

其他的用来展现分类模子功能的可视化武艺是受试者特性曲线(ROC 曲线,Receiver Operating Characteristic curve)。别被这个繁复的名词吓到!这个头脑是相当简便的:ROC 曲线展现了当改动在模子中识别为正例的阈值时,召回率和精度的干系会怎样厘革。假如我们有一个用来识别疾病的模子,我们的模子约莫会为每一种疾病输入介于 0 到 1 之间的一个分数,为了将某个病人标志为患有某种疾病(一个正例标签),我们为每种疾病在这个范围内设置一个阈值,经过改动这个阈值,我们可以实验完成切合的精度和召回率之间的均衡。

ROC 曲线在 Y 轴上画出了真正例率(TPR),在 X 轴上画出了假正例率 (FPR)。TPR 是召回率,FPR 是反例被报告为正例的概率。这两者都可以经过殽杂矩阵盘算取得。

下图是一个典范的 ROC 曲线:

玄色对角线表现随机分类器,赤色和蓝色曲线表现两种不同的分类模子。关于给定的模子,只能对应一条曲线。但是我们可以经过调停对正例举行分类的阈值来沿着曲线挪动。通常,当低落阈值时,会沿着曲线向右和向上挪动。

在阈值为 1.0 的情况下,我们将位于图的左下方,由于没有将任何数据点识别为正例,这招致没有真正例,也没有假正例(TPR = FPR = 0)。当低落阈值时,我们将更多的数据点识别为正例,招致更多的真正例,但也有更多的假正例 ( TPR 和 FPR 增长)。终极,在阈值 0.0 处,我们将一切数据点识别为正,并发觉位于 ROC 曲线的右上角 ( TPR = FPR = 1.0 )。

最初,我们可以经过盘算曲线底下积 ( AUC ) 来量化模子的 ROC 曲线,这是一个介于 0 和 1 之间的度量,数值越大,表现分类功能越好。在上图中,蓝色曲线的 AUC 将大于赤色曲线的 AUC,这意味着蓝色模子在完成准确度和召回率的权衡方面更好。随机分类器 (黑线) 完成 0.5 的 AUC。

回忆

我们以前先容了几个推断模子功能的属性,每个属性的界说都不是很繁复,但是团结在一同就有点繁复了。让我们经过一个例子做一个快速的回忆来安稳一下这些头脑。

关于二分类成绩:

  • 真正例(TP):实践上是正例的数据点被标志为正例

  • 假正例(FP):实践上是反例的数据点被标志为正例

  • 真反例(TN):实践上是反例的数据点被标志为反例

  • 假反例(FN):实践上是正例的数据点被标志为反例

召回率和精度权衡目标:

  • 召回率(R):分类模子识别一切干系实例的才能

  • 精度(P):分类模子仅仅前往干系实例的才能

  • F1 score:使用调安静均团结召回率和精度的目标

召回率和精度的可视化:

  • 殽杂矩阵:展现分类模子的真实和猜测标签的对应后果。

  • 受试者特性曲线(ROC 曲线):画出真正例率(TPR)和假正例率(FPR),并将此作为模子归类正例阈值的函数。

  • 曲线底下积(AUC):基于 ROC 曲线下方的面积,盘算分类模子总体功能的目标。

实例使用

我们的职责是为 100 名病人诊断一种在平凡人群中抱病率是 50% 的疾病。我们将假定一个黑盒模子,我们输入关于患者的信息,并取得 0 到 1 之间的分数。我们可以改动将患者标志为正例 (有疾病) 的阈值,以最大化分类器功能。我们将以 0.1 为增量从 0.0 到 1.0 评价阈值,在每个步调中盘算 ROC 曲线上的精度、召回率、F1 score 以及在 ROC 曲线上的地点。以下是每个阈值的分类后果:

模子在每个阈值下的后果

我们将以阈值为 0.5 为例盘算对应的召回率、精度、真正例率、假正例率。起首我们取得殽杂矩阵:

阈值为 0.5 时的殽杂矩阵

我们可以使用殽杂矩阵中的数值来盘算召回率、精度和 F1 score:

然后盘算真正例率和假正例率来确定阈值为 0.5 时,模子在 ROC 曲线上对应的点。

为了取得整个 ROC 曲线,我们在每个阈值下都举行这个历程。你约莫会想,这是相当无趣的,以是,我们用 python 言语来代替手工盘算。用来做这些盘算的 Juoyter Notebook 放在了 github 上,每一局部都可以看到。终极的 ROC 曲线如下所示,点外表的数字是阈值。

在这里我们可以看到,一切的看法都搜集到一同了!在阈值即是 1.0 的点,我们没有将任何病人归类为抱病,因此模子的召回率和精度都是 0。随着阈值的减小,召回率增长了,由于我们发觉更多的患者患有该疾病。但是,随着召回率的增长,精度会低落,由于除了增长真正例之外,还会增长假正例。在阈值为 0.0 的时分,我们的召回率是完善的——我们发觉一切的患者都患有这种疾病——但是精度很低,由于有很多假正例。经过变动阈值并选择最大化 F1 score 的阈值,我们可以沿着给定模子的曲线挪动。要改动整个曲线,我们必要创建一个不同的模子。

在每个阈值下终极模子的统计量如下表:

基于 F1 score,全体最佳的模子显如今阈值为 0.5 的场合。假如我们想要在更大水平上重申精度大概召回率,我们可以选择这些目标上最佳时对应的模子。

结论

我们倾向于使用准确率,由于每一局部都晓得它意味着什么,而不是由于它是完成职责的最佳东西!固然更合适的度量目标 (如召回率和精度) 看起来约莫很生疏,但我们以前直观地域解了为什么它们在某些成绩 (如不屈衡的分类职责) 中有着更好的体现。统计学为我们提供了盘算这些目标的情势化界说和方程。数据封建是关于寻觅处理成绩的准确东西的学科,并且在开发分类模子时,我们常常必要跨越准确率(accuracy)的单一目标。了解召回率、精度、F1 score 和 ROC 曲线使我们可以评价分类模子,并应使我们猜疑对否有人仅仅在吹捧模子的准确率,尤其是关于不屈衡的成绩。正如我们所看到的,准确率(accuracy)并不克不及对几个紧张成绩提供有效的评价,但如今我们晓得怎样使用更智慧的权衡目标!

原文链接:
https://towardsdatascience.com/beyond-accuracy-precision-and-recall-3da06bea9f6c

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片