Zufällige, stratifizierte Teilmengenbildung mithilfe von train_test_split
Verfasst: Mittwoch 4. September 2019, 18:18
Hallo,
ich möchte einen Datensatz derart in Teilmengen zufällig unterteilen, sodass diese vom kompletten Datensatz ausgehend eine absteigende Größe aufweisen. Die jeweils kleineren Teilmengen sollen in den größeren Teilmengen jeweils enthalten sein.
In anderen Worten: vom kompletten Datensatz ausgehend soll zunächst eine Teilmenge gebildet werden, welche 90% des kompletten Datensatzes enthält. Dann soll eine Teilmenge gebildet werden, welche 90% der vorherigen Teilmenge enthält usw...
Dabei soll die Klassenverteilung beibehalten werden.
Mein bisheriger Ansatz wäre folgender:
Verwendet werden würden somit (X_train, y_train), (X_train_2, y_train_2) und (X_train_3, y_train_3).
Mithilfe von soll die Klassenverteilung beibehalten. shuffle=True ist die Standardeinstellung der train_test_split-Methode.
Mir stellt sich die Frage inwieweit dies wirklich random sampling entspricht, da diese Teildatensätze für einen Vergleich verschiedener Klassifikatoren verwendet werden sollen? Ich versuche damit zu testen, ab welche Trainingsdatengröße welcher Klassifikator eine bessere Genauigkeit/Klassifikationsleistung erzielt.
Für Vorschläge, Meinungen, Tipps wäre ich sehr dankbar
ich möchte einen Datensatz derart in Teilmengen zufällig unterteilen, sodass diese vom kompletten Datensatz ausgehend eine absteigende Größe aufweisen. Die jeweils kleineren Teilmengen sollen in den größeren Teilmengen jeweils enthalten sein.
In anderen Worten: vom kompletten Datensatz ausgehend soll zunächst eine Teilmenge gebildet werden, welche 90% des kompletten Datensatzes enthält. Dann soll eine Teilmenge gebildet werden, welche 90% der vorherigen Teilmenge enthält usw...
Dabei soll die Klassenverteilung beibehalten werden.
Mein bisheriger Ansatz wäre folgender:
Code: Alles auswählen
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0, test_size= 1/10, stratify=y)
X_train_2, X_test_2, y_train_2, y_test_2 = train_test_split(X_train, y_train, random_state=0, test_size= 1/10, stratify=y_train)
X_train_3, X_test_3, y_train_3, y_test_3 = train_test_split(X_train_2, y_train_2, random_state=0, test_size= 1/10, stratify=y_train_2)
Mithilfe von
Code: Alles auswählen
stratify=y
Mir stellt sich die Frage inwieweit dies wirklich random sampling entspricht, da diese Teildatensätze für einen Vergleich verschiedener Klassifikatoren verwendet werden sollen? Ich versuche damit zu testen, ab welche Trainingsdatengröße welcher Klassifikator eine bessere Genauigkeit/Klassifikationsleistung erzielt.
Für Vorschläge, Meinungen, Tipps wäre ich sehr dankbar