2016-06-21 31 views
8

Używam interfejsu sklearn xgboots poniżej, aby utworzyć i wyszkolić model xgb-1.Różnica między oryginalnym Xgboost a 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)]) 

A model xgboost mogą być tworzone przez pierwotnego xgboost jako model-2 poniżej:

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) 

Myślę, że wszystkie parametry są takie same od modelu 1 i modelu-2. Ale wynik sprawdzania poprawności jest inny. Czy jest jakaś różnica między modelem-1 a modelem-2?

+2

miałem ten sam problem. Spędziłem kilka godzin przechodząc przez wszystkie dokumenty i cały mój kod, ustawiłem wszystkie parametry tak samo, a następnie trenowałem. Mimo to uważam, że 'xgb.XGBClassifier' daje 0,51 auc, a' xgb.train' daje 0,84 auc. Nie mam pojęcia dlaczego. – josh

+1

Interfejs 'sklearn' nie ma niektórych opcji. Na przykład metoda 'set_group' klasy' DMatrix', która ma kluczowe znaczenie dla rankingu, nie ma analogii w interfejsie 'sklearn'. – xolodec

Odpowiedz

1

Wyniki powinny być takie same, ponieważ XGBClassifier to tylko interfejs sklearn, który na końcu wywołuje bibliotekę xgb.

Możesz spróbować dodać ten sam seed do obu podejść, aby uzyskać takie same wyniki. Na przykład w interfejsie Twój sklearn „s:

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

Zrobiłem to, ale wciąż nie miałem szczęścia. Zobacz komentarz na pytanie! – josh

3

Jak rozumiem, istnieje wiele różnic między domyślnymi parametrami w xgb iw jego interfejs sklearn. Na przykład: domyślne xgb ma eta = 0.3, podczas gdy drugie ma eta = 0.1. Możesz dowiedzieć się więcej o domyślnymi parametrami każdego implementuje tutaj:

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: Zasadniczą częścią jest to, że dwa narzędzia mają różne domyślne parametry. Podam również przykład. Pozdrowienia, –