机器学习入门 10-1 准确度的陷阱和混淆矩阵

2020-03-27 10:24:40 浏览数 (1)

理想和现实总是有差距的,幸好还有差距,不然,谁还稀罕理想?

全文字数:3767字

阅读时间:12分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。本小节探讨使用分类准确度指标可能会引发的问题,对于极度偏斜的数据使用分类准确度并不能准确的评价算法的好坏。最后介绍混淆矩阵。

a 分 类 准 确 度 的 问 题

前几个章节介绍过衡量回归算法以及分类算法的指标:

  • 对于回归算法来说,介绍过MSE、MAE和RMSE,最后介绍了衡量回归算法最好的指标R squared;
  • 对于分类算法来说,只介绍过分类准确度accuracy,并在前面的分类问题中一直使用这个指标;

目前对于分类算法的评价一直使用分类准确度这个指标,当然这并不代表分类准确度这个指标已经足够的好。其实分类准确度这个指标在评价分类算法的时候,有一个很重要的问题的。

接下来通过介绍分类准确度的问题,进而衍生出分类算法的评价问题。对于分类算法的评价要比回归算法复杂的多,相对应的指标也有很多,具体选取什么样的指标需要根据实际情况,根据数据集以及具体的应用场景来选择。

下面就来看看分类准确度到底有什么问题。这里举一个例子:现在有一个机器学习任务,这个任务需要搭建一个癌症预测系统,也就是说输入人的体检信息,这个癌症预测系统会根据体检的各项指标来判断这些体检信息所对应的人是否患有癌症。为了得到一个癌症预测系统,我们需要收集很多数据来训练模型。

▲分类准确度的问题

现在有了这样一个癌症预测系统,并且预测的准确率达到了99.9%,很多人会觉得准确率这么高,肯定是一个非常好的系统。

不过这个预测系统可能并不好。如果在实际情况下这种癌症本身的发病率只有0.1%,也就是说一个人患有癌症的概率为千分之一,这意味着这个癌症预测系统什么都不做只需要将所有的体检信息都预测为健康,在这种情况下一定会有99.9的准确率,因为毕竟人患有癌症的概率只有0.1%。这样一来这个癌症预测系统只是将所有的体检信息都预测为健康,相应的准确率却能够达到99.9%。

如果更极端一些,这种癌症的产生的概率为万分之一0.01%的话,意味着如果预测所有的人都是健康的,此时预测准确率就能够达到99.99%。如果我们真的训练一个机器学习算法,最终它的准确率为99.9%的话,这意味着这个机器学习算法是失败的,因为它比我们纯粹预测每个人都是健康时候得到的99.99%准确率还要低,这就是使用分类准确率来衡量一个分类系统的问题所在。

▲分类准确度的问题

什么时候会发生这种问题呢?当我们的数据是极度偏斜(Skewed Data)的时候会发生这种问题。之前使用的并没有这种极度偏斜的数据集,鸢尾花数据集中的三种花的个数都是差不多的,手写数字识别数据集中0-9这10个数字类别的样本数量分布也差不多。但是在这一小节检测癌症的例子中,癌症患者的人数和健康人数相比是极度小的,这就是一种典型的数据发生了偏斜的情况,这样的数据集称为Skewed Data,对于这样的数据集使用分类准确度指标的话很有可能会得到一个非常高的分类准确度,也正是因为这种情况我们需要引入其它指标来判断我们的分类算法到底是好还是坏。

总的来说,对于极度偏斜(Skewed Data)的数据,只使用分类准确度是远远不够的。这一章会逐渐介绍各种其它的指标,当应对这种极度倾斜的数据的时候也可以非常容易的看出这个分类算法是好还是坏。

b 混 淆 矩 阵

在这一小节,首先介绍一个非常基础的工具叫做混淆矩阵(Confusion Matrix)。先来看看对于一个作用在一组数据上的分类算法如何得到混淆矩阵,进一步就会看到通过这个混淆矩阵能够得到各种比分类准确度还要好的分类指标。

这一小节先来看一看对于二分类问题相应的混淆矩阵是如何创建的。这一章介绍的大多数指标主要也是针对二分类问题来说的,在这一章的最后会简单介绍一下多分类问题的混淆矩阵。

对于二分类问题来说,混淆矩阵实际上是一个(2, 2)的矩阵,也就是说混淆矩阵中一共有4个元素。

▲二分类问题的混淆矩阵

上图中最上面一行和最左边一列对应的就是这个混淆矩阵相应的行和列的名称,真正的数值分布在(2, 2)的矩阵中:

  • 矩阵中的每一行代表对于预测的问题来说相应的真实值是多少,这里将真实值写成0和1;
  • 矩阵中每一列代表使用分类算法进行预测的预测值是是多少,这里将预测值也写成0和1;

对于二分类问题来说对于将所有样本数据分成0和1两类,那么在真实的环境中,通常将:

  • 0称为Negative负的或者阴性;
  • 1称为Positive正的或者阳性;

