我正在处理多类不平衡数据。我的因变量严重偏斜。
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
对于平均值=“宏”,结果如下。
[[ 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得分是相同的。我如何在项目中证明这一点?
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:1)
设置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 Injury
和Medium Injury
类的精度得分要低得多,并且由于您要消除不平衡类的影响,所以macro
的精度会更低。
因此,哪种更好取决于您和您的用例的重要性。如果您要确保将大多数情况(不管是哪种类别)分配给正确的类别,则average='micro'
是要使用的度量,但是请注意,这样做,结果将在示例中被单个类别淹没。如果“严重”或“中等”类别最为重要,那么您可能不希望使用average='micro'
来评估模型,因为即使这些类别在其类别上的结果较差,也会整体显示出较高的性能自己的。