régression logistique de sklearn avec classes déséquilibrées

je suis en train de résoudre un problème de classification avec la régression logistique de sklearn en python.

mon problème est général / Générique. J'ai un dataset avec deux classes/résultat (positif/négatif ou 1/0), mais l'ensemble est très déséquilibrée. Il y a ~5% de positifs et ~95% de négatifs.

je sais qu'il existe un certain nombre de façons de traiter un problème déséquilibré comme celui-ci, mais je n'ai pas trouvé une bonne explication de la façon de mettre en œuvre correctement en utilisant le sklearn paquet.

ce que j'ai fait jusqu'à présent est de construire un ensemble équilibré de formation en sélectionnant des entrées avec un résultat positif et un nombre égal d'entrées négatives choisies au hasard. Je peux ensuite entraîner le modèle à cet ensemble, mais je suis coincé avec la façon de modifier le modèle pour ensuite travailler sur la population originale déséquilibrée/ensemble.

quelles sont les étapes précises pour y arriver? J'ai versé sur la documentation de sklearn et les exemples et n'ai pas trouvé une bonne explication.

21
demandé sur Steven Penny 2013-02-14 01:06:24

2 réponses

Avez-vous essayé de passer à votre class_weight="auto" classificateur? Tous les classificateurs de sklearn ne le supportent pas, mais certains le supportent. Vérifiez les docstrings.

Vous pouvez également rééquilibrer votre ensemble de données en laissant tomber au hasard des exemples négatifs et / ou en suréchantillonnant des exemples positifs (+ en ajoutant éventuellement un léger bruit de caractéristique gaussienne).

18
répondu ogrisel 2015-10-01 13:42:10

@agentscully avez-vous lu le papier suivant,

[FRAPPA] (https://www.jair.org/media/953/live-953-2037-jair.pdf). J'ai trouvé la même chose très instructive. Voici le lien vers l' Repo. En fonction de la façon dont vous allez équilibrer vos classes cibles, vous pouvez utiliser

  • 'automatique': ( est déprécié dans la nouvelle version 0.17) ou "équilibré" ou spécifiez vous-même le rapport de classe {0: 0.1, 1: 0,9}.
  • 'équilibré': ce mode ajuste les poids inversement proportionnels aux fréquences de classe n_samples / (n_classes * np.bincount(y)

faites - moi savoir, si plus de perspicacité est nécessaire.

3
répondu Pramit 2016-06-15 02:26:06