XGBClassifier()包装器v.s. xgb.train()

时间:2019-12-07 16:26:37

标签: python parameters xgboost xgbclassifier

我试图理解为什么XGBoostClassifier()和xgb.train使用相同的数据和参数给出不同的结果。

我不使用虹膜数据集,但是它也在这里发生,因此我用它来说明问题。 我知道我应该进行train_test拆分,但是由于数据很少,所以我想以这种方式进行处理(使用train来查看错误)。如果我在train_test中拆分,则会发生在我的数据上,但是不幸的是,这是私人数据,我无法共享。

他们应该给出相同的结果,但他们却没有(我已经阅读了很多次文档,但找不到答案)。我尝试指定尽可能多的参数(实际上是XGBClassifier返回的所有参数),因此默认情况下没有参数被覆盖/放置

# -*- coding: utf-8 -*-
import xgboost as xgb
from sklearn.metrics import accuracy_score
from sklearn import datasets
import numpy as np


iris=datasets.load_iris()
X=iris.data
y=iris.target




dtrain = xgb.DMatrix(X,label = y)
dtest =  xgb.DMatrix(X, label = y)



params={'base_score': 0.5,
  'booster': 'gbtree',
  'tree_method': 'auto',
  'colsample_bylevel': 1,
  'colsample_bynode': 1,
  'colsample_bytree': 1,
  'gamma': 0,
  'learning_rate': 0.1,
  'max_delta_step': 0,
  'max_depth': 2,
  'min_child_weight': 1,
  'missing': None,
  'n_estimators': 100,
  'n_jobs': 1,
  'nthread': 2,
  'objective': 'multi:softprob',
  'random_state': 0,
  'reg_alpha': 0,
  'reg_lambda': 1,
  'scale_pos_weight': 1,
  'seed': 0,
  'silent': 1,
  'subsample': 1,
  'verbosity': 1,
  'eta': 0.1,
  'num_class': 5}

skboost = xgb.XGBClassifier(params=params).fit(X,y)

skpred=np.argmax(skboost.predict_proba(X),axis=1)
print("XGBClassifier (wrapper)===>",accuracy_score(skpred,y))

booster = xgb.train(params, dtrain)
pred=np.argmax(booster.predict(dtest),axis=1)

print("xgb.train===>",accuracy_score(pred,y))


booster2 = xgb.train(skboost.get_xgb_params()["params"], dtrain)
pred=np.argmax(booster2.predict(dtest),axis=1)


print("xgb.train with wrapper.get_xgb_params()===>",accuracy_score(pred,y))

我得到的输出是

XGBClassifier (wrapper)===> 1.0
xgb.train===> 0.9733333333333334
xgb.train with wrapper.get_xgb_params()===> 0.9733333333333334

有什么想法吗?

预先感谢

0 个答案:

没有答案