2015-08-11 14 views
8

Ho un set di dati, che è stato precedentemente suddiviso in 3 set: treno, convalida e test. Questi set devono essere utilizzati come dati per confrontare le prestazioni tra diversi algoritmi.Utilizzo del set di convalida explict (predefinito) per la ricerca della griglia con sklearn

Vorrei ora ottimizzare i parametri del mio SVM utilizzando il set di convalida. Tuttavia, non riesco a trovare come inserire esplicitamente il set di convalida in sklearn.grid_search.GridSearchCV(). Di seguito è riportato un codice precedentemente utilizzato per eseguire la convalida incrociata K-fold sul set di allenamento. Tuttavia, per questo problema ho bisogno di usare il set di validazione come dato. Come lo posso fare?

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

Ho avuto lo stesso problema. Grazie per averlo segnalato! – Riyaz

risposta

10

Uso PredefinedSplit

ps = PredefinedSplit(test_fold=your_test_fold) 

quindi impostare cv=ps in GridSearchCV

test_fold: “array simile, la forma (N_SAMPLES,)

test_fold [i] dà la prova impostare la piega del campione i. Un valore di -1 indica che il campione corrispondente non fa parte di alcun gruppo di prove, ma sarà invece inserito nella piega di allenamento.

vedi anche here

quando si utilizza un insieme di validazione, impostare il test_fold a 0 per tutti i campioni che fanno parte del set di validazione, e a -1 per tutti gli altri campioni.