2015-08-11 18 views
8

Mam zestaw danych, który został wcześniej podzielony na 3 zestawy: pociąg, sprawdzanie poprawności i test. Zestawy te muszą być używane w celu porównania wydajności różnych algorytmów.Przy użyciu explict (predefiniowane) zestaw sprawdzania poprawności do wyszukiwania siatki ze sklearn

Chciałbym teraz zoptymalizować parametry mojego SVM przy użyciu zestawu sprawdzania poprawności. Jednak nie mogę znaleźć sposobu wprowadzenia zestawu walidacji jawnie do sklearn.grid_search.GridSearchCV(). Poniżej znajduje się kod, który wcześniej używałam do rutowania krzyżowego na zestawie treningowym. Jednak w przypadku tego problemu muszę użyć zestawu sprawdzania poprawności, jak podano. Jak mogę to zrobić?

from sklearn import svm, cross_validation 
from sklearn.grid_search import GridSearchCV 

# (some code left out to simplify things) 

skf = cross_validation.StratifiedKFold(y_train, n_folds=5, shuffle = True) 
clf = GridSearchCV(svm.SVC(tol=0.005, cache_size=6000, 
          class_weight=penalty_weights), 
        param_grid=tuned_parameters, 
        n_jobs=2, 
        pre_dispatch="n_jobs", 
        cv=skf, 
        scoring=scorer) 

    clf.fit(X_train, y_train) 
+0

Miałem ten sam problem. Dzięki za zgłoszenie! – Riyaz

Odpowiedz

10

Zastosowanie PredefinedSplit

ps = PredefinedSplit(test_fold=your_test_fold) 

ustaw cv=ps w GridSearchCV

test_fold „tablicowej kształtu (n_samples,)

test_fold [b] podaje test ustawić fałdę próbki i. Wartość -1 wskazuje, że odpowiednia próbka nie jest częścią fałd zestawu testów, ale zamiast tego zawsze zostanie umieszczona w fałdzie treningu.

patrz także here

przy zastosowaniu zestawu do walidacji ustawić test_fold 0 dla wszystkich próbek, które stanowią część zestawu do walidacji oraz 1 dla wszystkich pozostałych prób.