2016-01-17 42 views
14

Sto tentando di utilizzare train_test_split dal pacchetto scikit Learn, ma ho problemi con il parametro stratify. Qui di seguito è il codice:Parametro "stratify" dal metodo "train_test_split" (scikit Learn)

from sklearn import cross_validation, datasets 

X = iris.data[:,:2] 
y = iris.target 

cross_validation.train_test_split(X,y,stratify=y) 

Tuttavia, continuo a ricevere il seguente problema:

raise TypeError("Invalid parameters passed: %s" % str(options)) 
TypeError: Invalid parameters passed: {'stratify': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])} 

Qualcuno ha un'idea di ciò che sta succedendo? Di seguito è riportata la documentazione della funzione.

[...]

stratificare: array-like o Nessuno (di default è None)

Altrimenti No, i dati è diviso in maniera stratificata, usando questo come le etichette array.

Nuovo nella versione 0.17: stratificare splitting

[...]

risposta

6

Scikit-Learn ti sta solo dicendo che non riconosce l'argomento "stratificare", non che lo stai usando in modo errato. Questo perché il parametro è stato aggiunto nella versione 0.17 come indicato nella documentazione che hai citato.

Quindi è sufficiente aggiornare Scikit-Learn.

2

provare a eseguire questo codice, "funziona":

from sklearn import cross_validation, datasets 

iris = datasets.load_iris() 

X = iris.data[:,:2] 
y = iris.target 

x_train, x_test, y_train, y_test = cross_validation.train_test_split(X,y,train_size=.8, stratify=y) 

y_test 

array([0, 0, 0, 0, 2, 2, 1, 0, 1, 2, 2, 0, 0, 1, 0, 1, 1, 2, 1, 2, 0, 2, 2, 
     1, 2, 1, 1, 0, 2, 1]) 
+0

Ho provato questo e ancora non funziona. –

+0

@ user5767535 Come si può vedere sta funzionando sulla mia macchina Ubuntu, con 'sklearn' della versione '0.17', distribuzione Anaconda per Python 3.5. Posso solo suggerire di controllare un'altra volta se inserisci il codice correttamente e aggiorni il tuo software. –

+2

@ user5767535 BTW, "Novità nella versione 0.17: stratify splitting" mi rende quasi sicuro che devi aggiornare il tuo 'sklearn' ... –

39

Questo stratify marche parametro una divisione in modo che la proporzione dei valori nel campione prodotto sia uguale alla proporzione di valori fornita al parametro stratify.

Ad esempio, se la variabile y è una variabile categorica binaria con valori 0 e 1 e ci sono il 25% di zeri e il 75% di quelli, stratify=y farà in modo che la vostra divisa casuale ha il 25% di 0 's e 75 % di 1.

+0

Questo non risponde alla domanda, ma è molto utile per capire come funziona. Grazie mille. –

2

Per il mio sé futuro che viene qui tramite Google:

train_test_split è ora in model_selection, quindi:

from sklearn.model_selection import train_test_split 

# given: 
# features: xs 
# ground truth: ys 

x_train, x_test, y_train, y_test = train_test_split(xs, ys, 
                test_size=0.33, 
                random_state=0, 
                stratify=ys) 

è il modo di usarlo. L'impostazione di random_state è auspicabile per la riproducibilità.

0

In questo contesto, stratificazione significa che il metodo train_test_split restituisce sottoinsiemi di addestramento e test che hanno le stesse proporzioni delle etichette di classe del set di dati di input.