In Python Sklearn gibt es mehrere Algorithmen (z. B. Regression, zufällige Gesamtstruktur usw.), die den Parameter class_weight haben, um unausgeglichene Daten zu verarbeiten.
Ich finde jedoch keinen solchen Parameter für die MLLib-Algorithmen. Gibt es einen Plan zur Implementierung von class_weight für einen MLLib-Algorithmus? Oder gibt es in MLLib einen Ansatz für unausgeglichene Daten? Oder müssen wir das gesamte Up / Downsampling in MLLib selbst durchführen?
Vielen Dank!
Antworten:
Algorithmen in MLLib werden im Produktionsszenario immer als Basis verwendet, und sie können tatsächlich einige industrielle Probleme, wie z. B. das Ungleichgewicht von Etiketten, nicht bewältigen. Wenn Sie sie also verwenden möchten, müssen Sie Ihre Instanzen ausgleichen.
Außerdem könnte der BSP- Mechanismus in Spark, den Sie einfach als Datenparallel betrachten können, der Hauptgrund sein, warum Spark dieses Problem nicht abdeckt. Es kann für Spark schwierig sein, Instanzen an alle Knoten im Cluster zu senden, während die Teilinstanzen jedes Knotens dieselbe Beschriftungsverteilung wie die gesamte haben.
Zuletzt müssen Sie den Verlustwert für jede kleinere beschriftete Instanz während Ihres Iterationsprozesses nur gewichten , wenn Sie ihn implementieren möchten.
Hoffe das wird dir helfen, viel Glück -)
quelle
Eine der Methoden, mit denen ich in der Vergangenheit mit unausgeglichenen Klassen umgegangen bin, bestand darin, einen Klassifikator basierend auf einem Datensatz zu erstellen, der eine 50/50-Stichprobenaufteilung aufweist. Dies bedeutet, dass Sie alle Datenpunkte verwenden, die Ihrer Minderheitsklasse zugeordnet sind, und zufällig dieselbe Anzahl von Datenpunkten aus Ihrer Mehrheitsklasse auswählen.
Ob dies funktioniert, hängt davon ab, wie viele Daten Sie tatsächlich in Ihrer Minderheitsklasse haben. Wenn Sie ein extremes Klassenungleichgewicht aufweisen (<5% Instanzen von Minderheitsklassen), sollten Sie eine synthetische Überabtastung in Betracht ziehen.
Sie könnten wahrscheinlich
pydf.rdd.takeSample()
in Funken oderdf.sample
in Pandas betrachten.quelle
Ich habe mit Klassenungleichgewichten wie folgt umgegangen: 1. Zusammenführen der Klasse, die anderen Klassen am seltensten vorkommt. Natürlich sollten Sie eine Art Domänenwissen verwenden, anstatt sie zufällig zusammenzuführen. 2. Verwenden Sie Resampling-Techniken wie Oversampling, Undersampling, SMOTE, ADASYN. Ich empfehle nicht, diese Techniken zu verwenden, da sie nicht die tatsächlichen Daten darstellen. Aber auf jeden Fall können Sie sie sich ansehen
quelle
Zusätzlich zum letzten Beitrag können Sie sich die imblearn-Bibliothek ( https://imbalanced-learn.readthedocs.io/en/stable/index.html ) ansehen, in der Sie auch verschiedene Arten von Über- / Unterabtastung durchführen können als SMOTE / SMOTENEC
quelle