我使用下面的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)
我认为model-1和model-2之间的所有参数都是相同的。但验证分数不同。 model-1和model-2之间有什么区别吗?
答案 0 :(得分:5)
据我了解,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
答案 1 :(得分:2)
结果应该相同,因为XGBClassifier
只是sklearn
的接口,最终会调用xgb
库。
您可以尝试向两种方法添加相同的seed
以获得相同的结果。例如,在sklearn
的界面中:
clf = xgb.XGBClassifier(n_estimators = 100, objective= 'binary:logistic',seed=1234)
答案 2 :(得分:1)
就我而言,我为 sklearn 中 XGVRegressor 的 10
提供了 n_esetimators
,它代表原始 xgboost 的 num_boost_round
,两者都显示相同的结果,但它是线性回归。其他参数默认设置。
#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。
试试吧。