【问题标题】:What is the difference between xgb.train and xgb.XGBRegressor (or xgb.XGBClassifier)?xgb.train 和 xgb.XGBRegressor(或 xgb.XGBClassifier)有什么区别?
【发布时间】:2018-04-19 12:58:39
【问题描述】:

我已经知道“xgboost.XGBRegressor 是 XGBoost 的 Scikit-Learn Wrapper 接口。”

但它们还有其他区别吗?

【问题讨论】:

  • 参数名称的差异,输入的差异,评估策略的差异。请查看python apigithub page。这不是一个好问题。如果您在理解这两种方法的输出时有任何困难,请用代码提出详细的问题。

标签: python machine-learning scikit-learn regression xgboost


【解决方案1】:

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

为了进一步参考,我将调用 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 对象。

此外,可以使用native_implementation 优化 n_estimators。

【讨论】:

  • “本机实现”需要 DMatrix 作为输入。在计算“原生实现”的时间时,您是否考虑过将数据转换为 DMatrix 所需的时间?
【解决方案2】:

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

  • callbacks
  • 允许使用xgb_model 参数继续
  • 并支持相同的内置评估指标或自定义评估函数

我发现不同的是 evals_result,因为它必须在拟合后单独检索 (clf.evals_result()) 并且生成的 dict 是不同的,因为它不能利用 eval 的名称关注列表 (watchlist = [(d_train, 'train'), (d_valid, 'valid')])。

【讨论】:

    【解决方案3】:

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

    xgboost.XGBRegressorxgboost.XGBClassifier 是准备 DMatrix 并传入相应的目标函数和参数的包装器(类似 Scikit-Learn 的包装器)。最后,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 的一些有用参数在XGBModel API 中不受支持。显着差异列表包括:

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

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2018-12-15
      • 1970-01-01
      • 2021-08-10
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-22
      相关资源
      最近更新 更多