Wie die geteilten Daten auf einem ausgewogenen Trainings-set und test-set auf sklearn
Ich bin mit sklearn für multi-Klassifizierung Aufgabe. Ich brauche split alldata in train_set und test_set. Ich will, dass der zufällig die gleiche sample-Anzahl pro Klasse.
Eigentlich habe ich amüsant diese Funktion
X_train, X_test, y_train, y_test = cross_validation.train_test_split(Data, Target, test_size=0.3, random_state=0)
aber es gibt unsymmetrisch dataset! Jede Anregung.
wenn Sie noch verwenden möchten
Auf einer Seite Hinweis, für eine unausgewogene Ausbildung mit sklearn.ensemble.RandomForestClassifier zum Beispiel
cross_validation.train_test_split
und Sie sind auf sklearn 0.17
Sie können die balance-training und-test, überprüfen Sie heraus meine AntwortAuf einer Seite Hinweis, für eine unausgewogene Ausbildung mit sklearn.ensemble.RandomForestClassifier zum Beispiel
class_weight="balanced"
verwendet werden kann.InformationsquelleAutor Jeanne | 2016-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie StratifiedShuffleSplit zu erstellen, die Datensätze mit den gleichen Prozentsatz von Klassen als das original:
"zu erstellen, die Datensätze mit den gleichen Prozentsatz von Klassen als das original:" nach github.com/scikit-learn/scikit-learn/issues/8913 dies ist nicht immer der Fall.
InformationsquelleAutor Christian Hirsch
Obwohl Christian ' s Vorschlag ist richtig, technisch
train_test_split
sollte Ihnen geschichteten Ergebnisse durch die Verwendung desstratify
param.Damit Sie tun könnten:
Der trick hier ist, dass es beginnt ab der version
0.17
imsklearn
.Aus der Dokumentation über die parameter
stratify
:es gibt zwei weitere Parameter in der
train_test_split
:train_size
,test_size
(und die, abgesehen von der Vertretung einen Anteil, wennfloat
werden, können Sie auchint
). Noch nie ausprobiert, aber ich denke, dasstrain_size=100
,test_size=50
kombiniert mit derstratify
param funktionieren sollte.Ich habe nicht versucht es, aber wenn Sie das o, Sie sollten 100 Ausbildungs-Proben folgt, dass die ursprüngliche Verteilung und 50 folgt, dass die ursprüngliche Verteilung zu. (Ich ändere das Beispiel ein wenig zu klären, suppouse class1=200 Proben, class2=400 Proben), dann ist dein Zug gesetzt haben 33 Beispiele aus der class1 und 67 von class2, und Ihre test-set 18-Beispiele aus der class1 und 32 von class2. Soweit ich das verstanden habe, die ursprüngliche Frage ist zu versuchen, um ein Zug-set mit 50 Beispiele aus der class1 und 50 von class2, aber ein test-set mit 18 Beispiele von class1 und 32 von class2.
Um zu klären, split mit Schichten schafft Proben der Daten in der gleichen Anteil der das original. z.B. wenn die Klassen in Ihre Daten sind split von 70/30, dann Schichten aufgeteilt wird, erstellen Sie Proben mit 70/30 split.
InformationsquelleAutor Guiem Bosch
Wenn die Klassen nicht ausgeglichen sind, aber Sie wollen das split ausgeglichen zu sein, dann stratifying ist nicht zu helfen. Es scheint nicht zu sein, eine Methode, das zu tun ausgewogenes sampling in sklearn, aber es ist einfach basic verwenden, numpy, zum Beispiel eine Funktion wie diese Ihnen helfen könnten:
Beachten Sie, dass wenn Sie diese und Beispiel mehr Punkte pro Klasse als in der input-Daten, dann werden diese mit Upsampling (Probe mit Ersatz). Als Ergebnis, werden einige Daten Punkte wird mehrmals angezeigt und kann dies einen Effekt auf die Genauigkeit Maßnahmen etc. Und wenn manche Klasse hat nur einen Datenpunkt, gibt es einen Fehler. Sie können leicht überprüfen, die zahlen der Punkte pro Klasse zum Beispiel mit
np.unique(target, return_counts=True)
Du hast absolut Recht und ich versuchte zu erwähnen, das mit den Worten: "haben Sie vielleicht repliziert Punkte in Ihrem Trainings-und Testdaten, die verursachen können Ihre Modell-performance suchen allzu optimistisch," aber nun verstehe ich auch die Formulierung ist vielleicht nicht perfekt gewesen, sorry. Ich werde Bearbeiten Sie den code so, dass es nicht freigegebenen Daten Punkte mehr.
InformationsquelleAutor antike
Dies ist meine Umsetzung, die ich verwendet, um-Zug - /Testdaten-Indizes
InformationsquelleAutor Cobry