J'ai un ensemble de données pour lequel j'essaie de prédire les variables cibles.
Col1 Col2 Col3 Col4 Col5
1 2 23 11 1
2 22 12 14 1
22 11 43 38 3
14 22 25 19 3
12 42 11 14 1
22 11 43 38 2
1 2 23 11 4
2 22 12 14 2
22 11 43 38 3
J'ai fourni un échantillon de données, mais le mien a des milliers d'enregistrements répartis de la même manière. Ici, Col1, Col2, Col3, Col4 sont mes fonctionnalités et Col5 est la variable cible. Par conséquent, la prédiction devrait être 1, 2, 3 ou 4 car ce sont mes valeurs pour la variable cible. J'ai essayé d'utiliser des algorithmes tels que la forêt aléatoire, l'arbre de décision, etc. pour les prédictions.
Ici, si vous voyez, les valeurs 1,2 et 3 se produisent plus de fois par rapport à 4. Par conséquent, tout en prédisant, mon modèle est plus biaisé vers 1 2 et 3 alors que je reçois seulement moins de prédictions pour 4 (je n'ai eu que 1 prédite pour policy4 sur des milliers d'enregistrements lorsque j'ai vu la matrice de confusion).
Afin de généraliser mon modèle, j'ai supprimé au hasard un pourcentage égal de données appartenant aux valeurs 1,2 et 3. J'ai groupé par chaque valeur dans Col5, puis supprimé un certain pourcentage, de sorte que j'ai réduit le nombre d'enregistrements. Maintenant, je pouvais voir une certaine augmentation du pourcentage de précision et également une augmentation raisonnable des prévisions pour la valeur 4 dans la matrice de confusion.
Est-ce la bonne approche à traiter (retirer les données au hasard des groupes sur lesquels le modèle est biaisé)?
J'ai essayé des algorithmes python intégrés comme Adaboost, des techniques GradientBoost utilisant sklearn. J'ai lu que ces algorithmes sont pour gérer la classe de déséquilibre. Mais je n'ai pas réussi à améliorer ma précision, plutôt en supprimant au hasard les données, où j'ai pu voir quelques améliorations.
Cette réduction est-elle une technique de sous-échantillonnage et est-ce la bonne approche pour le sous-échantillonnage?
Existe-t-il des packages prédéfinis dans sklearn ou une logique que je peux implémenter en python pour y parvenir, si ma suppression aléatoire est incorrecte?
J'ai également appris la technique SMOTE, qui traite du suréchantillonnage. Dois-je essayer ceci pour la valeur 4? Et pouvons-nous le faire en utilisant des packages intégrés en python? Ce serait formidable si quelqu'un m'aide dans cette situation.
class_weight
- ce que c'est de construire une matrice de coûts pour vous où pour chaque classesample_weight=[C_k for k in y]
àaccuracy_score
ou utiliser quelque chose commef1_score
.Oui, c'est une bonne technique pour résoudre le problème du déséquilibre de classe. Cependant, les méthodes de sous-échantillonnage conduisent à la perte d'informations dans l'ensemble de données (par exemple, vous venez de supprimer un modèle intéressant parmi les variables restantes, ce qui aurait pu contribuer à une meilleure formation du modèle). C'est pourquoi les méthodes de suréchantillonnage sont préférées, en particulier dans le cas d'un ensemble de données plus petit.
En réponse à votre question concernant les packages Python, la boîte à outils d' apprentissage déséquilibré est spécialement dédiée à la même tâche. Il propose plusieurs méthodes de sous-échantillonnage et de suréchantillonnage. Je recommanderais d'essayer la technique SMOTE .
la source
Cela dépend de la technique d'ensemble que vous souhaitez utiliser. Le problème de base avec lequel vous travaillez avec un problème de déséquilibre de données multi-classes. Le sous-échantillonnage peut être utilisé efficacement dans l'ensachage ainsi que dans les techniques de boosting. L'algorithme SMOTE est très efficace pour générer de nouveaux échantillons. Le problème de déséquilibre des données a été largement étudié dans la littérature. Je vous recommande de lire sur l'un de ces algorithmes: SMOTE-Boost SMOTE-Bagging Rus-Boost EusBoost Ce sont des techniques de boosting / bagging conçues spécifiquement pour les problèmes de données de déséquilibre. Au lieu de SMOTE, vous pouvez essayer ADA-SMOTE ou Border-Line SMOTE. J'ai utilisé et modifié le Border-Line SMOTE pour le multi-classe et il est très efficace. Si votre base de données est très volumineuse et que le problème est facile, essayez: classificateur alto - jones. J'ai aussi utilisé avec un problème de déséquilibre des données et c'est vraiment efficace
la source
Il y a déjà de bonnes réponses ici. Je pensais juste que j'ajouterais une technique de plus puisque vous cherchez à utiliser des ensembles d'arbres. Dans de nombreux cas, vous cherchez à optimiser la courbe de levage ou l'AUC pour le ROC. Pour cela, je recommanderais le critère de distance Hellinger pour diviser les branches de vos arbres. Au moment de la rédaction de ce document, il ne se trouve pas dans le package d' apprentissage déséquilibré , mais il semble qu'il existe un plan .
la source
Lorsque vous traitez un problème de déséquilibre de classe, vous devez principalement vous concentrer sur la métrique d'erreur et vous devez choisir le score F1 comme métrique d'erreur.
Après avoir choisi la métrique correcte, nous pouvons utiliser différentes techniques pour résoudre ce problème.
Si vous êtes intéressé, vous pouvez consulter le blog suivant, il est très bien expliqué sur les techniques utilisées pour résoudre ce problème de déséquilibre de classe:
https://knowledgengg.wordpress.com/2019/03/04/this-is-suresh/
la source