使用不平衡类平均 F 分数的最佳方法

机器算法验证 机器学习 scikit-学习 意思是 不平衡类
2022-03-21 15:31:46

我有一个包含不平衡类的数据集。三个类别约占数据的 60%。此外,我有不同的测试拆分会导致不平衡。例如:

训练集:label_1 ... label_n

测试集:label_1、label_3、label_9

这意味着即使我的测试集中只有 3 个标签,它也可能被预测为 n 个标签中的 1 个。因此,当我使用sklearn.metrics.precision_recall_fscore_support时,我得到一个包含很多零的矩阵。

我的问题是我需要获得所有班级的平均F 分数,而不是每个班级的值。然而,仅仅取从上述 sklearn 函数返回的矩阵的平均值总是一个非常低的值,因为有这么多的零。另一方面,对非零值取平均值对我来说也没有意义,因为潜在预测的总数应该是类的总数。

在这种情况下,有没有一种取平均值的好方法?我尝试过使用微观、宏观和加权平均选项,但我不确定哪一个是正确的。

谁能帮我解决这个问题?

1个回答

“我不确定哪个是对的”

这里没有对错。

分类器的性能可以用nn矩阵。当尝试使用单个指标来表示性能时,您会丢失一些信息。

换句话说,由于不可能基于单个度量来恢复混淆矩阵,因此当我们仅考虑单个度量来解释分类器的性能时会丢失信息。

但是仍然......要决定在几个备选方案中哪个分类器更好 - 我们需要一个单一的指标......

哪个单一指标最能代表性能?这是一个主观问题。这就是统计学家发挥创造力的地方。这就是为什么有这么多指标的原因。

不同的度量“偏好”可以从混淆矩阵中提取的不同类型的信息。由您决定哪一个捕获您认为“最重要”的信息。

您可以考虑的一些标准:

  • 所有类都同样重要/所有实例都同样重要吗?
  • 分类和错误分类是否同样“重要”?
  • 假阳性和假阴性是否同样“重要”?
  • 性能应该是绝对的,还是相对于某个随机分类器?
  • 度量在某种意义上应该是线性的吗?
  • 等等