机器学习入门 10-2 精准率和召回率

2020-03-27 10:05:57 浏览数 (1)

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节根据混淆矩阵工具计算精准率以及召回率。最后通过例子说明精准率和召回率在评价极度有偏的数据的分类任务上比准确率更好。

精准率&召回率

上一小节介绍了在分类任务中非常重要的工具混淆矩阵。通过混淆矩阵可以得到衡量分类算法是否优秀是否合理的更好指标。这一小节我们将介绍通过混淆矩阵才能得到的精准率和召回率两个非常重要的指标。

上一小节的最后我们举了一个小例子:在癌症预测系统中对1万个人进行是否患有癌症的分类任务。为了方便依然使用上一小节用到的混淆矩阵为例。

▲癌症预测系统的混淆矩阵

首先来看一下什么叫做精准率?

▲精准率(precision)

精准率的英文名为precision,对应的公式为TP / (TP FP),其中:

  • TP(True Positive)表示样本的真实值为1,并且算法正确预测样本为1,所有符合条件的样本数量;
  • FP(False Positive)表示样本的真实值为0,但是算法错误预测样本为1,所有符合条件的样本数量;

就本例的混淆矩阵而言,TP = 8, FP = 12,因此准确率 = 8 / (8 12) = 0.4。精准率就是算法预测样本为1,预测正确的概率是多少?对于精准率来说,它的分母相当于是算法预测值为1的这一列的总和,也就是算法预测样本为1的样本数量,而分子是指算法预测样本为1真实的样本也为1的样本数量,也就是算法预测为1时预测正确的样本数量。

为什么这样定义精准率,这是因为在有偏的数据中,将分类为1作为我们真正关注的对象。比如在医疗中我们将类别1表示为患病的病人,对于上面癌症预测系统对应的混淆矩阵来说,这个精准率就是指算法预测患有癌症预测成功的概率,上面得到的精准率为40%(0.4),可以解释为算法每做100次的癌症预测,平均下来会有40次是预测正确的,这就是准确率的含义。还比如在金融系统中,想要预测一个人申请信用卡银行是否有风险,这个时候通常把认为有风险的那类人表示为类别1,这是因为有风险的这一类人才是我们此时任务关注的对象。总的来说对于这种有偏数据的分类问题,通常将类别1作为我们关注的那个事件,精准率就是算法预测为我们关注的事件(预测值为1),算法预测正确的概率。

与精准率相对应的另外一个指标叫做召回率。

▲召回率(recall)

召回率的英文名为recall,对应的公式为TP / (TP FN),其中:

  • TP(True Positive)表示样本的真实值为1,并且算法正确预测样本为1,所有符合条件的样本数量;
  • FN(False Negative)表示样本的真实值为1,但是算法错误预测样本为0,所有符合条件的样本数量;

就本例的混淆矩阵而言,TP = 8, FN = 2,因此准确率 = 8 / (8 2) = 0.8。对于召回率来说,分母是真实值为1的那一行,也就是所有真实值为1的样本数量,分子和准确率的分子相同都是TP,都表示样本真实值为1,并且算法预测正确,所有符合条件的样本数量。召回率就是我们关注的那个事件真实的发生了(真实值为1),在真实发生的这些样本中,算法预测正确的概率。

对于本例而言,混淆矩阵中1万个病人中实际有10个患有癌症的人(真实值为1),而在这10个患有癌症的人中,算法成功预测出8个患有癌症的人。召回率可以简单的解释成每当有100个患有癌症的人,对于这个癌症预测系统的算法来说,我们能够成功识别出其中的80个患有癌症的人。

至此应该相对感性的理解了精准率和召回率。一定要注意区分这两个指标是不同的,这里再次强调一下:精准率是指算法做了100次分类为1的预测,算法预测正确的概率。召回率是指有100个关注事件(真实值为1)发生,算法能够正确识别出的概率。

▲精准率和召回率

