减少Python中xgboost增量训练的错误率
我正在尝试批量训练模型,以提高内存使用率 下面是我在减少Python中xgboost增量训练的错误率,python,memory,machine-learning,xgboost,Python,Memory,Machine Learning,Xgboost,我正在尝试批量训练模型,以提高内存使用率 下面是我在xgboost中进行梯度提升增量训练的示例: 它使用xgb\u模型进行批量训练。但该培训创建的模型的性能仅与在单个批次上培训的模型一样好 我如何减少增量培训所导致的错误 细节 我的增量培训: def xgb_native_batch(batch_size=100): """Train in batches that update the same model""" batches = int(np.ceil(len(y_
xgboost
中进行梯度提升增量训练的示例:
xgb\u模型
进行批量训练。但该培训创建的模型的性能仅与在单个批次上培训的模型一样好
我如何减少增量培训所导致的错误
细节
我的增量培训:
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\u native\u bulk
xgb\u native\u bulk\u是在大小为N的子样本上训练的模型
是对所有数据进行连续训练的模型,这些数据分为大小为N的小批量(通过模型更新进行连续学习):xgb\u native\u batch\u
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行的模型与100批训练3750行的模型之间没有差异。而且这两个模型都远远没有同时在3750行上训练的参考模型
工具书类
- 从
repo获得增量学习的示例:xgboost
xgb\u model
,这些测试也会使用整个数据。然后,“完整模型”的错误率等于增量训练的模型的错误率
当模型根据数据子集进行更新时,它将变得像以前没有过培训一样糟糕
以“外部内存”的名义在讨论中进行内存节省增量培训。总的来说,FAQ涵盖了大数据集的问题。您的增量培训是否完全解决了冷启动问题?我的Xgboost有问题,每次折叠都会得到冷启动分数,所以我提出了你的线程。你为什么不尝试更新参数?刷新树叶-让我们知道您是否可以回答自己的问题并分享您的经验教训!