xgb.train 和 xgb.XGBRegressor(或 xgb.XGBClassifier)有什么区别?
What is the difference between xgb.train and xgb.XGBRegressor (or xgb.XGBClassifier)?
我已经知道“xgboost.XGBRegressor
是 XGBoost 的 Scikit-Learn 包装器接口。”
但是它们还有什么不同吗?
xgboost.train
是底层 API 通过梯度提升方法训练模型。
xgboost.XGBRegressor
和 xgboost.XGBClassifier
是准备 DMatrix
并传入相应的objective函数和参数。最后,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)
这意味着 一切 可以用 XGBRegressor
和 XGBClassifier
完成的事情都可以通过基础 xgboost.train
函数来完成。反过来显然不是这样,例如,XGBModel
API 不支持 xgboost.train
的一些有用参数。显着差异列表包括:
xgboost.train
允许设置在每次迭代结束时应用的 callbacks
。
xgboost.train
允许通过 xgb_model
参数继续训练。
xgboost.train
不仅允许 eval 函数的最小化,还允许最大化。
@Maxim,从 xgboost 0.90(或更早)开始,这些差异不再存在 xgboost.XGBClassifier.fit:
- 有
callbacks
- 允许使用
xgb_model
参数继续
- 并支持相同的内置评估指标或自定义评估函数
我发现不同的是evals_result
,因为它必须在fit(clf.evals_result()
)之后单独检索并且结果dict
是不同的,因为它不能带利用观察列表中评估的名称 ( watchlist = [(d_train, 'train'), (d_valid, 'valid')]
) .
在我看来,主要区别在于 training/prediction 速度。
为了进一步参考,我将调用 xgboost.train
- 'native_implementation' 和 XGBClassifier.fit
- 'sklearn_wrapper'
我已经在数据集形状 (240000, 348) 上做了一些基准测试
Fit/train时间:
sklearn_wrapper
时间=89秒
native_implementation
时间=7秒
预测时间:
sklearn_wrapper
= 6 秒
native_implementation
= 3.5 毫秒
我认为这是因为 sklearn_wrapper
旨在使用 pandas/numpy 对象作为输入,其中 native_implementation
需要将输入数据转换为 xgboost.DMatrix对象。
此外,可以使用 native_implementation
.
优化 n_estimators
我已经知道“xgboost.XGBRegressor
是 XGBoost 的 Scikit-Learn 包装器接口。”
但是它们还有什么不同吗?
xgboost.train
是底层 API 通过梯度提升方法训练模型。
xgboost.XGBRegressor
和 xgboost.XGBClassifier
是准备 DMatrix
并传入相应的objective函数和参数。最后,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)
这意味着 一切 可以用 XGBRegressor
和 XGBClassifier
完成的事情都可以通过基础 xgboost.train
函数来完成。反过来显然不是这样,例如,XGBModel
API 不支持 xgboost.train
的一些有用参数。显着差异列表包括:
xgboost.train
允许设置在每次迭代结束时应用的callbacks
。xgboost.train
允许通过xgb_model
参数继续训练。xgboost.train
不仅允许 eval 函数的最小化,还允许最大化。
@Maxim,从 xgboost 0.90(或更早)开始,这些差异不再存在 xgboost.XGBClassifier.fit:
- 有
callbacks
- 允许使用
xgb_model
参数继续 - 并支持相同的内置评估指标或自定义评估函数
我发现不同的是evals_result
,因为它必须在fit(clf.evals_result()
)之后单独检索并且结果dict
是不同的,因为它不能带利用观察列表中评估的名称 ( watchlist = [(d_train, 'train'), (d_valid, 'valid')]
) .
在我看来,主要区别在于 training/prediction 速度。
为了进一步参考,我将调用 xgboost.train
- 'native_implementation' 和 XGBClassifier.fit
- 'sklearn_wrapper'
我已经在数据集形状 (240000, 348) 上做了一些基准测试
Fit/train时间:
sklearn_wrapper
时间=89秒
native_implementation
时间=7秒
预测时间:
sklearn_wrapper
= 6 秒
native_implementation
= 3.5 毫秒
我认为这是因为 sklearn_wrapper
旨在使用 pandas/numpy 对象作为输入,其中 native_implementation
需要将输入数据转换为 xgboost.DMatrix对象。
此外,可以使用 native_implementation
.