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!
Réponses:
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 -)
la source
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 oudf.sample
dans des pandas.la source
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
la source
En plus du dernier article, vous pouvez jeter un œil à la bibliothèque imblearn ( https://imbalanced-learn.readthedocs.io/en/stable/index.html ) qui vous permet également d'effectuer différents types de sur / sous-échantillonnage comme SMOTE / SMOTENEC
la source