Pré-requis : Régression linéaire
Cet article aborde les bases de la régression logistique et son implémentation en Python. La régression logistique est fondamentalement un algorithme de classification supervisée. Dans un problème de classification, la variable cible (ou sortie), y, ne peut prendre que des valeurs discrètes pour un ensemble donné de caractéristiques (ou entrées), X.
Contrairement à la croyance populaire, la régression logistique EST un modèle de régression. Elle construit un modèle de régression pour prédire la probabilité qu’une entrée de données donnée appartienne à la catégorie numérotée « 1 ». Tout comme la régression linéaire suppose que les données suivent une fonction linéaire, la régression logistique modélise les données à l’aide de la fonction sigmoïde.
La régression logistique devient une technique de classification uniquement lorsqu’un seuil de décision entre en jeu. La fixation de la valeur du seuil est un aspect très important de la régression logistique et dépend du problème de classification lui-même.
La décision pour la valeur du seuil est principalement affectée par les valeurs de précision et de rappel. Idéalement, nous voulons que la précision et le rappel soient tous deux égaux à 1, mais c’est rarement le cas. Dans le cas d’un compromis précision-rappel, nous utilisons les arguments suivants pour décider de la valeur seuil :-
1. Précision faible/rappel élevé : Dans les applications où nous voulons réduire le nombre de faux négatifs sans nécessairement réduire le nombre de faux positifs, nous choisissons une valeur de décision qui a une faible valeur de Précision ou une valeur élevée de Rappel. Par exemple, dans une application de diagnostic du cancer, nous ne voulons pas qu’un patient affecté soit classé comme non affecté sans se préoccuper de savoir si le patient a été diagnostiqué à tort comme ayant un cancer. En effet, l’absence de cancer peut être détectée par d’autres maladies médicales mais la présence de la maladie ne peut pas être détectée chez un candidat déjà rejeté.
2. Haute précision/faible rappel : Dans les applications où nous voulons réduire le nombre de faux positifs sans nécessairement réduire le nombre de faux négatifs, nous choisissons une valeur de décision qui a une valeur élevée de Précision ou une faible valeur de Rappel. Par exemple, si nous classons les clients pour savoir s’ils réagiront positivement ou négativement à une publicité personnalisée, nous voulons être absolument sûrs que le client réagira positivement à la publicité car sinon, une réaction négative peut entraîner une perte de ventes potentielles de la part du client.
Selon le nombre de catégories, la régression logistique peut être classée comme:
- binomiale : la variable cible ne peut avoir que 2 types possibles : « 0 » ou « 1 » qui peuvent représenter « victoire » vs « perte », « réussite » vs « échec », « mort » vs « vie », etc.
- multinomiale : la variable cible peut avoir 3 types possibles ou plus qui ne sont pas ordonnés(c’est-à-dire que les types n’ont pas de signification quantitative) comme « maladie A » vs « maladie B » vs « maladie C ».
- ordinale : elle traite des variables cibles avec des catégories ordonnées. Par exemple, un résultat de test peut être classé dans les catégories suivantes : « très mauvais », « mauvais », « bon », « très bon ». Ici, chaque catégorie peut recevoir un score comme 0, 1, 2, 3.
D’abord, nous explorons la forme la plus simple de la régression logistique, c’est-à-dire la régression logistique binomiale.
Régression logistique binomiale
Considérez un ensemble de données d’exemple qui met en correspondance le nombre d’heures d’étude avec le résultat d’un examen. Le résultat ne peut prendre que deux valeurs, à savoir réussi (1) ou échoué (0) :
Heures(x) | 0,50 | 0,75 | 1,00 | 1,25 | 1,50 | 1,75 | 2.00 | 2.25 | 2.50 | 2.75 | 3.00 | 3.25 | 3.50 | 3.75 | 4.00 | 4.25 | 4.50 | 4.75 | 5.00 | 5.50 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Passe(y) | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
So, nous avons
i.e. y est une variable cible catégorielle qui ne peut prendre que deux types possibles : « 0 » ou « 1 ».
Pour généraliser notre modèle, nous supposons que :
- Le jeu de données a ‘p’ variables caractéristiques et ‘n’ observations.
- La matrice des caractéristiques est représentée comme:
Ici, désigne les valeurs des caractéristiques pour l’observation.
Ici, nous gardons la convention de laisser = 1. (Continuez à lire, vous allez comprendre la logique dans quelques instants). - L’observation, , peut être représentée comme:
- représente la réponse prédite pour l’observation, c’est-à-dire . La formule que nous utilisons pour calculer est appelée hypothèse.
Si vous avez passé par la régression linéaire, vous devriez vous rappeler que dans la régression linéaire, l’hypothèse que nous avons utilisée pour la prédiction était:
où, sont les coefficients de régression.
La matrice/vecteur des coefficients de régression, est:
Alors, dans une forme plus compacte,
La raison de prendre = 1 est assez claire maintenant.
Nous avions besoin de faire un produit matriciel, mais il n’y avait pas
actuellement multiplié à dans la formule d’hypothèse originale. Donc, nous avons défini = 1.
Maintenant, si nous essayons d’appliquer la régression linéaire sur le problème ci-dessus, nous sommes susceptibles d’obtenir des valeurs continues en utilisant l’hypothèse que nous avons discutée ci-dessus. De plus, cela n’a pas de sens pour prendre des valeurs supérieures à 1 ou inférieures à 0.
Donc, quelques modifications sont apportées à l’hypothèse pour la classification:
où,
est appelée fonction logistique ou la fonction sigmoïde.
Voici un graphique montrant g(z) :
Nous pouvons déduire du graphique ci-dessus que :
- g(z) tend vers 1 comme
- g(z) tend vers 0 comme
- g(z) est toujours borné entre 0 et 1
Donc, maintenant, nous pouvons définir les probabilités conditionnelles pour 2 étiquettes(0 et 1) pour l’observation comme :
Nous pouvons l’écrire de manière plus compacte comme:
Maintenant, nous définissons un autre terme, la vraisemblance des paramètres comme:
La vraisemblance n’est rien d’autre que la probabilité des données(exemples d’entraînement), étant donné un modèle et des valeurs de paramètres spécifiques(ici, ). Elle mesure le support fourni par les données pour chaque valeur possible de la . Nous l’obtenons en multipliant tous les pour donnés .
Et pour faciliter les calculs, nous prenons la vraisemblance logarithmique :
La fonction de coût de la régression logistique est proportionnelle à l’inverse de la vraisemblance des paramètres. Par conséquent, nous pouvons obtenir une expression pour la fonction de coût, J en utilisant l’équation de la vraisemblance logarithmique comme:
et notre objectif est d’estimer de sorte que la fonction de coût soit minimisée !!
Utilisant l’algorithme de descente de gradient
D’abord, nous prenons les dérivées partielles de w.r.t chacune pour dériver la règle de descente de gradient stochastique(nous ne présentons ici que la valeur finale dérivée):
Ici, y et h(x) représentent le vecteur de réponse et le vecteur de réponse prédite(respectivement). De plus, est le vecteur représentant les valeurs d’observation pour la caractéristique.
Maintenant, afin d’obtenir min ,
où est appelé le taux d’apprentissage et doit être défini explicitement.
Voyons l’implémentation python de la technique ci-dessus sur un jeu de données échantillon (téléchargez-le ici) :
Note : La descente de gradient est l’une des nombreuses façons d’estimer .
Basiquement, ce sont des algorithmes plus avancés qui peuvent être facilement exécutés en Python une fois que vous avez défini votre fonction de coût et vos gradients. Ces algorithmes sont :
- BFGS(algorithme de Broyden-Fletcher-Goldfarb-Shanno)
- L-BFGS(Comme BFGS mais utilise une mémoire limitée)
- Gradient conjugué
Avantages/inconvénients de l’utilisation de l’un de ces algorithmes par rapport à la descente de gradient :
- Avantages
- N’ont pas besoin de choisir le taux d’apprentissage
- Sont souvent plus rapides (ce n’est pas toujours le cas)
- Peuvent approximer numériquement le gradient pour vous (cela ne fonctionne pas toujours bien)
.
- Inconvénients
- Plus complexe
- Plus de boîte noire à moins d’apprendre les spécificités
Régression logistique multinomiale
Dans la régression logistique multinomiale, la variable de sortie peut avoir plus de deux sorties discrètes possibles. Considérons l’ensemble de données sur les chiffres. Ici, la variable de sortie est la valeur du chiffre qui peut prendre des valeurs parmi (0, 12, 3, 4, 5, 6, 7, 8, 9).
Donné ci-dessous est la mise en œuvre de Multinomial Logisitc Regression en utilisant scikit-learn pour faire des prédictions sur le jeu de données digit.
Logistic Regression model accuracy(in %): 95.6884561892
Enfin, voici quelques points sur la régression logistique à méditer :
- Ne suppose PAS une relation linéaire entre la variable dépendante et les variables indépendantes, mais elle suppose une relation linéaire entre le logit des variables explicatives et la réponse.
- Les variables indépendantes peuvent même être les termes de puissance ou certaines autres transformations non linéaires des variables indépendantes originales.
- La variable dépendante n’a PAS besoin d’être normalement distribuée, mais elle suppose généralement une distribution d’une famille exponentielle (par exemple binomiale, Poisson, multinomiale, normale,…) ; la régression logistique binaire suppose une distribution binomiale de la réponse.
- L’homogénéité de la variance n’a PAS besoin d’être satisfaite.
- Les erreurs doivent être indépendantes mais PAS normalement distribuées.
- Il utilise l’estimation par maximum de vraisemblance (MLE) plutôt que les moindres carrés ordinaires (OLS) pour estimer les paramètres, et s’appuie donc sur des approximations à grand échantillon.
Cet article est contribué par Nikhil Kumar. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyer votre article par courrier à [email protected]. Voyez votre article apparaître sur la page principale de GeeksforGeeks et aidez d’autres Geeks.