不平衡多classclass化应该考虑用什么方法来评价?
Which method should be considered to evaluate the imbalanced multi-class classification?
我正在处理多class-不平衡数据。我的因变量严重偏斜。
Injury
2(No Injury) 208753
1(Medium Injury) 22318
0(severe Injury) 3394
我使用参数为 "class_weight='balanced' " 的随机森林算法来管理 class 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
那么,我应该考虑哪些结果来评估模型?如果非要考虑宏观的话,那我的模型性能真的很差。请问有什么方法可以提高precision、recall和AUC score吗?
如果我考虑微观结果,我的精确率、召回率、f1 分数是相同的。我如何在项目中证明这一点?
如有任何帮助,我们将不胜感激。
谢谢。
与大多数数据科学相关的问题一样,"which one is better" 的答案归结为 "it depends"。每个 class 单独取得良好表现很重要吗?还是您更关心获得良好的整体性能?
当您设置 average='micro'
时,您测量的是算法在 class 中的整体性能。例如,要计算精度,您可以添加所有真阳性预测并除以所有真阳性和所有假阳性,使用您的数据将是:
(34 + 778 + 46730) / ((34 + 778 + 46730) + (157 + 890 + 125 + 4694 + 688 + 4592))
结果是0.81106。但是,当您查看详细信息时,您会注意到对于每个 classes,每个 class 中的精度计算都存在很大差异,并且精度计算主要由 No Injury
class:
Severe Injury = 0.0312
Medium Injury = 0.1409
No Injury = 0.8985
当您设置 average='macro'
时,您是在对每个 class 的精度计算进行平均,并消除不平衡 class 的影响。当 average='macro'
为:
时,使用高于整体精度的计算 class 精度
(0.0312 + 0.1409 + 0.8985) / 3 = 0.356
请注意,这里的输入是对每个人 class 的精度计算,并且每个输入的权重相等。因为 No Injury
和 Medium Injury
classes 的精度得分要低得多,并且由于您要消除不平衡 classes 的影响,所以 macro
精度将是更低。
所以,哪个更好取决于对您和您的用例来说什么是重要的。如果您关心确保将大多数情况(无论 class)分配给正确的 class,那么 average='micro'
是要使用的指标,但请注意,这样做的结果将是在您的示例中被单个 class 淹没。如果 "Severe" 或 "Medium" 类别最重要,那么您可能不想使用 average='micro'
评估您的模型,因为即使结果不佳,总体上也会显示出高水平的性能这些 class 是独立的。
我正在处理多class-不平衡数据。我的因变量严重偏斜。
Injury
2(No Injury) 208753
1(Medium Injury) 22318
0(severe Injury) 3394
我使用参数为 "class_weight='balanced' " 的随机森林算法来管理 class 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
那么,我应该考虑哪些结果来评估模型?如果非要考虑宏观的话,那我的模型性能真的很差。请问有什么方法可以提高precision、recall和AUC score吗?
如果我考虑微观结果,我的精确率、召回率、f1 分数是相同的。我如何在项目中证明这一点?
如有任何帮助,我们将不胜感激。
谢谢。
与大多数数据科学相关的问题一样,"which one is better" 的答案归结为 "it depends"。每个 class 单独取得良好表现很重要吗?还是您更关心获得良好的整体性能?
当您设置 average='micro'
时,您测量的是算法在 class 中的整体性能。例如,要计算精度,您可以添加所有真阳性预测并除以所有真阳性和所有假阳性,使用您的数据将是:
(34 + 778 + 46730) / ((34 + 778 + 46730) + (157 + 890 + 125 + 4694 + 688 + 4592))
结果是0.81106。但是,当您查看详细信息时,您会注意到对于每个 classes,每个 class 中的精度计算都存在很大差异,并且精度计算主要由 No Injury
class:
Severe Injury = 0.0312
Medium Injury = 0.1409
No Injury = 0.8985
当您设置 average='macro'
时,您是在对每个 class 的精度计算进行平均,并消除不平衡 class 的影响。当 average='macro'
为:
(0.0312 + 0.1409 + 0.8985) / 3 = 0.356
请注意,这里的输入是对每个人 class 的精度计算,并且每个输入的权重相等。因为 No Injury
和 Medium Injury
classes 的精度得分要低得多,并且由于您要消除不平衡 classes 的影响,所以 macro
精度将是更低。
所以,哪个更好取决于对您和您的用例来说什么是重要的。如果您关心确保将大多数情况(无论 class)分配给正确的 class,那么 average='micro'
是要使用的指标,但请注意,这样做的结果将是在您的示例中被单个 class 淹没。如果 "Severe" 或 "Medium" 类别最重要,那么您可能不想使用 average='micro'
评估您的模型,因为即使结果不佳,总体上也会显示出高水平的性能这些 class 是独立的。