用于多分类和不平衡数据的 XGBoost
XGBoost for multiclassification and imbalanced data
我正在处理一个 class化问题,有 3 个 classes [0,1,2] 和不平衡的 class 分布,如下所示。
我想应用 XGBClassifier(在 Python 中)到这个 class化问题,但是模型没有响应 class_weight
调整和偏向大多数 class 0,并忽略少数 classes 1,2。 class_weight
以外的哪些超参数可以帮助我?
我试过 1) 使用 sklearn compute_class_weight
计算 class 权重; 2)根据classes的相对频率设置权重; 3) 并且还用极值手动调整 classes 以查看是否发生任何变化,例如 {0:0.5,1:100,2:200}
。但无论如何,将少数 classes 考虑在内对 classifier 没有帮助。
观察:
我可以在二进制情况下处理问题:如果我通过识别class使问题成为二进制class化es [1,2],然后我可以通过调整 scale_pos_weight
使 classifier 正常工作(即使在这种情况下,仅 class_weight
也无济于事)。
但据我所知,scale_pos_weight
适用于二进制 class 化。对于多class化问题,是否有此参数的类似物?
使用RandomForestClassifier
代替XGBClassifier
,我可以通过设置class_weight='balanced_subsample'
和调整max_leaf_nodes
来解决这个问题。但是,出于某种原因,这种方法不适用于 XGBClassifier。
备注:我知道平衡技术,例如over/undersampling,或SMOTE。但我想尽可能避免使用它们,如果可能的话,我更喜欢使用模型超参数调整的解决方案。
我上面的观察表明这适用于二进制情况。
sample_weight
参数用于处理不平衡数据,同时使用 XGBoost
训练数据。您可以使用 sklearn
库的 compute_sample_weight()
计算样本权重。
此代码适用于多类数据:
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)
我正在处理一个 class化问题,有 3 个 classes [0,1,2] 和不平衡的 class 分布,如下所示。
我想应用 XGBClassifier(在 Python 中)到这个 class化问题,但是模型没有响应 class_weight
调整和偏向大多数 class 0,并忽略少数 classes 1,2。 class_weight
以外的哪些超参数可以帮助我?
我试过 1) 使用 sklearn compute_class_weight
计算 class 权重; 2)根据classes的相对频率设置权重; 3) 并且还用极值手动调整 classes 以查看是否发生任何变化,例如 {0:0.5,1:100,2:200}
。但无论如何,将少数 classes 考虑在内对 classifier 没有帮助。
观察:
我可以在二进制情况下处理问题:如果我通过识别class使问题成为二进制class化es [1,2],然后我可以通过调整
scale_pos_weight
使 classifier 正常工作(即使在这种情况下,仅class_weight
也无济于事)。 但据我所知,scale_pos_weight
适用于二进制 class 化。对于多class化问题,是否有此参数的类似物?使用
RandomForestClassifier
代替XGBClassifier
,我可以通过设置class_weight='balanced_subsample'
和调整max_leaf_nodes
来解决这个问题。但是,出于某种原因,这种方法不适用于 XGBClassifier。
备注:我知道平衡技术,例如over/undersampling,或SMOTE。但我想尽可能避免使用它们,如果可能的话,我更喜欢使用模型超参数调整的解决方案。 我上面的观察表明这适用于二进制情况。
sample_weight
参数用于处理不平衡数据,同时使用 XGBoost
训练数据。您可以使用 sklearn
库的 compute_sample_weight()
计算样本权重。
此代码适用于多类数据:
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)