xgb.train和xgb有什么区别.xgb分类器(或xgb.xgb分类器)



我已经知道"xgboost.XGBRegressor是XGBoost的Scikit Learn Wrapper接口。">

但它们还有其他区别吗?

xgboost.train是通过梯度提升方法训练模型的低级API。

xgboost.XGBRegressorxgboost.XGBClassifier是准备DMatrix并传入相应目标函数和参数的包装器(Scikit Learn-like wrappers,正如他们所称)。最后,fit调用简单地归结为:

self._Booster = train(params, dmatrix,
self.n_estimators, evals=evals,
early_stopping_rounds=early_stopping_rounds,
evals_result=evals_result, obj=obj, feval=feval,
verbose_eval=verbose)

这意味着可以用XGBRegressorXGBClassifier完成的一切都可以通过底层xgboost.train函数实现。另一种方式显然不是真的,例如xgboost.train的一些有用参数在XGBModelAPI中不受支持。显著差异列表包括:

  • xgboost.train允许设置在每次迭代结束时应用的callbacks
  • xgboost.train允许通过xgb_model参数继续训练
  • xgboost.train不仅允许eval函数的最小化,还允许最大化

@Maxim,截至xgboost 0.90(或更早),这些差异在该xgboost。XGB分类器.fit:

  • 具有callbacks
  • 允许使用xgb_model参数继续
  • 并且支持相同的内置eval度量或自定义eval函数

我发现evals_result的不同之处在于,它必须在拟合后单独检索(clf.evals_result()),并且生成的dict不同,因为它不能利用观察列表中评估值的名称(watchlist = [(d_train, 'train'), (d_valid, 'valid')])。

在我看来,主要区别在于训练/预测速度。

为了进一步参考,我将把xgboost.train称为"本机实现"和XGBClassifier.fit称为"sklearn_wrapper">

我已经对数据集形状(240000,348)进行了一些基准测试

装配/训练时间:sklearn_wrapper时间=89秒native_implementation时间=7秒

预测时间:sklearn_wrapper=6秒native_implementation=3.5毫秒

我相信这是因为sklearn_wrapper被设计为使用pandas/numpy对象作为输入,其中native_implementation需要将输入数据转换为xgboost。DMatrix对象。

此外,可以使用native_implementation来优化n_估计器。

@Danil提出了速度上的显著差异,@Mohammad正确地指出了将数据转换为DMatrix结构的必要性。因此,我尝试在Kaggle笔记本电脑环境中复制基准测试。

结果表明,CCD_ 32和CCD_。

编辑:根据评论中的建议添加基准代码


import numpy as np
import xgboost as xgb
xgb.__version__

"1.6.1">

# training data
X = np.random.rand(240000, 348)
y = np.random.rand(240000)

基准xgboost本机实现

```python
%%time
# convert training data
dtrain = xgb.DMatrix(X, label=y)
CPU times: user 3.61 s, sys: 505 ms, total: 4.12 s
Wall time: 1.56 s
```python
%%time
# train the model with default parameters
model = xgb.train({'objective':'reg:squarederror'},dtrain,10)

CPU时间:用户6min 8s,系统:700 ms,总计:6min 9s
壁时间:1min 34s

%%time
# predict with trained model
prediction = model.predict(dtrain)

CPU时间:用户818毫秒,系统:1.01毫秒,总计:819毫秒
墙时间:209毫秒

XGBoost的Benchmark Scikit Learn Wrapper接口

%%time
model = xgb.XGBRegressor(n_estimators=10)
model.fit(X,y)

CPU时间:用户6min 15s,系统:1.2s,总计:6min 16s
壁时间:1min 37s

XGB回归器(base_score=0.5,booster='btree',callbacks=None,colsample_bylevel=1,colsample_bynode=1,colsample_bytree=1,early_stopping_rounds=无,enable_categorical=错误,eval_metric=None,gamma=0,gpu_id=-1,growt_policy='depthwise',importance_type=None,interaction_contraints='',learning_rate=0.3000000012,max_bin=256,max_cat_to_nonehot=4,max_delta_step=0,max_depth=6,max_leave=0,min_child_weight=1,missing=nan,单调约束='()',n_estimulations=10,n_jobs=0,num_parallel_tree=1,predictor='auto',random_state=0,reg_alpha=0,reg_lambda=1,…)

%%time
prediction_1 = model.predict(X)

CPU时间:用户1.48秒,系统:1.99毫秒,总计:1.48秒
壁时间:380毫秒

相关内容

  • 没有找到相关文章

最新更新