Ich versuche, train_test_split
von Paket scikit Learn zu verwenden, aber ich habe Probleme mit Parametern stratify
. Im Folgenden ist der Code:
from sklearn import cross_validation, datasets
X = iris.data[:,:2]
y = iris.target
cross_validation.train_test_split(X,y,stratify=y)
Ich bekomme jedoch immer wieder das folgende Problem:
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 was los ist? Unten finden Sie die Funktionsdokumentation.
[...]
stratifizieren : Array-ähnlich oder Keine (Standard ist Keine)
Wenn nicht Keine, werden die Daten geschichtet aufgeteilt, wobei dies als Beschriftungsarray verwendet wird.
Neu in Version 0.17: stratify Spaltung
[...]
split
scikit-learn
training-data
test-data
Daneel Olivaw
quelle
quelle
Antworten:
Scikit-Learn sagt Ihnen nur, dass es das Argument "stratifizieren" nicht erkennt, nicht, dass Sie es falsch verwenden. Dies liegt daran, dass der Parameter in Version 0.17 hinzugefügt wurde, wie in der von Ihnen angegebenen Dokumentation angegeben.
Sie müssen also nur Scikit-Learn aktualisieren.
quelle
scikit-learn 0.21.2 py37h2a6a0b8_0 conda-forge
Dieser
stratify
Parameter teilt sich so auf, dass der Anteil der Werte in der erzeugten Probe dem Anteil der Werte entspricht, die dem Parameter zur Verfügung gestellt werdenstratify
.Zum Beispiel, wenn die Variable
y
ist eine binäre kategoriale Variable mit Werten0
und1
ist und 25% von Nullen und 75% von Einsen,stratify=y
wird sicherstellen , dass Ihre zufällige Split 25% hat0
‚s und 75%1
‘ s.quelle
stratify
. Zweitens müssen Sie zur Korrektur des Ungleichgewichts eventuell eine Über- oder Unterabtastung des Trainingssatzes durchführen. Viele Sklearn-Klassifikatoren haben einen Parameter namens Klassengewicht, den Sie auf ausgeglichen einstellen können. Schließlich könnten Sie auch eine geeignetere Metrik als die Genauigkeit für einen unausgeglichenen Datensatz verwenden. Versuchen Sie, F1 oder Bereich unter ROC.Für mein zukünftiges Ich, das über Google hierher kommt:
train_test_split
ist jetzt inmodel_selection
, daher:ist der Weg, es zu benutzen. Das Einstellen von
random_state
ist für die Reproduzierbarkeit wünschenswert.quelle
In diesem Zusammenhang bedeutet Schichtung, dass die train_test_split-Methode Trainings- und Testteilmengen zurückgibt, die dieselben Anteile an Klassenbezeichnungen wie das Eingabedatensatz haben.
quelle
Versuchen Sie, diesen Code auszuführen, er "funktioniert einfach":
quelle
sklearn
der Version '0.17', Anaconda Distribution für Python 3.5. Ich kann nur empfehlen, noch einmal zu überprüfen, ob Sie den Code korrekt eingegeben und Ihre Software aktualisiert haben.sklearn
...