原始XGBoost(Learning API)和Sklearn XGBClassifier(Scikit-Learn A



i使用XGBoots Sklearn接口在下面创建和训练XGB Model-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创建为Model-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之间有任何区别?

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

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

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

您可以尝试将相同的seed添加到两种方法中,以获得相同的结果。例如,在您的sklearn的接口中:

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

在我的情况下,我在sklearn中的xgvRegressor的 n_esetimators给了 10,它代表原始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

我的env是xgboost 1.3.0,conda 4.9.2上的scikit-learn 0.24.1。

尝试。

相关内容

  • 没有找到相关文章

最新更新