43

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 のデフォルトが何であるかを知っている人はいますか? チューニングを開始できるようにするには?

4

5 に答える 5

39

これは、xgboost でパラメーターを設定する方法ではありません。パラメータ グリッドを xgboost や sklearn などのトレーニング関数に渡すかtrainGridSearchCVXGBClassifier のメソッドを使用する必要があります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)
于 2016-01-09T17:14:06.953 に答える
0

(更新) すぐに使用できる分類子モデルに適合すると、デフォルト値が表示されます。

XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
              colsample_bynode=1, colsample_bytree=1, gamma=0, gpu_id=-1,
              importance_type='gain', interaction_constraints='',
              learning_rate=0.300000012, max_delta_step=0, max_depth=6,
              min_child_weight=1, missing=nan, monotone_constraints='()',
              n_estimators=100, n_jobs=12, num_parallel_tree=1,
              objective='multi:softprob', random_state=0, reg_alpha=0,
              reg_lambda=1, scale_pos_weight=None, subsample=1,
              tree_method='exact', use_label_encoder=False,
              validate_parameters=1, verbosity=None)

詳細はこちら: https://xgboost.readthedocs.io/en/latest/parameter.html

于 2022-01-26T23:41:32.190 に答える