我有一个无法加载到内存中的大型数据集,因此我决定使用 Xgboost 进行增量学习。我目前所做的是:
- 使用大量数据调整 num_boosting_rounds
- 将早期停止轮次设置为值 (60) << num_boosting_rounds 以防止过度拟合
当我的训练代码运行时,它会在前两个块上运行 1000 轮,优化损失函数。然后它在每个后续块的 60 轮处停止,因为在第 2 块的第 1000 轮中观察到损失函数的最佳值。这是配置增量模型的正确方法吗?由于大多数训练块的提前停止,这是否会导致我的模型低于标准。
for idx,df in enumerate(df_pointer):
num_round = 1000
early_stopping_rounds = 60
param = {'max_depth':5, 'eta':0.02, 'silent':1, 'objective':'binary:logistic', 'eval_metric':'logloss', 'max_delta_step':4, 'scale_pos_weight': 4}
dtrain, deval = getDMatrixSplit(df)
watchlist = [(deval,'eval')]
bst = xgb.train(param, dtrain, num_round, watchlist,
early_stopping_rounds=early_stopping_rounds, xgb_model=xgb_model)
xgb_model = self.model_path +'/xgb_%s_%s.model'%(ml_algo, idx)
bst.save_model(xgb_model)