2016-06-21 35 views
8

Io uso l'interfaccia xgboots sklearn sotto per creare e addestrare un xgb model-1.diverso tra originale xgboost e sklearn XGBClassifier

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

E il modello xgboost possono essere creati da xgboost originale come modello-2 di seguito:

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) 

Credo che tutti i parametri sono gli stessi tra il modello-1 e il modello-2. Ma il punteggio di validazione è diverso. C'è qualche differenza tra model-1 e model-2?

+2

ho avuto lo stesso problema. Ho passato alcune ore a esaminare tutti i documenti e tutto il mio codice, ho impostato tutti i parametri allo stesso modo e poi mi sono allenato. Comunque, trovo che 'xgb.XGBClassifier' dia 0.51 auc e' xgb.train' dia 0.84 auc. Non ho idea del perché. L'interfaccia 'sklearn' – josh

+1

non ha alcune opzioni. Ad esempio, il metodo 'set_group' della classe' DMatrix' che è cruciale per la classifica non ha un analogo nell'interfaccia 'sklearn'. – xolodec

risposta

1

I risultati dovrebbero essere gli stessi, poiché XGBClassifier è solo l'interfaccia di sklearn che alla fine chiama alla libreria xgb.

È possibile provare ad aggiungere lo stesso seed a entrambi gli approcci al fine di ottenere gli stessi risultati. Per esempio, in un'interfaccia s' il tuo sklearn:

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

L'ho fatto ma ancora senza fortuna. Vedi il commento sulla domanda! – josh

3

quanto ho capito, ci sono molte differenze tra i parametri di default in XGB e nella sua interfaccia sklearn. Ad esempio: default xgb ha eta = 0,3 mentre l'altro ha eta = 0,1. Si può vedere di più su parametri predefiniti di ogni implementa qui:

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: La parte essenziale è che due strumenti hanno parametri predefiniti diversi. Dò anche un esempio. Saluti, –