Zufällige, stratifizierte Teilmengenbildung mithilfe von train_test_split

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

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:

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)
Verwendet werden würden somit (X_train, y_train), (X_train_2, y_train_2) und (X_train_3, y_train_3).

Mithilfe von

Code: Alles auswählen

stratify=y
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
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

PS. Es handelt sich um einen Datensatz mit Bildern, wie z.B. dem MNIST-Datensatz.
Benutzeravatar
ThomasL
User
Beiträge: 1377
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Machst du das nur für dich zum Spaß oder steckt ein tieferer Sinn dahinter?
Denn ehrlich, ich sehe da keinen. Je mehr Daten desto besser die Ergebnisse.
Neuronale Netze sind ja erst seit dem es Daten ohne Ende gibt so erfolgreich geworden.
Ich bin kein Mathematiker und Statistiker um deine Frage " inwieweit dies wirklich random sampling entspricht" korrekt zu beantworten aber ich bin da so bauchgefühlmäßig am zweifeln.
Bin gerade beim googeln noch auf diese Funktion hier gestoßen.
https://scikit-learn.org/stable/modules ... Split.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
CodeIt
User
Beiträge: 36
Registriert: Mittwoch 13. September 2017, 06:10

Vielen Dank für den Link.
ThomasL hat geschrieben: Donnerstag 5. September 2019, 12:41 Machst du das nur für dich zum Spaß oder steckt ein tieferer Sinn dahinter?
Denn ehrlich, ich sehe da keinen. Je mehr Daten desto besser die Ergebnisse.
Neuronale Netze sind ja erst seit dem es Daten ohne Ende gibt so erfolgreich geworden.
Ich bin kein Mathematiker und Statistiker um deine Frage " inwieweit dies wirklich random sampling entspricht" korrekt zu beantworten aber ich bin da so bauchgefühlmäßig am zweifeln.
Bin gerade beim googeln noch auf diese Funktion hier gestoßen.
https://scikit-learn.org/stable/modules ... Split.html
Es steckt ein tieferer Sinn dahinter, denn es sollen unterschiedliche Klassifikatoren, wie z.B. die SVM mit einer CNN, in Abhängigkeit der unterschiedlichen Trainingsmengen verglichen werden. Und ja die Leistungsfähigkeit einer CNN ist abhängig von der Trainingsmenge, je mehr Trainingsdaten desto besser. Während eine SVM bei großer Trainingsmenge eher weniger geeignet ist, da z.B. zu langsam beim Training.
Es sollen verschiedene Varianten von Klassifikatoren verwendet werden, z.B. CNN mit DataAugmentation, Hybridsysteme (Kombination von CNN mit SVM) etc.
Es sollen später noch andere Bilddatensätze verwendet werden. Es geht darum in Abhängigkeit von der Komplexität der Daten und der Menge der Daten jeweils das leistungsfähigere Modell zu finden.
Antworten