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.
Sie können sklearns StratifiedKFold
verwenden , aus den Online-Dokumenten:
%Vor%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.
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.
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. "
Tags und Links python machine-learning numpy pandas scikit-learn