Comment effectuer une régression logistique avec un grand nombre de fonctionnalités?

10

J'ai un ensemble de données avec 330 échantillons et 27 fonctionnalités pour chaque échantillon, avec un problème de classe binaire pour la régression logistique.

Selon la «règle si dix», j'ai besoin d'au moins 10 événements pour chaque fonctionnalité à inclure. Cependant, j'ai un ensemble de données déséquilibré, avec 20% de classe positive et 80% de classe négative.

Cela ne me donne que 70 événements, ce qui permet d'inclure environ 7/8 fonctionnalités seulement dans le modèle logistique.

J'aimerais évaluer toutes les fonctionnalités en tant que prédicteurs, je ne veux pas choisir de fonctionnalités à la main.

Alors, qu'est-ce que vous suggérez? Dois-je faire toutes les combinaisons de 7 fonctionnalités possibles? Dois-je évaluer chaque fonctionnalité seule avec un modèle d'association, puis choisir uniquement les meilleures pour un modèle final?

Je suis également curieux de savoir comment gérer les fonctionnalités catégoriques et continues, puis-je les mélanger? Si j'ai un [0-1] catégorique et un [0-100] continu, dois-je normaliser?

Je travaille actuellement avec Python.

Merci beaucoup pour votre aide!

LucasRamos
la source
"Je suis également curieux de savoir comment gérer les fonctionnalités catégoriques et continues", je pense que cela poserait une question distincte. En fait, c'est déjà demandé ici .
E_net4 the downvoter
2
il y a une différence entre ne pas avoir suffisamment d'échantillons et avoir des fonctionnalités non pertinentes. Je ne me concentrerais pas trop sur le choix exact de 7 fonctionnalités à cause d'une règle simpliste ...
oW_
1
Faites ce que vous feriez de toute façon: utilisez la validation croisée pour optimiser la régularisation. Je suggère un filet élastique (L1 + L2).
Emre

Réponses:

6

Afin de réduire votre modèle à 7 variables, vous pouvez adopter quelques approches:

  1. PCA (non supervisé): cela crée de "nouvelles" combinaisons linéaires de vos données où chaque composant de procédure explique autant de variance dans les données que possible. Ainsi, les 7 premiers composants (sur 27) devraient être en mesure d'expliquer un bon pourcentage de la variation de vos données. Vous pouvez ensuite brancher ces sept composants dans votre équation de régression logistique. L'inconvénient ici est que parce que les composants sont des combinaisons de vos variables d'origine, vous perdez une certaine interprétabilité avec votre modèle de régression. Elle devrait cependant produire une très bonne précision. Cette même technique appliquée à d'autres méthodes de réduction de dimension telles que
  2. Une autre méthode courante de régression consiste à avancer pas à pas, où vous commencez avec une variable et en ajoutez une autre à chaque étape, qui est soit conservée, soit supprimée en fonction de certains critères (généralement un score BIC ou AIC). La régression pas à pas en arrière est la même chose, mais vous commencez avec toutes les variables et en supprimez une à chaque fois en fonction de certains critères. Sur la base d'une brève recherche, il ne semble pas que python ait une régression pas à pas, mais ils font un algorithme d'élimination des fonctionnalités similaire décrit dans ce post Data Science .
  3. L1L1

Comme l'a commenté @ E_net4, votre question continue est traitée dans un autre article.

bnorm
la source
5

Vous prenez trop au sérieux la "règle des 10". C'est une règle empirique très approximative. Il n'est pas destiné à être utilisé comme vous l'utilisez.

On dirait que vous pensez: "Je n'ai que 70 instances positives, donc selon la Règle de 10, je ne suis autorisé à utiliser que 7 fonctionnalités; comment choisir les 7 fonctionnalités à utiliser?"

Ce n'est pas ce que signifie la règle de 10. Ce n'est pas une règle qui spécifie le nombre de fonctionnalités que vous êtes autorisé à utiliser. La règle de 10 est descriptive, non normative, et c'est une directive approximative: si le nombre d'instances est beaucoup moins de 10 fois le nombre de fonctionnalités, vous êtes particulièrement à risque de sur-ajustement, et vous pourriez obtenir de mauvais résultats.

Alors, que devrais-tu faire? Vous devriez quand même faire ce que vous feriez: utiliser la régularisation et utiliser la validation croisée pour sélectionner les hyper-paramètres de régularisation. En outre, il est important d'avoir un ensemble de tests de maintien que vous ne touchez pas jusqu'à ce que vous ayez finalisé tout sur le classificateur, pour éviter le sur-ajustement et les estimations de précision biaisées.

Et si vous pouvez obtenir plus de données, cela aiderait vraiment.

Enfin, puisque vous avez des classes déséquilibrées, vous pourriez envisager de lire sur le déséquilibre de classe et les méthodes pour y faire face.

DW
la source