Unausgeglichene Klasse: class_weight für ML-Algorithmen in Spark MLLib


8

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!


Ja, die Algorithmen in der MLLib von Spark sind auf komplexe Probleme vorbereitet. Außerdem gibt es meines Wissens auch keine Möglichkeit, eine geschichtete Aufteilung durchzuführen. Daher werden von Ihnen erfasste Leistungsmetriken nicht angemessen dargestellt.
Samuel Sherman

Hier ist ein Beispiel für eine gewichtete logistische Regression in MLlib aus der 2.2-Dokumentation.
Emre

Antworten:


1

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 -)


1

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 oder df.samplein Pandas betrachten.


0

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.