Wie wird ein Datensatz in Trainings- und Validierungsmengen aufgeteilt?

8

Ich habe ein Klassifikationsproblem mit mehreren Klassen und mein Dataset ist verzerrt, ich habe 100 Instanzen einer bestimmten Klasse und sage 10 einer anderen Klasse. Daher möchte ich mein Dataset-Aufbewahrungsverhältnis zwischen Klassen aufteilen, wenn ich 100 Instanzen davon habe eine bestimmte Klasse und ich möchte 30% der Datensätze in das Trainingssatz gehen Ich möchte dort 30 Instanzen von meinem 100 Datensatz vertreten Klasse und 3 Instanzen von meinem 10 Datensatz vertreten Klasse und so weiter.

    
JackNova 16.03.2015, 16:27
quelle

3 Antworten

8

Sie können sklearns StratifiedKFold verwenden , aus den Online-Dokumenten:

  

Geschichteter K-Faltungs-Kreuzvalidierungs-Iterator

     

Bietet Zug / Test   Indizes zum Aufteilen von Daten in Zugprüfsätzen.

     

Dieses Kreuzvalidierungsobjekt   ist eine Variante von KFold, die stratifizierte Falten zurückgibt. Die Falten sind   gemacht, indem der Prozentsatz der Proben für jede Klasse beibehalten wird.

%Vor%

Dies wird Ihre Klassenverhältnisse erhalten, so dass die Splits die Klassenverhältnisse behalten, das wird gut mit Pandas dfs funktionieren.

Wie von @Ali_m vorgeschlagen, können Sie StratifiedShuffledSplit verwenden. , die ein Split-Verhältnis-Parameter akzeptiert:

sss = StratifiedShuffleSplit(y, 3, test_size=0.7, random_state=0)

würde eine Aufteilung von 70% erzeugen.

    
EdChum 16.03.2015, 16:34
quelle
2

So einfach wie:

%Vor%     
Thư Sinh 11.09.2017 13:50
quelle
-1

Sie können einfach Folgendes verwenden:

Stellen Sie jedoch sicher, dass Sie stratify von None auf die Klassenbeschriftungen zurücksetzen:

"stratify: Array-like oder None (Standardwert ist None) Wenn nicht, werden Daten in einer geschichteten Weise aufgeteilt, wobei diese als Klassenbezeichnungen verwendet werden. "

    
Peter Sarvari 09.08.2017 16:11
quelle