在癌症预测的例子中,精准率是指算法预测为患病的100个人中有多少是预测正确的。召回率是指真实有100个患有癌症的病人,算法能够从中正确挑出多少个患有癌症的人。这两个指标比较容易混淆,一定要理解透彻。

下面是网上一个能够更好的说明精准率和召回率的图示。如果只看混淆矩阵不能清晰理解这两个指标的话,可以借助下面的图来理解。

▲精准率和召回率的另一种解释

上图中的整个平面可以理解成所有的样本数据,在这个平面中的每一个点都代表一个样本。现在把这个平面竖直划分成了两个部分,假设此时左半部分是我们关注的事件,也就是分类为1对应的那些样本数据点(比如在癌症预测系统中,左边的部分意味着所有患有癌症的人),右半部分是所有没有患癌症的健康人群。

此时预测的算法就是上图中的圈,其中圈中会有一部分样本,这些被圈住的样本都是被算法预测为患有癌症的人。但是预测算法会犯错,圈中左部分相当于真正找到了这些癌症病人,相当于混淆矩阵中的TP(True Positive),而右部分是预测算法把没有患癌症的人错误预测成患有癌症的人,相当于混淆矩阵中的FP(False Positive)。

这种情况下看看精准率和召回率在这个图中是怎么表示的?其中精准率就是我们算法预测正确也就是绿色的半圈除以算法预测所有的样本为1也就是整个圈中相应的样本数量。召回率是指我们算法预测正确的这部分除以所有真实患有癌症的病人,也就是左边这个矩形部分的所有样本。这就是精准率和召回率的不同,在这里对于精准率和召回率来说,关键在于分母不同,由于分母不同,相应指标的解读也就不一样。

为什么精准率和召回率比准确率更好?

最后简单看一下,为什么精准率和召回率比前面介绍的分类准确度更好?上一小节中,对于极度偏差的数据构建一个算法,比如有1万个人癌症的发病率为千分之一,也就是在1万个人中只有10个人患有癌症,那么我们完全可以预测1万个人都是健康的。在这种情况下,系统的预测准确率是99.9%。接下来看看在这种极度偏差的数据中,精准率和召回率是怎样的。预测系统的混淆矩阵如下所示。

▲混淆矩阵

对于上面的混淆矩阵:

  • 真实值为0的一行为所有健康的人,其中一共有(TN FP) = (9990 0) = 9990个人;
  • 真实值为1的一行为所有患有癌症的人,其中一共有(FN TP) = (10 0) = 10个人;

如果预测系统预测所有人都是健康的,也就是算法预测全部在预测值为0的部分,而在预测值为1的部分全都是0。此时的算法的准确度为99.9%,因为算法把9990个健康的人全部预测对了,我们知道对于这样一个预测算法,虽然准确率非常高,但是对于解决真实的问题一点帮助都没有。

对于上面的这种极度偏差数据的混淆矩阵,精准率为算法预测为1并且真实值为1的样本总数除以算法预测为1的所有样本总数,即TP / (TP FP) = 0 / (0 0) = 0,这里由于分母是0除法没有意义,所以这个精准率本身没有意义,通常直接定义没有意义的精准率为最低值0。而召回率为算法预测为1并且真实值为1的样本总数除以所有真实患有癌症的总人数,即TP / (TP FN) = 0 / (10 0) = 0,召回率同样为0没有意义。

虽然这样的一个预测算法准确率能够达到99.9%,但是与之对应的精准率和召回率都是最低值0。通过精准率和召回率这两个指标可以判断这个预测算法完全没有用,这就是为什么在极度有偏的数据中不看准确率,而选择看精准率和召回率两个指标的原因。通过这两个指标才能够更好的评价分类算法的好坏。这一小节介绍了精准率和召回率两个非常重要的指标,在下一小节就将通过实际的编程来实现前面两个小节中所介绍的内容。

0 人点赞