gpt4 book ai didi

python - 如何为 xgboost 实现增量训练?

转载 作者:IT老高 更新时间:2023-10-28 22:20:55 44 4
gpt4 key购买 nike

问题是由于火车数据大小,我的火车数据无法放入 RAM。所以我需要一种方法,首先在整个火车数据集上构建一棵树,计算残差构建另一棵树等等(就像梯度提升树一样)。显然,如果我在某个循环中调用 model = xgb.train(param, batch_dtrain, 2) - 这将无济于事,因为在这种情况下,它只会为每个批处理重建整个模型。

最佳答案

在第一批训练后尝试保存您的模型。然后,在连续运行时,为 xgb.train 方法提供已保存模型的文件路径。

这是我进行的一个小实验,以说服自己它有效:

首先,将波士顿数据集拆分为训练集和测试集。然后将训练集分成两半。用前半部分拟合一个模型,得到一个作为基准的分数。然后用后半部分拟合两个模型;一个模型将具有附加参数 xgb_model。如果传入额外的参数没有影响,那么我们希望他们的分数是相似的..但是,幸运的是,新模型的性能似乎比第一个要好得多。

import xgboost as xgb
from sklearn.cross_validation import train_test_split as ttsplit
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error as mse

X = load_boston()['data']
y = load_boston()['target']

# split data into training and testing sets
# then split training set in half
X_train, X_test, y_train, y_test = ttsplit(X, y, test_size=0.1, random_state=0)
X_train_1, X_train_2, y_train_1, y_train_2 = ttsplit(X_train,
y_train,
test_size=0.5,
random_state=0)

xg_train_1 = xgb.DMatrix(X_train_1, label=y_train_1)
xg_train_2 = xgb.DMatrix(X_train_2, label=y_train_2)
xg_test = xgb.DMatrix(X_test, label=y_test)

params = {'objective': 'reg:linear', 'verbose': False}
model_1 = xgb.train(params, xg_train_1, 30)
model_1.save_model('model_1.model')

# ================= train two versions of the model =====================#
model_2_v1 = xgb.train(params, xg_train_2, 30)
model_2_v2 = xgb.train(params, xg_train_2, 30, xgb_model='model_1.model')

print(mse(model_1.predict(xg_test), y_test)) # benchmark
print(mse(model_2_v1.predict(xg_test), y_test)) # "before"
print(mse(model_2_v2.predict(xg_test), y_test)) # "after"

# 23.0475232194
# 39.6776876084
# 27.2053239482

引用:https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/training.py

关于python - 如何为 xgboost 实现增量训练?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079853/

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