如何计算每类二元分类的分数
您的混淆矩阵与您的分类报告不对应。您显示的矩阵也不是标准的:
- 标签“真阳性”和“真阴性”令人困惑,因为这些术语只能用于分类状态(见下文)。他们的意思是“真正的阶级是积极的”和“真正的阶级是消极的”。
- 它具有作为列的真实类和作为行的预测类,而它通常以真实类作为行和预测类作为列呈现。
与常规混淆矩阵相同:
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。
一旦上述内容明确,就可以直接应用公式,例如精度:
请记住,获得的分数是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
这与我们在第一种情况下获得的精度和召回率不同。
正类的选择只是一个约定俗成的问题,应该由数据科学家根据手头的问题来决定。