如何计算每类二元分类的分数

数据挖掘 机器学习 分类 评估 混淆矩阵 二元分类
2022-02-22 07:24:07

Precision 的公式是 TP / TP + FP,但是如何将它单独应用于二进制分类问题的每一类, 在此处输入图像描述

例如,这里分别计算了 0 类和 1 类的精度、召回率和 f1 分数,我无法理解如何分别为每个类计算这些分数。

有人可以以这个混淆矩阵为例向我解释一下吗?

在此处输入图像描述

如果可能,请通俗易懂地解释。

谢谢

3个回答

您的混淆矩阵与您的分类报告不对应。您显示的矩阵也不是标准的:

  • 标签“真阳性”和“真阴性”令人困惑,因为这些术语只能用于分类状态(见下文)。他们的意思是“真正的阶级是积极的”和“真正的阶级是消极的”。
  • 它具有作为列的真实类和作为行的预测类,而它通常以真实类作为行和预测类作为列呈现。

与常规混淆矩阵相同:

 true classes
  |
  |
  v
      0    1    <---- predicted classes
  0   15   10
  1   15   60

例如,有 10 个实例具有真实的类 0,但预测的类为 1。

首先要明确定义哪个类被认为是正类,因为其他一切都取决于它。这里让我们假设类 1 为正,0 为负。现在我们可以获得每个分类状态的编号:

  • 具有真实类 1 和预测类 1 的实例是阳性,这意味着它被预测为阳性并且其预测是正确的(与真实类相同)。在示例中,有 60 个 TP。
  • 具有真类 0 和预测类 0 的实例是真负类,这意味着它被预测为负类并且预测是正确的(与真类相同)。在示例中,有 15 个 TN。
  • 具有真实类 0 和预测类 1 的实例是假阳性,这意味着它被预测为阳性但预测不正确(与真实类不同)。在示例中,有 10 个 FP。
  • 具有真实类 1 和预测类 0 的实例是假阴性,这意味着它被预测为阴性但预测不正确(与真实类不同)。在示例中,有 15 个 FN。

一旦上述内容明确,就可以直接应用公式,例如精度:

P=TPTP+FP=6060+10=0.86

请记住,获得的分数是1 类作为正类为了获得其他类的精度,您需要将其定义为正类并重做分类状态。

首先,我将尝试用文字来解释它——对我来说,理解这个想法总是有帮助的。因此,类精度应该衡量在给定您预测的类的情况下您的预测有多精确。

例如,假设您想预测明天的“下雨”或“不下雨”。可能是当您的模型预测“下雨”时,正确的概率高于您预测不下雨时的概率。这就是为什么您要单独测量精度的原因。

在您的示例中,假设您的模型预测了第 1 类,根据测试集结果,真实标签实际上为 1 的概率为 2%,这实际上是:

精度=TP/(TP+FP)

TP = 模型将样本正确分类为 1

TP+FP = 模型将样本分类为 1(正确或错误)

请注意准确率和召回率都取决于“积极”预测和实际“积极”的术语。二元分类中的两个类都可以被认为是“正类”。

在您共享的分类报告中,有两个类:0 和 1。

案例 1:我们认为 1 是正类。

在这里,预测的正数是指我们预测为 1 的数据点的数量,而实际的正数是指实际属于第 1 类的数据点的数量。

案例 2:我们认为 0 是正类。 在这里,预测的正数是指我们预测为 0 的数据点的数量,而实际的正数是指实际属于 0 类的数据点的数量。

观察计数的混淆矩阵在这两种情况下是不同的,因此百分比/概率也不同。

在您给定的混淆矩阵中:

60 10

15 15

让第一个类为 1,第二个类为 0。在给定的形式中,假设我们将 1 视为正类,将 0 视为负类

精度 = TP/(TP+FP) = 60/(60+10) = 0.856

召回率 = TP/(TP+FN) = 60/(60+15) = 0.8

现在,让我们将 0 视为正类,将 1 视为负类。

然后 15 次,数据点为正,预测为正 60 次,数据点为负,预测为负。10 次,数据点为正但预测为负 15 次,数据点为负但预测为正。

即考虑0作为正类后的混淆矩阵看起来像

15 15

10 60

这里,

精度 = TP/(TP+FP) = 15/(15+15) = 0.5

召回率 = TP(TP + FN) = 15/(15+10) = 0.6

这与我们在第一种情况下获得的精度和召回率不同。

正类的选择只是一个约定俗成的问题,应该由数据科学家根据手头的问题来决定。