不平衡数据分类

数据挖掘 分类 阶级失衡 python-3.x 不平衡
2022-03-06 18:43:24

我使用 XGBoost 来预测公司的破产情况,这是一个极其不平衡的数据集。虽然我尝试了加权方法以及参数调整,但我可以获得的最佳结果如下:

Best Parameters: {'clf__gamma': 0.1, 'clf__scale_pos_weight': 30.736842105263158, 'clf__min_child_weight': 1, 'clf__max_depth': 9}
Best Score: 0.219278428798
Accuracy: 0.966850828729
AUC: 0.850038850039
F1 Measure: 0.4
Cohen Kappa: 0.383129792673
Precision: 0.444444444444
recall: 0.363636363636

Confusion Matrix:
[[346   5]
 [  7   4]]

由于混淆矩阵显示我的模型不能很好地识别破产公司,这导致精度、召回、科恩 kappa、F 测量等性能指标很差。另外,我尝试了此处介绍的 BlaggingClassifier 。实际上,它给出了以下结果:

Best Parameters: {'clf__n_estimators': 64}
Best Score: 0.133676613659
Accuracy: 0.809392265193
AUC: 0.819606319606
F1 Measure: 0.188235294118
Cohen Kappa: 0.142886555487
Precision: 0.108108108108
recall: 0.727272727273
Confusion Matrix: [[285  66]
 [  3   8]]

如图所示,它很好地预测了正类,但它在负类上表现不佳(假阳性太多)。您能否让我知道如何将这两个分类器结果结合起来以获得更好的结果?组合两个分类器的一种简单方法是对预测概率使用凸线性组合:t * p1 + (1 - t) * p2,其中 0 <= t <= 1 和 p1, p2 是两个分类器的预测。然后,我应该在网格上搜索 t 的最佳值,但我不知道该怎么做?

例如,我读到异常检测,一个类 svm 和隔离森林可用于极其不平衡的数据集,所以你能告诉我如何做到这一点,即通过示例代码吗?一般来说,如果您能告诉我如何处理这个问题,我将不胜感激。

1个回答

对于初学者来说,我不相信结合这些结果会给你带来你所期望的。您是否检查过两次出现的真阴性是否保持不变?

此外,您是否尝试过在 XGBoost 模型上替换负责类平衡的超参数,例如最大增量步长或比例位置权重。

您还可以尝试将采样技术用于过采样和欠采样。或者尝试在不同的随机 Under Sample 上使用 XGBoost 上的许多树。

PS我对你提到的异常检测论文感兴趣,你能提供一个链接吗,谢谢。