XGBoost XGBClassifier Defaults în Python (Programare, Python, Scikit Learn, Clasificare, Analiză, Xgboost)

Chris Arthur a intrebat.
a intrebat.

Încerc să folosesc clasificatorul XGBoosts pentru a clasifica niște date binare. Când fac cel mai simplu lucru și folosesc doar valorile implicite (după cum urmează)

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

obțin rezultate de clasificare rezonabil de bune.

Următorul meu pas a fost să încerc să-mi ajustez parametrii. Presupunând din ghidul de parametri de la…https://github.com/dmlc/xgboost/blob/master/doc/parameter.mdAm vrut să încep de la valorile implicite și să lucrez de acolo…

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

Rezultatul este că totul este prezis a fi una dintre condiții și nu cealaltă.

În mod curios, dacă setez

params={}

ceea ce mă așteptam să-mi dea aceleași valori implicite ca și cum nu aș fi introdus niciun parametru, se întâmplă același lucru

Deci, știe cineva care sunt valorile implicite pentru XGBclassifier, astfel încât să pot începe să le ajustez?

Comentarii

  • Această întrebare întâlnește un comportament similar, dar niciun răspuns dat stackoverflow.com/questions/33470477/… -.  > Por Chris Arthur.
3 răspunsuri
David

Nu așa se setează parametrii în xgboost. Ar trebui să doriți fie să treceți grila de parametri în funcția de instruire, cum ar fi xgboost’s train sau sklearn GridSearchCV, , fie ați dori să folosiți funcția XGBClassifier’s set_params . Un alt lucru de reținut este că, dacă folosiți învelișul xgboost pentru sklearn (de exemplu: funcția XGBClassifier() sau XGBRegressor() ), atunci numele parametrilor utilizați sunt aceleași cu cele utilizate în clasa GBM a sklearn (ex: eta –> learning_rate). Nu văd unde este ascunsă documentația exactă pentru wrapper-ul sklearn, dar codul pentru aceste clase este aici: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

Pentru referință, iată cum ați putea seta direct parametrii obiectului model.

>>> 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:Presupun că puteți seta parametrii la crearea modelului, doar că nu este super tipic să faceți acest lucru, deoarece majoritatea oamenilor caută în grilă prin anumite mijloace. Cu toate acestea, dacă faceți acest lucru, ar trebui fie să le enumerați ca parametri compleți, fie să utilizați **kwargs. De exemplu:

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

Utilizarea unui dicționar ca intrare fără **kwargs va seta acel parametru ca fiind literalmente dicționarul dvs:

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

Comentarii

  • Oricât de mult mi-aș dori să fie adevărat, nu puteți trece o grilă de parametri în funcția de formare a xgboost – valorile dicționarului de parametri nu pot fi liste –  > Por Edi Bice.
Jake Zidow

Valorile implicite pentru XGBClassifier sunt:

  • max_depth=3
  • learning_rate=0.1
  • n_estimatori=100
  • silent=True
  • objective=’binary:logistic’
  • booster=’gbtree’
  • n_jobs=1
  • nthread=None
  • gamma=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=None
  • missing=None

Legătură către documentația XGBClassifier cu valorile implicite ale clasei: https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier

Comentarii

  • Parametrii impliciți nu sunt menționați în documentația oficială pentru XGBClassifier din API sklearn (sunt pentru API-ul implicit oficial xgboost, dar nu există nicio garanție că sunt aceiași parametri impliciți utilizați de sklearn, în special atunci când xgboost afirmă că unele comportamente sunt diferite atunci când îl utilizează). Are cineva vreo idee unde ar putea fi găsit acum ? Chiar nu invită să trebuiască să ne scufundăm în codul sursă pentru a ști care ar putea fi parametrii defaut. –  > Por Pythalex.
  • Din păcate, acestea sunt cele mai apropiate documente oficiale pe care le am, dar au fost de încredere pentru definirea valorilor implicite atunci când am avut nevoie –  > Por Jake Zidow.
luoshao23

Pentru început, se pare că îți lipsește un element s pentru variabila ta param.

Ați scris param în partea de sus:

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

…dar folosiți params mai jos, la antrenarea modelului:

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

A fost doar o greșeală de scriere în exemplul tău?