Classe non équilibrée: class_weight pour les algorithmes ML dans Spark MLLib

8

Dans python sklearn, il existe plusieurs algorithmes (par exemple la régression, la forêt aléatoire ... etc.) qui ont le paramètre class_weight pour gérer les données non équilibrées.

Cependant, je ne trouve pas un tel paramètre pour les algorithmes MLLib. Existe-t-il un plan d'implémentation de class_weight pour certains algorithmes MLLib? Ou existe-t-il une approche dans MLLib pour les données non équilibrées? Ou devons-nous réellement gérer tous les échantillonnages ascendants / descendants dans MLLib?

Merci!

Edamame
la source
Oui, les algorithmes du MLLib de Spark sont prêts à gérer des problèmes complexes. De plus, d'après ma compréhension, il n'y a pas non plus de moyen d'effectuer un fractionnement stratifié. Ainsi, les mesures de performances que vous acquérez ne seront pas représentées de manière appropriée.
Samuel Sherman
Voici un exemple de régression logistique pondérée dans MLlib à partir de la documentation 2.2.
Emre

Réponses:

1

Les algorithmes de MLLib sont toujours utilisés comme référence dans le scénario de production, et ils ne peuvent en effet pas gérer certains problèmes industriels, tels que le déséquilibre des étiquettes. Donc, si vous voulez les utiliser, vous devez équilibrer vos instances.

En outre, le mécanisme de BSP dans Spark, vous pouvez simplement voir que les données parallèles peuvent être la principale raison pour laquelle Spark ne couvre pas ce problème. Il peut être difficile pour Spark d'envoyer des instances à tous les nœuds du cluster, tandis que les instances partielles de chaque nœud partagent la même distribution d'étiquettes que l'ensemble.

Enfin, vous ne devez pondérer la valeur de perte pour chaque instance étiquetée mineure au cours de votre processus d'itération que si vous souhaitez l'implémenter.

J'espère que cela vous aidera, bonne chance -)

Joe
la source
1

L'une des façons dont j'ai géré les classes déséquilibrées dans le passé a été de créer un classificateur basé sur des échantillons d'un ensemble de données pour avoir un échantillon 50/50 divisé. Cela signifie utiliser tous les points de données associés à votre classe minoritaire et échantillonner au hasard le même nombre de points de données de votre classe majoritaire.

Que cela fonctionne dépend de la quantité de données que vous avez réellement dans votre classe minoritaire - si vous avez un déséquilibre de classe extrême (<5% d'instances de classe minoritaire), alors vous voudrez peut-être envisager un suréchantillonnage synthétique.

Vous pourriez probablement regarder pydf.rdd.takeSample()dans une étincelle ou df.sampledans des pandas.

ngopal
la source
0

La façon dont j'ai géré les déséquilibres de classe consiste à suivre les méthodes suivantes: 1. Fusionner la classe qui apparaît le moins fréquemment dans les autres classes. Évidemment, vous devez utiliser une sorte de connaissance du domaine au lieu de les fusionner au hasard 2. Utilisez des techniques de rééchantillonnage comme le suréchantillonnage, le sous-échantillonnage, SMOTE, ADASYN. Je ne recommande pas d'utiliser ces techniques car elles ne représentent pas réellement les données réelles. Mais en tout cas, vous pouvez certainement les consulter

Siddhi Kiran Bajracharya
la source