Apprentissage automatique Python – Régression logistique

Sur cette page, Infodewi.com collabore avec
Académie des sciences des données de NYCpour délivrer des contenus de formation numériques à nos étudiants.
Régression logistique
La régression logistique vise à résoudre des problèmes de classification. Pour ce faire, il prédit des résultats catégoriels, contrairement à la régression linéaire qui prédit un résultat continu.
Dans le cas le plus simple, il y a deux résultats, appelés binomiaux, dont un exemple est de prédire si une tumeur est maligne ou bénigne. D’autres cas ont plus de deux issues à classer, dans ce cas on parle de multinomial. Un exemple courant de régression logistique multinomiale serait de prédire la classe d’une fleur d’iris entre 3 espèces différentes.
Ici, nous utiliserons une régression logistique de base pour prédire une variable binomiale. Cela signifie qu’il n’a que deux résultats possibles.
Comment ça marche?
En Python, nous avons des modules qui feront le travail pour nous. Commencez par importer le module NumPy.
Stockez les variables indépendantes dans X.
Enregistrez la variable dépendante dans y.
Vous trouverez ci-dessous un exemple d’ensemble de données :
#X represents the size of a tumor in centimeters.
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
#Remarque : X doit être transformé en colonne à partir d’une ligne pour que la fonction LogisticRegression() fonctionne.
#y indique si la tumeur est cancéreuse ou non (0 pour “Non”, 1 pour “Oui”).
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
Nous allons utiliser une méthode du module sklearn, nous devrons donc également importer ce module :
from sklearn import linear_model
A partir du module sklearn nous utiliserons la méthode LogisticRegression() pour créer un objet de régression logistique.
Cet objet a une méthode appelée fit()
qui prend les valeurs indépendantes et dépendantes comme paramètres et remplit l’objet de régression avec des données décrivant la relation :
logr = linear_model.LogisticRegression()
logr.fit(X,y)
Nous avons maintenant un objet de régression logistique qui est prêt à déterminer si une tumeur est cancéreuse en fonction de la taille de la tumeur :
#predict if tumor is cancerous where the size is 3.46mm:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
Exemple
Voir l’exemple entier en action :
importer numpy
de sklearn importer linear_model
# Remodelé pour la fonction logistique.
X = numpy.tableau([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
#prédire si la tumeur est cancéreuse lorsque la taille est de 3,46 mm :
prédit = logr.predict(numpy.array([3.46]).reshape(-1,1))
imprimer (prédit)
Résultat
Exemple d’exécution »
Nous avons prédit qu’une tumeur d’une taille de 3,46 mm ne sera pas cancéreuse.
PUBLICITÉ
Coefficient
Dans la régression logistique, le coefficient est le changement attendu du log-odds d’avoir le résultat par unité de changement dans X.
Cela n’a pas la compréhension la plus intuitive, alors utilisons-la pour créer quelque chose qui a plus de sens, des cotes.
Exemple
Voir l’exemple entier en action :
importer numpy
de sklearn importer linear_model
# Remodelé pour la fonction logistique.
X = numpy.tableau([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
log_odds = logr.coef_
cotes = numpy.exp(log_odds)
imprimer (chances)
Résultat
Exemple d’exécution »
Cela nous indique que lorsque la taille d’une tumeur augmente de 1 mm, les chances qu’il s’agisse d’une tumeur augmentent de 4 fois.
Probabilité
Les valeurs de coefficient et d’ordonnée à l’origine peuvent être utilisées pour trouver la probabilité que chaque tumeur soit cancéreuse.
Créez une fonction qui utilise les valeurs de coefficient et d’interception du modèle pour renvoyer une nouvelle valeur. Cette nouvelle valeur représente la probabilité que l’observation donnée soit une tumeur :
def logit2prob(logr,x):
log_odds = logr.coef_ * x + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
Fonction expliquée
Pour trouver les log-odds pour chaque observation, nous devons d’abord créer une formule qui ressemble à celle de la régression linéaire, en extrayant le coefficient et l’ordonnée à l’origine.
log_odds = logr.coef_ * x + logr.intercept_
Pour ensuite convertir les log-odds en cotes, nous devons exponentieller les log-odds.
odds = numpy.exp(log_odds)
Maintenant que nous avons la cote, nous pouvons la convertir en probabilité en la divisant par 1 plus la cote.
probability = odds / (1 + odds)
Utilisons maintenant la fonction avec ce que nous avons appris pour connaître la probabilité que chaque tumeur soit cancéreuse.
Exemple
Voir l’exemple entier en action :
importer numpy
de sklearn importer linear_model
X = numpy.tableau([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1,1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X,y)
def logit2prob(logr, X):
log_odds = logr.coef_ * X + logr.intercept_
cotes = numpy.exp(log_odds)
probabilité = cotes / (1 + cotes)
retour (probabilité)
print(logit2prob(logr, X))
Résultat
[[0.60749955] [0.19268876] [0.12775886] [0.00955221] [0.08038616] [0.07345637] [0.88362743] [0.77901378] [0.88924409] [0.81293497] [0.57719129] [0.96664243]]
Exemple d’exécution »
Résultats expliqués
3,78 0,61 La probabilité qu’une tumeur de 3,78 cm soit cancéreuse est de 61 %.
2,44 0,19 La probabilité qu’une tumeur de 2,44 cm soit cancéreuse est de 19 %.
2,09 0,13 La probabilité qu’une tumeur de 2,09 cm soit cancéreuse est de 13 %.
#Apprentissage #automatique #Python #Régression #logistique