J'ai 3 classes avec cette distribution:
Class 0: 0.1169
Class 1: 0.7668
Class 2: 0.1163
Et j'utilise xgboost
pour la classification. Je sais qu'il y a un paramètre appelé scale_pos_weight
.
Mais comment est-il géré pour le cas «multiclasse», et comment puis-je le configurer correctement?
Cette réponse de @KeremT est correcte. Je donne un exemple à ceux qui ont encore des problèmes avec la mise en œuvre exacte.
weight
dans XGBoost est par instance et non par classe. Par conséquent, nous devons attribuer le poids de chaque classe à ses instances, ce qui est la même chose.Par exemple, si nous avons trois classes déséquilibrées avec des ratios
Leurs poids seraient (en divisant la plus petite classe par d'autres)
Ensuite, si les données d'entraînement sont
nous construisons le
weight
vecteur comme suit:la source
Tout le monde tombe sur cette question lorsqu'il s'agit d'un problème de classification multiclasse déséquilibré en utilisant XGBoost dans R. Je l'ai fait aussi!
Je cherchais un exemple pour mieux comprendre comment l'appliquer. Investi près d'une heure pour trouver le lien mentionné ci-dessous. Pour tous ceux qui cherchent un exemple, voici -
/datascience//a/9493/37156
Merci wacax
la source
Attribuez simplement à chaque instance de vos données de train son poids de classe. Obtenez d'abord les poids de classe avec
class_weight.compute_class_weight
de sklearn puis attribuez à chaque ligne des données du train son poids approprié.Je suppose ici que les données du train ont la colonne «classe» contenant le numéro de classe. J'ai supposé aussi qu'il y a nb_classes qui vont de 1 à nb_classes.
la source