![](/img/trans.png)
[英]Different results for XGBoost using python api and scikit-learn wapper
[英]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)
就我而言,我给10
对n_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.