XGBoost XGBClassifier par défaut en Python

je tente d'utiliser xgboosts classifier pour classer certaines données binaires. Quand je fais la chose la plus simple et utilise juste les valeurs par défaut (comme suit)

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

j'obtiens de bons résultats de classification.

ma prochaine étape a été d'essayer de régler mes paramètres. Je devine à partir du guide des paramètres... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md Je voulais commencer par la valeur par défaut et travailler à partir de là...

# 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)

le le résultat est tout étant prévu pour être l'une des conditions et pas dans l'autre.

curieusement si je mets

params={}

que je m'attendais à me donner par défaut comme ne pas alimenter de paramètres, j'obtiens la même chose qui se passe

est-ce que quelqu'un sait ce qu'est la valeur par défaut de XGBclassifier? pour que je puisse commencer à accorder?

15
demandé sur Chris Arthur 2016-01-08 13:30:37

3 réponses

ce n'est pas comme ça que vous définissez les paramètres dans xgboost. Vous voulez soit passer votre grille de param dans votre fonction d'entraînement, comme xgboost's train ou sklearn GridSearchCV, ou vous voulez utiliser votre XGBClassifier set_params méthode. Une autre chose à noter est que si vous utilisez le wrapper de xgboost pour sklearn (i.e.: le XGBClassifier() ou XGBRegressor() classes) alors les noms de paramaters utilisés sont les mêmes que ceux utilisés dans la propre classe GBM de sklearn (ex: eta --> learning_rate). Je ne vois pas où exactement la documentation pour le sklearn wrapper est cachée, mais le code pour ces classes est ici: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

pour votre référence voici comment vous définiriez les paramètres de l'objet model directement.

>>> 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

modifier: Je suppose que vous pouvez définir des paramètres sur la création de modèle, il est tout simplement pas super typique de le faire puisque la plupart des gens grille la recherche dans certains moyens. Toutefois, si vous faites ainsi, vous devez soit les énumérer en tant que params ou utiliser * * kwargs. Par exemple:

>>> 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)

en utilisant un dictionnaire comme entrée sans **kwargs définira ce paramètre comme étant littéralement votre dictionnaire:

>>> 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)
21
répondu David 2016-01-09 17:20:21

les valeurs par défaut pour XGBClassifier à la documentation de XGBClassifier avec la classe par défaut: https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier

3
répondu Jake Zidow 2018-09-13 20:37:38

pour commencer, on dirait que vous manquez un s pour votre variable param.

Vous avez écrit param en haut:

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

...mais utiliser param s plus bas, lors de la formation du modèle:

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

Est-ce juste une faute de frappe dans votre exemple?

2
répondu luoshao23 2018-04-21 20:39:52