Ich habe ein mehrklassiges Klassifizierungsproblem und mein Dataset ist verzerrt, ich habe 100 Instanzen einer bestimmten Klasse und sage 10 einer anderen Klasse, also möchte ich mein Dataset zwischen den Klassen teilen, wenn ich 100 Instanzen von a habe bestimmte Klasse und ich möchte 30% der Datensätze in den Trainingssatz gehen möchte ich dort 30 Instanzen meiner 100 Rekord vertretene Klasse und 3 Instanzen meiner 10 Rekord vertreten Klasse und so weiter haben.Wie teilt man einen Datensatz in Trainings- und Validierungsmengen auf, um das Verhältnis zwischen den Klassen zu halten?
Antwort
Sie sklearn die verwenden können StratifiedKFold
, aus den Online-Dokumentation:
Stratifizierte K-Folds Kreuzvalidierung Iterator
Bietet Zug/Test Indizes Daten in Zug Test-Sets aufgeteilt.
Dieses Kreuzvalidierungsobjekt ist eine Variante von KFold, die geschichtete Falten zurückgibt. Die Falten sind gemacht, indem der Prozentsatz der Proben für jede Klasse beibehalten wird.
>>> from sklearn import cross_validation
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]])
>>> y = np.array([0, 0, 1, 1])
>>> skf = cross_validation.StratifiedKFold(y, n_folds=2)
>>> len(skf)
2
>>> print(skf)
sklearn.cross_validation.StratifiedKFold(labels=[0 0 1 1], n_folds=2,
shuffle=False, random_state=None)
>>> for train_index, test_index in skf:
... print("TRAIN:", train_index, "TEST:", test_index)
... X_train, X_test = X[train_index], X[test_index]
... y_train, y_test = y[train_index], y[test_index]
TRAIN: [1 3] TEST: [0 2]
TRAIN: [0 2] TEST: [1 3]
Dies wird Ihre Klasse-Verhältnisse erhalten, so dass die Spaltungen, die Klassenverhältnisse behalten, wird dies mit Pandas dfs gut funktionieren.
Wie @Ali_m vorgeschlagen könnten Sie StratifiedShuffledSplit
verwenden, die eine param Splitverhältnis akzeptiert:
sss = StratifiedShuffleSplit(y, 3, test_size=0.7, random_state=0)
würde eine 70% ige Spaltung erzeugen.
You can simply use the following:
Aber stellen Sie sicher, dass Sie stratify der Klasse Etiketten von None zurück:
„stratify: Array-artiges oder None (Standard None ist) Wenn nicht None, werden die Daten in einem Split geschichtete Mode, mit diesem als die Klassenetiketten. "
Das Hinzufügen eines minimalen kontextuellen Beispiels (wie man dieses verwendet) würde diese Antwort besser machen . Versuchen Sie auch zu vermeiden, extern zu verlinken, ohne ausführlich zu erklären, zu was Sie verlinken. –
So einfach wie:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
stratify=y,
test_size=0.25)
- 1. Unterschied zwischen Trainings- und Testphase in Caffe
- 2. Wie UIImage mit Breite zu skalieren und halten Verhältnis
- 3. Ich möchte einen Vector erstellen, um Klassen zu halten
- 4. Wie teilt man einen Datenrahmen auf?
- 5. Wie teilt man einen String und pflanzt die Trennzeichen zwischen den geteilten Teilen in Kotlin?
- 6. Wie teilt man das Zeichen
- 7. Wie teilt man den Wert?
- 8. Wie man MySQL Datenbank-Verhältnis
- 9. Wie teilt man einen Datenstrom in Pakete auf?
- 10. Wie teilt man den Status zwischen Excel/Office-Dokumenten?
- 11. Wie man Konfigurationseinstellungen zwischen vielfachen Anwendungen teilt
- 12. Wie teilt man Zeichenketten und benennt Dateien in PowerShell um?
- 13. Wie teilt man Objekt zwischen Java-Anwendungen?
- 14. Wie teilt man das String-Vektor-Array in C++ auf
- 15. Wie man mehrere Ioloop in Tornado benutzt und Daten zwischen den Ioloop (s) teilt?
- 16. Wie teilt man die verbleibende Höhe zwischen zwei Elementen auf?
- 17. Div innerhalb div auf Bildschirmbreite und halten Verhältnis von Bild und auch Breite der anderen div
- 18. CreateFileMapping, MapViewOfFile, wie man vermeidet, den Systemspeicher zu halten
- 19. Wie teilt man einen Bereich aus kleinen Quadraten in größere Rechtecke auf?
- 20. Wie teilt man einen String auf und weist ihn Variablen in Golang zu?
- 21. Java - Wie teilt man einen String auf Pluszeichen?
- 22. Wie man einen String mit Zeilenumbrüchen teilt
- 23. Wie teilt man ein NSIS-Skript unter den Entwicklern auf?
- 24. Wie bekomme ich Applescript, um einen Schlüssel zu halten?
- 25. Wie teilt man die Zeichenfolge zwischen zwei Trennzeichen in Javascript?
- 26. R: Wie teilt man einen Labelnamen in einem Boxplot?
- 27. Wie kopiert man einen (aktiven) Datensatz teilweise zwischen Tabellen?
- 28. Wie teilt man Daten in AngularJS zwischen zwei Modulen?
- 29. Wie teilt man ein großes Paket auf, ohne den Client-Code zu beschädigen?
- 30. Wie teilt man SFSB Facade auf?
Wie teile ich 70/30 mit kFold Technik? – JackNova
können Sie ['StratifiedShuffleSplit'] (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedShuffleSplit.html#sklearn.cross_validation.StratifiedShuffleSplit) für nicht-ganzzahliges Teilen verwenden –
@EdChum tut dies Arbeit auch für Multi-Class-Zeitreihen-Klassifizierung Problem? – tilaprimera