应该考虑哪种方法来评估不平衡的多类别分类



我正在处理多类不平衡数据。我的因变量是高度偏斜的。

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

我使用了参数为"class_weight='balanced'"的随机森林算法来管理类2的不平衡。

当我使用average='micro'时,我得到以下结果。

[[   34   107   688]
[  148   778  4592]
[  905  4635 46730]]
Accuracy Score: 0.8110616374089428
precision score: 0.8110616374089428
Recall score: 0.8110616374089428
AUC Score: 0.8582962280567071
F1 score: 0.8110616374089428
Kappa Score: 0.05522284663052324 

对于平均值="macro",结果如下。

[[   31   125   684]
[  157   838  4559]
[  890  4694 46639]]
Accuracy Score: 0.8104816009007626
precision score: 0.3586119227436326
Recall score: 0.3602869806251181
AUC Score: 0.5253225798824679
F1 score: 0.3592735337079687
Kappa Score: 0.06376296115668922

那么,我应该考虑哪些结果来评估模型呢?如果我必须考虑宏,那么我的模型性能真的很差。请建议是否有任何方法可以提高精确度、召回率和AUC评分?

如果我考虑微观结果,我的准确度、召回率、f1得分是一样的。我如何在项目中证明这一点?

如有任何帮助,我们将不胜感激。

谢谢。

与大多数数据科学相关的问题一样,"哪一个更好"的答案可以归结为"取决于"。每个班级都有良好的表现是否重要?还是你更关心获得良好的整体表现?

当您设置average='micro'时,您正在测量类之间算法的总体性能。例如,为了计算精度,你需要将所有真阳性预测相加,然后除以所有真阳性和所有假阳性,使用你的数据,这将是:

(34 + 778 + 46730) / ((34 + 778 + 46730) + (157 + 890 + 125 + 4694 + 688 + 4592))

结果为0.81106。然而,当您查看详细信息时,您会注意到,对于您的每个类,每个类中的精度计算都有很大的差异,并且精度计算在很大程度上是由No Injury类驱动的:

Severe Injury = 0.0312
Medium Injury = 0.1409
No Injury     = 0.8985

当您设置average='macro'时,您将平均每个类的精度计算,并消除不平衡类的影响。当average='macro'为时,使用高于总体精度的计算类精度

(0.0312 + 0.1409 + 0.8985) / 3 = 0.356

请注意,这里的输入是每个单独类的精度计算,并且它们的权重相等。因为No InjuryMedium Injury类的精度分数要低得多,而且由于您正在消除不平衡类的影响,所以macro的精度会更低。

所以,什么更好取决于什么对你和你的用例来说是重要的。如果你关心的是确保大多数情况,无论类如何,都被分配给正确的类,那么average='micro'是要使用的度量,但请注意,这样做的结果将被你的例子中的一个类淹没。如果"严重"或"中等"类别是最重要的,那么您可能不想使用average='micro'来评估您的模型,因为即使这些类别本身的结果很差,总体上也会显示出高水平的性能。

最新更新