首页 > 解决方案 > XGBoost 用于多分类和不平衡数据

问题描述

我正在处理一个具有 3 个类别 [0,1,2] 的分类问题,并且类别分布不平衡,如下所示。

在此处输入图像描述

我想将XGBClassifier(在 Python 中)应用于此分类问题,但模型不响应class_weight调整并偏向多数类 0,并忽略少数类 1,2。class_weight除了可以帮助我之外,还有哪些超参数?

我尝试 1) 使用 sklearn 计算类权重compute_class_weight;2)根据班级的相对频率设置权重;3)并且还手动调整具有极值的类以查看是否发生任何变化,例如{0:0.5,1:100,2:200}。但无论如何,将少数类考虑在内对分类器没有帮助。

观察:

备注:我了解平衡技术,例如过采样/欠采样或 SMOTE。但我想尽可能地避免它们,如果可能的话,我更喜欢使用模型的超参数调整的解决方案。我上面的观察表明这适用于二进制情况。

标签: pythonxgboostmulticlass-classificationimbalanced-dataxgbclassifier

解决方案


sample_weight参数对于在XGBoost用于训练数据时处理不平衡数据很有用。您可以使用库计算样本权compute_sample_weight()sklearn

此代码应适用于多类数据:

from sklearn.utils.class_weight import compute_sample_weight
sample_weights = compute_sample_weight(
    class_weight='balanced',
    y=train_df['class'] #provide your own target name
)

xgb_classifier.fit(X, y, sample_weight=sample_weights)

推荐阅读