J'essaie d'utiliser le classifieur XGBoosts pour classer certaines données binaires. Quand je fais la chose la plus simple et utilise simplement 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 des résultats de classement assez bons.
Ma prochaine étape a été d'essayer de régler mes paramètres. Devinette du guide des paramètres à ... https://github.com/dmlc/xgboost/blob/master/doc/parameter.md Je voulais commencer à partir des paramètres 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 résultat est que tout devrait être l'une des conditions et non l'autre.
curieusement si je mets
params={}
que je m'attendais à me donner les mêmes valeurs par défaut que de ne pas alimenter de paramètres, la même chose se produit
Alors, est-ce que quelqu'un sait quelles sont les valeurs par défaut pour XGBclassifier? afin que je puisse commencer à accorder?
Ce n'est pas ainsi que vous définissez les paramètres dans xgboost. Vous voudrez soit passer votre grille de paramètres dans votre fonction d’entraînement, telle que train
de xgboost ou GridSearchCV
de sklearn, soit utiliser la méthode set_params
De votre XGBClassifier. Une autre chose à noter est que si vous utilisez le wrapper de xgboost pour apprendre à apprendre (c'est-à-dire: les classes XGBClassifier()
ou XGBRegressor()
), les noms de paramètres utilisés sont les mêmes que ceux utilisés dans le GBM de Sklearn. classe (ex: eta -> learning_rate). Je ne vois pas où la documentation exacte de l'encapsuleur Sklearn est masquée, mais le code de ces classes est ici: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost /sklearn.py
Pour votre information, voici comment définir les paramètres d'objet de modèle 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
EDIT: Je suppose que vous pouvez définir des paramètres pour la création de modèles, ce n’est tout simplement pas génial de le faire, car la plupart des gens effectuent une recherche par grille selon certains moyens. Cependant, si vous le faites, vous devrez soit les lister en tant que paramètres complets, soit 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, ce paramètre sera 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)
Les valeurs par défaut pour XGBClassifier sont les suivantes:
Lien vers la documentation XGBClassifier avec les valeurs par défaut de la classe: https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier
Pour commencer, on dirait qu'il vous manque un s pour votre variable param
.
Vous avez écrit param en haut:
param = {}
param['booster'] = 'gbtree'
param['objective'] = 'binary:logistic'
.
.
.
... mais utilisez param s plus bas pour former le modèle:
clf = xgb.XGBClassifier(params) <-- different variable!
Était-ce juste une faute de frappe dans votre exemple?