我创建了jupyter笔记本的要点,以演示可以逐步训练xgboost模型。我使用波士顿数据集来训练模型。我做了3个实验-一枪学习,迭代一枪学习,迭代增量学习。在增量训练中,我将波士顿数据分批传递给模型,大小为50。
要点是,您必须多次遍历数据才能使模型收敛到一次射击(所有数据)学习所获得的精度。
这是用于使用xgboost进行迭代增量学习的相应代码。
batch_size = 50
iterations = 25
model = None
for i in range(iterations):
for start in range(0, len(x_tr), batch_size):
model = xgb.train({
'learning_rate': 0.007,
'update':'refresh',
'process_type': 'update',
'refresh_leaf': True,
#'reg_lambda': 3, # L2
'reg_alpha': 3, # L1
'silent': False,
}, dtrain=xgb.DMatrix(x_tr[start:start+batch_size], y_tr[start:start+batch_size]), xgb_model=model)
y_pr = model.predict(xgb.DMatrix(x_te))
#print(' MSE itr@{}: {}'.format(int(start/batch_size), sklearn.metrics.mean_squared_error(y_te, y_pr)))
print('MSE itr@{}: {}'.format(i, sklearn.metrics.mean_squared_error(y_te, y_pr)))
y_pr = model.predict(xgb.DMatrix(x_te))
print('MSE at the end: {}'.format(sklearn.metrics.mean_squared_error(y_te, y_pr)))
XGBoost版本:0.6
0
问题是由于火车数据大小,我的火车数据无法放入RAM。因此,我需要一种方法,该方法首先在整个火车数据集上构建一棵树,然后计算残差来构建另一棵树,依此类推(就像梯度增强树一样)。显然,如果我在某个循环中调用
model = xgb.train(param, batch_dtrain, 2)
-这将无济于事,因为在这种情况下,它只会为每个批次重建整个模型。