通常在医院中进行一些疾病的检测,会用这种阴性、阳性来表示对应的检测结果。比如说检测结果为阳性Positive代表患病,如果是阴性Negative代表检测结果没有得病。当然这只是将这种二分类问题用于医疗环境中的一种说法,当然在其它的场景中同样可以使用这种0-Negative阴性、1-Positive阳性来表示。

这里需要提一下,对于这个混淆矩阵行代表的是真实值而列代表预测值,以及这种0、1排列的方式,这些都是一种约定俗成的习惯。但是并不排除在一些教科书中有一些其它的排列方式,比如表中第一行是1而第二行是0,第一列是1而第二列是0。不过咱们的这种排列方式是相对比较正规的更加符合大多数人习惯的一种排列方式,所以有些时候在一些资料中看到给出的混淆矩阵没有行标和列标,通常都是咱们的这种排列方式。

混淆矩阵比较重要,记忆方式也非常简单。首先行代表真实值,列代表预测值,对于二维矩阵来说,行相当于二维矩阵中的第1个维度,列相当于二维矩阵第2个维度,相对来讲真实值要放在预测值的前面,也就是说真实值占据第一个维度也就是行的维度,预测值占据第二个维度也就是列这个维度。而另一个方面在每一个维度上,都是按照顺序排列的,也就是0比1要小,所以第一行是0而第二行是1,第一列是0第二列是1。通过这种方式就可以非常简单的记住混淆矩阵的行和列代表什么以及每一行每一列对于分类问题是怎么排列的。

一旦有了这样的表格就可以在这个表格中写入内容。

▲True Negative

对于(0, 0)这一格其实就是行和列所表示的意思,代表的是样本真实值为0同时算法预测这个样本为0,所有符合条件的样本数量,这就是True Negative简称TN。简单来说就是样本真实值是Negative,同时我们的算法将样本正确的预测为Negative,算法预测样本为Negative正确,所以称为True Negative简称TN。

介绍清楚了(0, 0)位置,剩下的位置也比较简单。接下来填(0, 1)这个位置。

▲False Positive

对于(0, 1)这一格代表的是样本真实值为0,但是算法预测这个样本为1,所有符合条件的样本数量,这就是False Positive简称FP。简单来说就是样本真实值是Negative,但是我们的算法将样本错误的预测为Positive,算法预测样本为Positive错误,所以称为False Positive简称FP。

接下来填入(1, 0)位置。

▲False Negative

对于(1, 0)这一格代表的是样本真实值为1,但是算法预测这个样本为0,所有符合条件的样本数量,这就是False Negative简称FN。简单来说就是样本真实值是Positive,但是我们的算法将样本错误的预测为Negative,算法预测样本为Negative错误,所以称为False Negative简称FN。

最后填入(1, 1)位置。

▲Ture Positive

对于(1, 1)这一格代表的是样本真实值为1,同时算法预测这个样本为1,所有符合条件的样本数量,这就是True Positive简称TP。简单来说就是样本真实值是Positive,同时我们的算法将样本正确的预测为Positive,算法预测样本为Positive正确,所以称为True Positive简称TP。

c

混 淆 矩 阵 小 例 子

这里举一个简单的小例子,依然以之前的癌症预测为例。现在一共有1万个人的体检信息,假设有一个模型算法对这1万个人的体检信息进行预测,预测这1万个人是否患有癌症。

  • 如果预测结果是1-Positive阳性代表患病;
  • 如果预测结果是0-Negative阴性代表没有患病;

假设模型算法对1万个人预测后的混淆矩阵如下图所示。

▲算法预测1万个人的混淆矩阵

对于(2, 2)的混淆矩阵:

  1. 对于(0, 0)位置表示的是对于这1万个人中有9978个人他们本身并没有患癌症,同时我们的算法正确预测出他们也并没有患癌症,这就是True Negative简称TN;
  2. 对于(0, 1)位置表示的是对于这1万个人中有12个人他们本身没有患癌症,但是我们的算法错误的预测他们患了癌症,这就是False Positive简称FP;
  3. 对于(1, 0)位置表示的是对于这1万个人中有2个人他们确实患有癌症,不过我们的算法错误的预测他们没有患癌症,这就是False Negative简称FN;
  4. 对于(1, 1)位置表示的是对于这1万人人中有8个人他们确实患有癌症,同时我们的算法也正确的预测出他们患有癌症,这就是True Positive简称TP;

通过上面的例子能够更加清晰的理解混淆矩阵中的四个位置的对应的具体含义。这一小节介绍了混淆矩阵这个工具,在下一小节来看看通过混淆矩阵,我们可以创建出怎样的评价指标,而这些评价指标为什么会比直接看整个算法的分类准确度要更加的好。在下一小节我们将进一步学习精准率和召回率这两个新的评价指标。

0 人点赞