我使用 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 和隔离森林可用于极其不平衡的数据集,所以你能告诉我如何做到这一点,即通过示例代码吗?一般来说,如果您能告诉我如何处理这个问题,我将不胜感激。