xgb.train和xgb.XGBRegressor(或xgb.XGBClassifier)有什么区别?

Sta*_*ham 12 python regression machine-learning scikit-learn xgboost

我已经知道" xgboost.XGBRegressor是XGBoost的Scikit-Learn Wrapper界面."

但他们还有其他区别吗?

Max*_*xim 20

xgboost.train 是通过梯度增强方法训练模型的低级API.

xgboost.XGBRegressor并且xgboost.XGBClassifier是包装器(Scikit-Learn-like包装器,他们称之为),它们准备DMatrix并传递相应的目标函数和参数.最后,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)
Run Code Online (Sandbox Code Playgroud)

这意味着,一切都可以用做XGBRegressor并且XGBClassifier是通过潜在可行的xgboost.train功能.另一种方式显然不是这样,例如,API xgboost.train中不支持一些有用的参数XGBModel.明显差异列表包括:

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


pau*_*rry 9

@Maxim,从 xgboost 0.90(或更早版本)开始,这些差异在xgboost.XGBClassifier.fit 中不再存在:

  • callbacks
  • 允许与xgb_model参数连接
  • 并支持相同的内置评估指标或自定义评估功能

我发现不同的是evals_result,它必须在 fit ( clf.evals_result())之后单独检索,结果dict不同,因为它不能利用监视列表 ( watchlist = [(d_train, 'train'), (d_valid, 'valid')])中的 eval 名称。


小智 5

我认为主要区别在于训练/预测速度。

为了进一步参考,我将调用xgboost.train- 'native_implementation' 和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 对象。

此外,还可以使用 .n_estimators 来优化 n_estimators native_implementation

  • “本机实现”需要 DMatrix 作为输入。在计算“本机实现”的时间时,您是否考虑过将数据转换为 DMatrix 所需的时间? (4认同)