XGBoost XGBClassifier-standaardinstellingen in Python

Ik probeer de XGBoosts-classificatie te gebruiken om enkele binaire gegevens te classificeren. Als ik het eenvoudigste doe en gewoon de standaardinstellingen gebruik (als volgt)

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

Ik krijg redelijk goede classificatieresultaten.

Mijn volgende stap was om te proberen mijn parameters af te stemmen. Gissen uit de parametergids op…
https://github.com/dmlc/xgboost/blob/master/doc /parameter.md
Ik wilde beginnen met de standaard en van daaruit werken…

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

Het resultaat is dat alles wordt voorspeld als een van de voorwaarden en niet de andere.

nieuwsgierig als ik

params={}

waarvan ik verwachtte dat het me dezelfde standaardwaarden zou geven als het niet invoeren van parameters, ik krijg hetzelfde gebeuren

Dus weet iemand wat de standaardwaarden voor XGBclassifier zijn? zodat ik kan beginnen met afstemmen?


Antwoord 1, autoriteit 100%

Dat is niet hoe je parameters in xgboost instelt. Je zou ofwel je param-raster willen doorgeven aan je trainingsfunctie, zoals xgboost’s trainof sklearn’s GridSearchCV, of je zou de set_paramsmethode. Een ander ding om op te merken is dat als je de wrapper van xgboost gebruikt om te sklearn (dwz: de klassen XGBClassifier()of XGBRegressor()), de gebruikte parameternamen hetzelfde zijn die worden gebruikt in de eigen GBM-klasse van sklearn (bijvoorbeeld: eta –> learning_rate). Ik zie niet waar de exacte documentatie voor de sklearn-wrapper is verborgen, maar de code voor die klassen is hier: https://github.com/dmlc/xgboost/blob/master/python-package/xgboost/sklearn.py

Voor uw referentie is hier hoe u de modelobjectparameters rechtstreeks zou instellen.

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

BEWERKEN:
Ik veronderstel dat je parameters kunt instellen voor het maken van modellen, het is gewoon niet super typisch om dit te doen, omdat de meeste mensen op de een of andere manier zoeken in een raster. Als u dit echter doet, moet u ze ofwel als volledige parameters vermelden of **kwargs gebruiken. Bijvoorbeeld:

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

Als u een woordenboek gebruikt als invoer zonder **kwargs, wordt die parameter letterlijk uw woordenboek:

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

Antwoord 2, autoriteit 74%

De standaardwaarden voor XGBClassifier zijn:

  • max_depth=3
  • learning_rate=0.1
  • n_estimators=100
  • stil=Waar
  • objective=’binary:logistic’
  • booster=’gbtree’
  • n_jobs=1
  • nthread=Geen
  • gamma=0
  • min_child_weight=1
  • max_delta_step=0
  • subsample=1
  • colsample_bytree=1
  • colsample_bylevel=1
  • reg_alpha=0
  • REG_LAMBDA = 1
  • schaal_pos_weight = 1
  • BASE_SCORE = 0.5
  • random_state = 0
  • zaad = geen
  • ontbreekt = geen

Link naar XGBCLassifier Documentatie met Klasse Defaults: https: // xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.xgbclassifier


Antwoord 3, Autoriteit 5%

Voor starters, ziet eruit alsof je een s mist voor je variabele param.

u schreef param bovenaan:

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

… maar gebruik Param S verder naar beneden, bij het trainen van het model:

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

was dat gewoon een typfout in uw voorbeeld?


Antwoord 4

Je bent er bijna! U bent gewoon vergeten het Woordenboek van de Params (de **-operator) uit te pakken. In plaats van dit (die een enkel woordenboek passeert als de eerste positional arg):

clf = xgb.XGBClassifier(params)

U had dit moeten doen (wat het maakt, zodat de sleutels in het woordenboek elk worden verstreken als trefwoord Args):

clf = xgb.XGBClassifier(**params)

Other episodes