2014-11-24 17 views
9

Simile a Custom cross validation split sklearn Voglio definire le mie divisioni per GridSearchCV per le quali ho bisogno di personalizzare l'iteratore di convalida incrociata incorporato.Come personalizzare l'iteratore di convalida incrociata sklearn per indici?

Voglio passare il mio set di indici di test del treno per la convalida incrociata a GridSearch invece di consentire all'iterizzatore di determinarli per me. Ho passato gli iteratori di cv disponibili sulla pagina di documentazione di sklearn ma non sono riuscito a trovarlo.

Per esempio Voglio realizzare qualcosa di simile dati dispone di 9 campioni Per 2 volte cv Creo il mio proprio insieme di indici di formazione-testing

>>> train_indices = [[1,3,5,7,9],[2,4,6,8]] 
>>> test_indices = [[2,4,6,8],[1,3,5,7,9]] 
       1st fold^ 2nd fold^ 
>>> custom_cv = sklearn.cross_validation.customcv(train_indices,test_indices) 
>>> clf = GridSearchCV(X,y,params,cv=custom_cv) 

Che cosa può essere utilizzato per lavorare come customcv?

+0

Potrebbe aggiungere una domanda? Inoltre non sono a conoscenza dell'esistenza di 'customcv' in' sklearn.cross_validation', quindi probabilmente non dovresti metterlo. Sei sicuro che 'LeaveOneLabelOut' non funzioni nel tuo caso? – eickenberg

+1

Ho dato customcv come esempio di ciò che volevo implementare ... non è in sklearn. Ill provare il metodo che hai dato nella tua risposta – tangy

risposta

9

In realtà, gli iteratori di convalida incrociata sono proprio questo: Iterator. Restituiscono una tupla di treno/test di piega ad ogni iterazione. Questo dovrebbe quindi lavorare per voi:

custom_cv = zip(train_indices, test_indices) 

Inoltre, per il caso specifico che si sta di nota, si può fare

import numpy as np 
labels = np.arange(0, 10) % 2 
from sklearn.cross_validation import LeaveOneLabelOut 
cv = LeaveOneLabelOut(labels) 

osservare che list(cv) rendimenti

[(array([1, 3, 5, 7, 9]), array([0, 2, 4, 6, 8])), 
(array([0, 2, 4, 6, 8]), array([1, 3, 5, 7, 9]))] 
+0

Modifica: Questo è per le versioni precedenti alla 0.18 di scikit-learn. La funzionalità del modulo 'cross_validation' è ora in' model_selection', e gli splitter di validazione incrociata sono ora classi che devono essere esplicitamente richieste per dividere i dati usando il metodo 'split'. Questo per semplificare la convalida incrociata nidificata. – eickenberg

Problemi correlati