1

J'ai un problème de classification binaire où une classe représentait 99,1% de toutes les observations (210 000). En tant que stratégie pour gérer les données déséquilibrées, je choisis des techniques d'échantillonnage. Mais je ne sais pas quoi faire: sous-échantillonner ma classe majoritaire ou suréchantillonner la classe la moins représentée. Si quelqu'un a un conseil?Données déséquilibrées: sous-échantillonnage ou suréchantillonnage?

Merci.

P.s. J'utilise un algorithme de forêt aléatoire de sklearn.

+1

Si 0,9% des 210000 observations suffisent pour le montage, puis undersample le principal classe. Sinon, sur-échantillonner la classe la moins représentée. Ou bien sûr, vous pouvez faire les deux. – frankyjuang

Répondre

1
  • suréchantillonnage ou
  • sous échantillonnage ou
  • sous échantillonnage de la minorité et la majorité suréchantillonnage

est un hyperparam'etre. Faire la validation croisée qui fonctionne le mieux. Mais utilisez un ensemble de formation/test/validation.

+0

Merci @CAFEBABE! –

0

Je pense qu'il y a une faute de frappe dans la réponse acceptée ci-dessus. Vous ne devriez pas "sous-échantillonner la minorité" et "sur-échantillonner la majorité"; vous devriez plutôt sous-estimer la majorité et suréchantillonner la minorité. Si vous êtes familier avec Weka, vous pouvez expérimenter en utilisant différentes techniques de déséquilibre de données et différents classificateurs pour déterminer quelle méthode fonctionne le mieux. Pour le sous-échantillonnage dans Weka, voir cet article: combination of smote and undersampling on weka.

Pour le suréchantillonnage dans Weka, vous pouvez essayer l'algorithme SMOTE (certaines informations sont disponibles ici: http://weka.sourceforge.net/doc.packages/SMOTE/weka/filters/supervised/instance/SMOTE.html). Bien sûr, la création de 20 811 données de minorité synthétique (c'est-à-dire si vous recherchez des données équilibrées) est plus coûteuse en calcul que sous-échantillonnage car: (1) il y a un coût de calcul associé à la création des données synthétiques; et (2) il y a un coût de calcul plus élevé associé à la formation sur 42 000 échantillons (y compris les 20 811 échantillons synthétiques créés pour la classe minoritaire) par rapport à 21 000 échantillons. D'après mon expérience, les deux approches de déséquilibre des données que vous avez mentionnées fonctionnent bien, mais j'expérimente d'abord le sous-échantillonnage parce que je pense que c'est un peu moins cher du point de vue des ressources.

Il y a des paquets Python pour undersampling et suréchantillonnage ici:

  1. undersampling: http://glemaitre.github.io/imbalanced-learn/auto_examples/ensemble/plot_easy_ensemble.html
  2. suréchantillonnage: http://contrib.scikit-learn.org/imbalanced-learn/stable/auto_examples/over-sampling/plot_smote.html

Vous pouvez également enquêter sur des techniques de classification sensibles aux coûts de pénaliser les erreurs de classification de la classe minoritaire via une matrice de coûts.

  1. Voici un lien vers un joli paquet Weka: https://weka.wikispaces.com/CostSensitiveClassifier
  2. Voici un lien vers un paquet Python: https://wwwen.uni.lu/snt/research/sigcom/computer_vision_lab/costcla_a_cost_sensitive_classification_library_in_python