gpt4 book ai didi

python - 减少 Python 中 xgboost 增量训练的错误率

转载 作者:行者123 更新时间:2023-11-28 19:04:42 25 4
gpt4 key购买 nike

我正在尝试批量训练模型以提高内存使用率。

这是我在 xgboost 中对梯度提升进行增量训练的示例:

它使用 xgb_model分批训练。但是这种训练创建的模型的性能仅与在单个批处理上训练的模型一样好。

如何减少增量训练引起的错误?

详情

我的增量训练:

def xgb_native_batch(batch_size=100):
"""Train in batches that update the same model"""

batches = int(np.ceil(len(y_train) / batch_size))

dtrain = xgb.DMatrix(data=X_train, label=y_train)
if XGB_MODEL_FILE:
# Save the model
bst = xgb.train(
params=xgb_train_params,
dtrain=dtrain,
num_boost_round=0
) # type: Booster
bst.save_model(XGB_MODEL_FILE)
else:
# OR just use an empty Booster class
bst = None

for i in range(batches):

start = i * batch_size
end = start + batch_size
dtrain = xgb.DMatrix(X_train[start:end, :], y_train[start:end])

bst = xgb.train(
dtrain=dtrain,
params=xgb_train_params,
xgb_model=XGB_MODEL_FILE or bst
) # type: Booster

if XGB_MODEL_FILE:
bst.save_model(XGB_MODEL_FILE)

dtest = xgb.DMatrix(data=X_test, label=y_test)
pr_y_test_hat = bst.predict(dtest)

return pr_y_test_hat

测试

基于四个数据集的测试。我创建了这些模型:

  • xgb_native_bulk是一次对所有数据进行训练的引用模型。
  • xgb_native_bulk_<N>是在大小为 N 的子样本上训练的模型。
  • xgb_native_batch_<N>是在所有数据上连续训练的模型,分为大小为 N 的小批量(通过模型更新持续学习):

指标:

make_classification: binary, N=3750
========================================
accuracy_score aurocc
algorithm
xgb_native_bulk 0.8624 0.933398
xgb_native_bulk_100 0.6192 0.669542
xgb_native_batch_100 0.6368 0.689123
xgb_native_bulk_500 0.7440 0.837590
xgb_native_batch_500 0.7528 0.829661
xgb_native_bulk_1000 0.7944 0.880586
xgb_native_batch_1000 0.8048 0.886607

load_breast_cancer: binary, N=426
========================================
accuracy_score aurocc
algorithm
xgb_native_bulk 0.958042 0.994902
xgb_native_bulk_100 0.930070 0.986037
xgb_native_batch_100 0.965035 0.989805
xgb_native_bulk_500 0.958042 0.994902
xgb_native_batch_500 0.958042 0.994902
xgb_native_bulk_1000 0.958042 0.994902
xgb_native_batch_1000 0.958042 0.994902

make_regression: reg, N=3750
========================================
mse
algorithm
xgb_native_bulk 5.513056e+04
xgb_native_bulk_100 1.209782e+05
xgb_native_batch_100 7.872892e+07
xgb_native_bulk_500 8.694831e+04
xgb_native_batch_500 1.150160e+05
xgb_native_bulk_1000 6.953936e+04
xgb_native_batch_1000 5.060867e+04

load_boston: reg, N=379
========================================
mse
algorithm
xgb_native_bulk 15.910990
xgb_native_bulk_100 25.160251
xgb_native_batch_100 16.931899
xgb_native_bulk_500 15.910990
xgb_native_batch_500 15.910990
xgb_native_bulk_1000 15.910990
xgb_native_batch_1000 15.910990

问题是增量学习在处理又长又宽的数据集时表现不佳。比如分类问题:

                       accuracy_score    aurocc
algorithm
xgb_native_bulk 0.8624 0.933398
xgb_native_bulk_100 0.6192 0.669542
xgb_native_batch_100 0.6368 0.689123

一次训练 100 行的模型与 3750 行以 100 为一组训练的模型没有区别。两者都与一次训练 3750 行的引用模型相去甚远。

引用资料

最佳答案

XGBoost 需要整个数据集进行持续学习

XGBoost 中的“持续训练”指的是持续,例如,boosting rounds,如他们的单元测试所示:

即使指定了 xgb_model,这些测试也会使用整个数据。那么“完整模型”的错误率等于增量训练模型的错误率。

当模型基于数据的子集进行更新时,它会像没有之前的训练轮一样糟糕。

内存节省增量训练以“外部内存”的名义出现在讨论中。总的来说,FAQ 涵盖了大数据集的问题 here .

关于python - 减少 Python 中 xgboost 增量训练的错误率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48366379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com