web-dev-qa-db-ja.com

XGBoost XGBClassifierのデフォルトPython

XGBoosts分類器を使用して、いくつかのバイナリデータを分類しようとしています。私が最も簡単なことをして、デフォルトを使用するとき(次のように)

clf = xgb.XGBClassifier()
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2)
metLearn.fit(train, trainTarget)
testPredictions = metLearn.predict(test)

かなり良い分類結果が得られます。

次のステップは、パラメーターの調整を試すことでした。以下のパラメーターガイドから推測... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md デフォルトから開始してそこから作業するには...

# setup parameters for xgboost
param = {}
param['booster'] = 'gbtree'
param['objective'] = 'binary:logistic'
param["eval_metric"] = "error"
param['eta'] = 0.3
param['gamma'] = 0
param['max_depth'] = 6
param['min_child_weight']=1
param['max_delta_step'] = 0
param['subsample']= 1
param['colsample_bytree']=1
param['silent'] = 1
param['seed'] = 0
param['base_score'] = 0.5

clf = xgb.XGBClassifier(params)
metLearn=CalibratedClassifierCV(clf, method='isotonic', cv=2)
metLearn.fit(train, trainTarget)
testPredictions = metLearn.predict(test)

その結果、すべてが条件の1つであり、他の条件ではないことが予測されます。

不思議なことに私が設定した場合

params={}

パラメータを与えないのと同じデフォルトを与えると思っていましたが、同じことが起こります

だから、XGBclassifierのデフォルトが何であるか誰もが知っていますか?チューニングを始められるように?

22
Chris Arthur

これは、xgboostでパラメーターを設定する方法ではありません。パラメータグリッドをxgboostのtrainやsklearnのGridSearchCVなどのトレーニング関数に渡すか、XGBClassifierの_set_params_メソッドを使用します。もう1つ注意すべきことは、xgboostのラッパーを使用してsklearn(つまり、XGBClassifier()またはXGBRegressor()クラス)を使用している場合、使用されるパラメーター名はsklearn自身のGBMで使用されるものと同じですクラス(例:eta-> learning_rate)。 sklearnラッパーの正確なドキュメントがどこに隠されているかはわかりませんが、これらのクラスのコードは次のとおりです。 https://github.com/dmlc/xgboost/blob/master/python-package/xgboost /sklearn.py

ここでは、モデルオブジェクトのパラメーターを直接設定する方法について説明します。

_>>> grid = {'max_depth':10}
>>> 
>>> clf = XGBClassifier()
>>> clf.max_depth
3
>>> clf.set_params(**grid)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
       gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10,
       min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
       objective='binary:logistic', reg_alpha=0, reg_lambda=1,
       scale_pos_weight=1, seed=0, silent=True, subsample=1)
>>> clf.max_depth
10
_

編集:モデルの作成時にパラメーターを設定できると思いますが、ほとんどの人は何らかの方法でグリッドを検索するため、そうすることはあまり一般的ではありません。ただし、そうする場合は、完全なパラメーターとしてリストするか、** kwargsを使用する必要があります。例えば:

_>>> XGBClassifier(max_depth=10)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
       gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10,
       min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
       objective='binary:logistic', reg_alpha=0, reg_lambda=1,
       scale_pos_weight=1, seed=0, silent=True, subsample=1)
>>> XGBClassifier(**grid)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
       gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=10,
       min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
       objective='binary:logistic', reg_alpha=0, reg_lambda=1,
       scale_pos_weight=1, seed=0, silent=True, subsample=1)
_

辞書を** kwargsなしで入力として使用すると、そのパラメーターが文字通り辞書に設定されます。

_>>> XGBClassifier(grid)
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
       gamma=0, learning_rate=0.1, max_delta_step=0,
       max_depth={'max_depth': 10}, min_child_weight=1, missing=None,
       n_estimators=100, nthread=-1, objective='binary:logistic',
       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=0, silent=True,
       subsample=1)
_
24
David

XGBClassifierのデフォルトは次のとおりです。

  • max_depth = 3
  • learning_rate = 0.1
  • n_estimators = 100
  • silent = True
  • objective = 'binary:logistic'
  • booster = 'gbtree'
  • n_jobs = 1
  • nthread = None
  • ガンマ= 0
  • min_child_weight = 1
  • max_delta_step = 0
  • subsample = 1
  • colsample_bytree = 1
  • colsample_bylevel = 1
  • reg_alpha = 0
  • reg_lambda = 1
  • scale_pos_weight = 1
  • base_score = 0.5
  • random_state = 0
  • seed =なし
  • missing =なし

クラスデフォルトを使用したXGBClassifierドキュメントへのリンク: https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier

7
Jake Zidow

まず、変数paramの-​​sが欠落しているように見えます。

一番上にparamと書きました:

param = {}
param['booster'] = 'gbtree'
param['objective'] = 'binary:logistic'
  .
  .
  .

...しかし、モデルをトレーニングするときは、param sを使用してください:

clf = xgb.XGBClassifier(params)  <-- different variable!

それはあなたの例の単なるタイプミスですか?

2
luoshao23