繁体   English   中英

原始 xgboost (Learning API) 和 sklearn XGBClassifier (Scikit-Learn API) 的区别

[英]Difference between original xgboost (Learning API) and sklearn XGBClassifier (Scikit-Learn API)

我使用下面的 xgboots sklearn 接口来创建和训练 xgb 模型-1。

clf = xgb.XGBClassifier(n_estimators = 100, objective= 'binary:logistic',)
clf.fit(x_train, y_train,  early_stopping_rounds=10, eval_metric="auc", 
    eval_set=[(x_valid, y_valid)])

并且 xgboost 模型可以由原始 xgboost 创建为模型 2 如下:

param = {}
param['objective'] = 'binary:logistic'
param['eval_metric'] = "auc"
num_rounds = 100
xgtrain = xgb.DMatrix(x_train, label=y_train)
xgval = xgb.DMatrix(x_valid, label=y_valid)
watchlist = [(xgtrain, 'train'),(xgval, 'val')]
model = xgb.train(plst, xgtrain, num_rounds, watchlist, early_stopping_rounds=10)

我认为模型 1 和模型 2 之间的所有参数都是相同的。 但是验证分数是不同的。 模型 1 和模型 2 之间有什么区别吗?

据我了解,xgb 及其 sklearn 接口中的默认参数之间存在许多差异。 例如:默认 xgb 具有 eta=0.3,而另一个具有 eta=0.1。 您可以在此处查看有关每个工具的默认参数的更多信息:

https://github.com/dmlc/xgboost/blob/master/doc/parameter.md http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn

结果应该是一样的,因为XGBClassifier只是最终调用xgb库的sklearn的接口。

您可以尝试向两种方法添加相同的seed以获得相同的结果。 例如,在sklearn的界面中:

clf = xgb.XGBClassifier(n_estimators = 100, objective= 'binary:logistic',seed=1234)

就我而言,我给10n_esetimators在sklearn这是代表XGVRegressor的num_boost_round原xgboost的和都显示同样的结果,这是线性回归虽然。 其他参数设置为默认值。

#1
param = {
    'objective': 'reg:squarederror'
}
bst = xgb.train(param, dtrain)

#2
sk_xgb = xgb.XGBRegressor(objective="reg:squarederror", n_estimators=10)

# #1 and #2 result same

我的环境是 xgboost 1.3.0 和 conda 4.9.2 上的 scikit-learn 0.24.1。

试试吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM