我正在使用 XGBoosts(0.80 版)XGBoostClassifier 的 Python 实现来预测大量类之一。
我的特征数据由约 10M 行、约 5k 列的稀疏布尔矩阵组成,密度为 0.003。(所以每行大约 15 个值)。
我的目标包含 2000 多个不同的类,呈长尾偏态分布(约 300 个类出现超过 1 万次)。
现在,我将所有不常见的类(<10k)归为“其他”,因此它们至少算作负面示例。但理想情况下,我希望能够使用更多不同的类作为实际目标。
但是,每当我使用 800 个不同的目标(每个目标出现约 5k+ 次)时,模型就会变得不稳定:训练需要更长的时间,训练损失似乎没有收敛(不幸的是,我没有保存这个输出) 并且预测质量变得越来越差(对于错误的类,predict_proba 返回 0.99+)。
我应该改变一些我忽略的参数吗?我的损失是否已经没有浮点精度了?是因为approx方法中的采样吗?有没有人有任何想法?
我的具体分类器:
clf = XGBClassifier(
n_jobs=8,
max_depth=7, #arbitrary
min_child_weight=5, #arbitrary
subsample=0.5, #arbitrary
colsample_bytree=0.9, #arbitrary
tree_method='approx',
objective='multi:softprob',
eval_metric='mlogloss',
silent=False
)