XGBRegressor 与 xgboost.train 巨大的速度差异?

数据挖掘 机器学习 Python 决策树 xgboost 效率
2021-10-07 23:56:45

如果我使用以下代码训练我的模型:

import xgboost as xg
params = {'max_depth':3,
'min_child_weight':10,
'learning_rate':0.3,
'subsample':0.5,
'colsample_bytree':0.6,
'obj':'reg:linear',
'n_estimators':1000,
'eta':0.3}

features = df[feature_columns]
target = df[target_columns]
dmatrix = xg.DMatrix(features.values,
                     target.values,
                     feature_names=features.columns.values)
clf = xg.train(params, dmatrix)

它在大约 1 分钟内完成。

如果我使用 Sci-Kit 学习方法训练我的模型:

import xgboost as xg
max_depth = 3
min_child_weight = 10
subsample = 0.5
colsample_bytree = 0.6
objective = 'reg:linear'
num_estimators = 1000
learning_rate = 0.3

features = df[feature_columns]
target = df[target_columns]
clf = xg.XGBRegressor(max_depth=max_depth,
                min_child_weight=min_child_weight,
                subsample=subsample,
                colsample_bytree=colsample_bytree,
                objective=objective,
                n_estimators=num_estimators,
                learning_rate=learning_rate)
clf.fit(features, target)

需要 30 多分钟。

我认为底层代码几乎完全相同(即XGBRegressor调用xg.train) - 这里发生了什么?

1个回答

xgboost.train将忽略参数n_estimators,而xgboost.XGBRegressor接受。xgboost.train中,提升迭代(即n_estimators)由num_boost_round(默认值:10)控制

在您的情况下,第一个代码将执行 10 次迭代(默认情况下),但第二个代码将执行 1000 次迭代。clf = xg.train(params, dmatrix)如果您尝试更改为,不会有任何大的不同clf = xg.train(params, dmatrix, 1000)

参考

http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.train

http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBRegressor