2016-06-21 5 views
8

Ich benutze die xgboots sklearn Schnittstelle unten, um ein xgb Modell-1 zu erstellen und zu trainieren.beliebig unterschiedlich zwischen original xgboost und sklearn XGBClassifier

param = {} 
param['objective'] = 'binary:logistic' 
param['eval_metric'] = "auc" 
num_rounds = 100 
xgtrain = xgb.DMatrix(x_train, label=y_train) 
xgval = xgb.DMatrix(x_valid, label=y_valid) 
watchlist = [(xgtrain, 'train'),(xgval, 'val')] 
model = xgb.train(plst, xgtrain, num_rounds, watchlist, early_stopping_rounds=10) 

Ich denke, dass alle Parameter sind die gleichen zwischen Modell-1 und Modell-2:

clf = xgb.XGBClassifier(n_estimators = 100, objective= 'binary:logistic',) 
clf.fit(x_train, y_train, early_stopping_rounds=10, eval_metric="auc", 
    eval_set=[(x_valid, y_valid)]) 

Und das xgboost Modell kann von Original xgboost als Modell-2 unten erstellt werden. Der Validierungswert ist jedoch unterschiedlich. Gibt es einen Unterschied zwischen Model-1 und Model-2?

+2

ich das gleiche Problem gehabt haben. Ich verbrachte ein paar Stunden damit, alle Dokumente und meinen gesamten Code durchzugehen, alle Parameter gleich einzustellen und dann zu trainieren. Dennoch finde ich, dass der "xgb.XGBClassifier" 0,51 Auc ergibt und "xgb.train" 0,84 Auc ergibt. Ich habe keine Idee warum. – josh

+1

'sklearn' Schnittstelle hat nicht einige Optionen. Zum Beispiel hat die Methode 'set_group' der' DMatrix'-Klasse, die für das Ranking entscheidend ist, keine analoge Schnittstelle in 'sklearn'. – xolodec

Antwort

1

Ergebnisse sollten die gleichen sein, wie XGBClassifier ist nur eine sklearn 's Schnittstelle, die am Ende ruft die xgb Bibliothek.

Sie können versuchen, dieselbe Methode seed zu beiden Ansätzen hinzuzufügen, um die gleichen Ergebnisse zu erhalten. Zum Beispiel in Ihrem sklearn ‚s-Schnittstelle:

clf = xgb.XGBClassifier(n_estimators = 100, objective= 'binary:logistic',seed=1234) 
+0

Ich habe das aber noch kein Glück gemacht. Siehe Kommentar zu Frage! – josh

3

Wie ich verstehe, gibt es viele Unterschiede zwischen den Standardparametern in XGB und in seiner sklearn Schnittstelle. Zum Beispiel: default xgb hat eta = 0.3, während der andere eta = 0.1 hat. Sie können mehr über Standardparameter sehen jedes hier implementiert:

https://github.com/dmlc/xgboost/blob/master/doc/parameter.md http://xgboost.readthedocs.io/en/latest/python/python_api.html#module-xgboost.sklearn

+0

@ gofr1: Der wesentliche Teil ist, dass zwei Geräte unterschiedliche Standardparameter haben. Ich gebe auch ein Beispiel. Grüße, –

Verwandte Themen