我应该尝试根据召回分数预测为 1 还是 0 的概率?

数据挖掘 机器学习 分类
2022-02-20 05:11:18

我建立了一个随机森林模型来分类男子 NCAA 篮球比赛是否会超过或低于总数。该模型获得了指定为 1 和 0 的训练数据。然后我使用分类报告来计算精度、召回率、f1 分数和支持度。这些是我的结果:

在此处输入图像描述

对于这样的模型,当我的目标是准确预测测试数据的结果是 1 还是 0 时,我应该在决定是否尝试预测结果是 0 还是 1 时使用召回?

此外,我的模型使用 predict_proba 并使用数组 return 中的第二个值,这将给我测试数据结果为 1 的概率,但从这个分类报告看来,我应该尝试预测结果的概率为 0,因为它在回忆时更具描述性。

# Example:
# less accurate way

ynew = model.predict(Xnew)

results = ynew[0][1] # predict probability of Xnew being 1

# Example 2:
# more accurate way

ynew = model.predict(Xnew)

results = ynew[0][0] # predict probability of Xnew being 0

我的假设正确吗?

1个回答

我有一些坏消息:你的模型没有做任何有用的事情。

  • 从混淆矩阵可以看出,模型预测 68% 的实例为 0 类,32% 的实例为 1 类:(1446+1355)/4093=0.68 和 (676+616)/4093=0.32。
  • 您还可以看到,当真实类为 0 时,模型将 68% 的实例预测为类 0,将 32% 的实例预测为类 1:1446/2122=68% 和 676/2122=32%。真实类为 1 时的结果几乎相同:1355/1971=69% 和 616/1971=31%。

这意味着对于任何实例(无论是真正的类别),模型都会随机预测标签:类别 0 有 68% 的机会,类别 1 有 32% 的机会。您还可以从左上角到右下角对角线(正确分类的案例)的总和为 2062 的事实看出这个问题,几乎与左下角到右上角的对角线(错误)相同,即 2031。模型在正确案例和错误案例之间会有更大的差异。

这就是为什么准确率只有 50.4%,仅比具有两个类别的随机基线高,这就是为什么每个类别的召回率完全对应于模型分配给它们的任意概率。

我是否应该在决定是否尝试预测结果是 0 或 1 时使用召回?

这没有意义:召回率是一个评估分数,它只能在做出预测后计算。

此外,我的模型使用 predict_proba 并使用数组 return 中的第二个值,这将给我测试数据结果为 1 的概率,但从这个分类报告看来,我应该尝试预测结果的概率为 0,因为它在回忆时更具描述性。

这里至少有两个误解:

  • 就其本身而言,模型预测 0 类的频率高于 1 类这一事实既不好也不坏。选择只使用最频繁类的召回来评估性能是完全错误的:它确实是一个更高的值,但它根本不是一个好的性能指标。例如,如果一个人使用一个总是预测类 0(100% 的时间)的模型,那么根据定义,这个分类器将对 0 类有 100% 的召回率,即使这个模型是毫无意义的。
  • 在二元分类中,预测这两个类别的概率在数学上是绑定在一起的:p(C=0)+p(C=1)=1. 因此,选择预测结果 0 而不是 1 并不会改变模型所做的任何事情,它将是具有相同性能的完全相同的模型。

我建议你应该尝试的是处理你的特征:通常特征应该是模型用来预测类别的指标,但不幸的是,你当前的特征在他们的工作中很糟糕。假设这些特征对任务“有意义”,应该可以将它们“呈现”给模型,以便它可以有效地实际使用它们。这被称为特征工程:它通常是工作中最困难的部分,但也最有可能让事情真正发挥作用:)