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函数,还允许最大化.@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
。
归档时间: |
|
查看次数: |
5314 次 |
最近记录: |