2016-01-17 7 views
14

Ich versuche zu verwenden train_test_split von Paket scikit lernen, aber ich habe Probleme mit Parameter stratify. Im Folgenden ist der Code:Parameter "stratify" von Methode "train_test_split" (Scikit lernen)

from sklearn import cross_validation, datasets 

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

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

Allerdings habe ich immer folgendes Problem bekommen:

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])} 

Hat jemand eine Idee haben, was los ist? Unten ist die Funktionsdokumentation.

[...]

stratify: array artige oder None (Standard ist None)

Wenn nicht Nichts, werden die Daten in einer geschichteten Art und Weise aufgeteilt, wobei dies als die Etiketten Array.

Neu in Version 0.17: stratify Spaltung

[...]

Antwort

6

Scikit-Learn sagt Ihnen nur, dass es das Argument "stratify" nicht erkennt, nicht dass Sie es falsch verwenden. Dies liegt daran, dass der Parameter in der Version 0.17 hinzugefügt wurde, wie in der von Ihnen zitierten Dokumentation angegeben.

Sie müssen also nur Scikit-Learn aktualisieren.

2

Versuchen Sie diesen Code ausgeführt wird, es "einfach funktioniert":

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

Ich habe das versucht und es funktioniert immer noch nicht. –

+0

@ user5767535 Wie Sie vielleicht sehen, funktioniert es auf meinem Ubuntu-Rechner, mit 'sklearn' von '0.17' Version, Anaconda Distribution für Python 3.5. Ich kann nur vorschlagen, noch einmal zu überprüfen, ob Sie den Code korrekt eingeben und Ihre Software aktualisieren. –

+2

@ user5767535 BTW, "Neu in Version 0.17: stratify splitting" macht mich fast sicher, dass du dein 'sklearn' aktualisieren musst ... –

39

This stratify Parameter Marken eine Aufteilung, so dass der Anteil der Werte in der erzeugten Probe der gleiche ist wie der Anteil der Werte, die dem Parameter stratify zur Verfügung gestellt werden.

Zum Beispiel, wenn variable y eine binäre kategoriale Variable mit Werten ist 0 und 1 ist und 25% von Nullen und 75% von Einsen, wird stratify=y stellen Sie sicher, dass Ihre zufällige Split 25% des 0 ‚s hat und 75 % von 1 's.

+0

Dies beantwortet nicht wirklich die Frage, aber ist sehr nützlich, um nur zu verstehen, wie es funktioniert. Danke vielmals. –

2

Für meine Zukunft selbst, die hier über Google kommt:

train_test_split ist jetzt in model_selection, daher:

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) 

ist der Weg, es zu benutzen. Das Einstellen der random_state ist für die Reproduzierbarkeit wünschenswert.

0

In diesem Kontext bedeutet Stratifizierung, dass die train_test_split-Methode Trainings- und Test-Subsets zurückgibt, die die gleichen Klassenbezeichnungen wie das Eingabe-Dataset aufweisen.