衡量不平衡多类问题的指标

数据挖掘 多类分类
2022-02-25 05:32:45

我有一个多类不平衡问题。因变量如下所示。

              Injury
  severe Injury (Class 0)               3394
  Medium Injury (Class 1)              22318
  No Injury (Class 2)                 208753

我使用带有参数 class_weight='balanced' 的随机森林算法来处理不平衡问题。该模型产生以下结果。

 [[  650    12     9]
  [    3  2938  1670]
  [    7   917 40569]]

  Accuracy Score: 0.9440299305184393
  precision score: 0.9016230160324789
  Recall score: 0.8612021971135553
  AUC Score: 0.8739141097167544
  F1 score: 0.879571098748252

               precision    recall  f1-score   support

    class 0       0.98      0.97      0.98       671
    class 1       0.76      0.64      0.69      4611
    class 2       0.96      0.98      0.97     41493

avg / total       0.94      0.94      0.94     46775

Kappa Score: 0.7391731672532447

由于我对 0 类和 1 类非常感兴趣,因此使用“宏”方法计算精度、召回率和 F1 分数。

 ex:
 print ('precision score:', precision_score(test_y,ry_pred, average='macro'))

所以,我的问题是我可以采用单个类(0 类和 1 类)精度、召回率和 f1 吗?或评估模型的总体平均分(包括 2 级)?

 ex:  F1 score for all three classes = (98+69+97)/3 = 0.8795 
      F1 Score for 2 classes = (98+69)/2 = 83.5

如果我必须获取单个班级的分数,我可以采用 0 级和 1 级的汇总值来说明模型对次要班级的分类效果如何?

此外,对于 0 类,模型显示出 98 左右的高分。这是过拟合问题吗?我使用 k 折 CV 技术评估模型并显示以下分数。它显示了整体精度、召回率和 F1 分数。

     precision score 0.9009562240704383
        recall score 0.8576816035552879
            F1 score 0.8776626709718627

请建议。

1个回答

我在这里看到两个也许 3 个选项。

1.) 不要使用 class_weight = 'balanced'。

而是使用 class_weight = {0 : 0.01447 , 1 : 0.095 , 2 : .890}

2.) 使用 SMOTE 等对其他类进行过度采样。

3.)(可能)使用模型仅在一对一方案中对标签 2 进行分类,然后使用第二个模型对标签 1 或 0 进行分类。有点堆叠方法。不过在训练时要小心不要泄露信息。