【问题标题】:Different results for XGBoost using python api and scikit-learn wapper使用 python api 和 scikit-learn wapper 的 XGBoost 的不同结果
【发布时间】:2017-07-30 16:49:38
【问题描述】:

以下是姬松茸样本数据示例:

import xgboost as xgb
from sklearn.datasets import load_svmlight_files

X_train, y_train, X_test, y_test = load_svmlight_files(('agaricus.txt.train', 'agaricus.txt.test'))

clf = xgb.XGBClassifier()
param = clf.get_xgb_params()
clf.fit(X_train, y_train)
preds_sk = clf.predict_proba(X_test)

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test)
bst = xgb.train(param, dtrain)
preds = bst.predict(dtest)

print preds_sk
print preds

结果是:

[[  9.98860419e-01   1.13956432e-03]
 [  2.97790766e-03   9.97022092e-01]
 [  9.98816252e-01   1.18372787e-03]
 ..., 
 [  1.95205212e-04   9.99804795e-01]
 [  9.98845220e-01   1.15479471e-03]
 [  5.69522381e-04   9.99430478e-01]]

[ 0.21558253  0.7351886   0.21558253 ...,  0.81527805  0.18158565
  0.81527805]

为什么结果不同?似乎所有默认参数值都相同。我并不是说 predict_proba 返回[prob, 1- prob]

xgboost v0.6、scikit-learn v0.18.1、python 2.7.12

【问题讨论】:

    标签: python machine-learning scikit-learn classification xgboost


    【解决方案1】:

    你需要将num_boost_round参数直接传递给xgb.train:

    bst = xgb.train(param, dtrain,num_boost_round=param['n_estimators'])
    

    因为否则它会忽略 param['n_estimators'] 并使用默认的估计器数量,目前 xgb.train 接口为 10,而 n_estimators 的默认值为 100。

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2019-12-09
      • 2018-12-31
      • 1970-01-01
      • 2017-12-22
      • 2017-02-02
      • 2017-12-22
      • 2016-10-22
      • 2018-06-12
      相关资源
      最近更新 更多