Académique Documents
Professionnel Documents
Culture Documents
1
Régression Logistique et Algorithmes
de Classification
Objectifs:
• Dans l’apprentissage supervisé, il y a deux type de problèmes :
• Les régressions
• Les classifications
• Dans ce chapitre, vous allez découvrir le modèle de régression Logistique, qui
permet de résoudre des problèmes de classification binaires.
• On va aussi découvrir un des algorithmes les plus populaires et simple : Le K-
Nearest Neighbour.
Objectifs du chapitre :
4
Le modèle de Régression logistique
5
Les problèmes de Classification
6
Les problèmes de Classification
Solution:
• On développe alors une nouvelle fonction
pour les problèmes de classification binaire,
c’est la fonction logistique (aussi appelé
fonction sigmoïde ou tout simplement la
fonction « sigma », 𝝈). Cette fonction a la
particularité d’être toujours comprise en 0 et
1.
7
Les problèmes de Classification
9
Les problèmes de Classification
10
Fonction Coût associée à la Régression
Logistique
• Pour la régression linéaire, la Fonction Coût:
𝑱(𝜽) = 𝟏/𝟐𝒎*∑(𝑿. 𝜽 − 𝒀)𝟐
11
Fonction Coût associée à la Régression
Logistique
12
Fonction Coût associée à la Régression
Logistique
• Solution:
Pour rendre la fonction de coût convexe et résoudre le problème de
non-convexité, la "Log Loss" (ou "Cross-Entropy Loss") est utilisée
dans le modèle de régression logistique. Cette fonction de coût
utilise le logarithme pour différencier les cas où y = 1 et y = 0, ce qui
permet de pénaliser les erreurs différemment pour chaque classe.
Cette approche contribue à obtenir un unique minimum global pour
la fonction de coût, ce qui est essentiel pour l'optimisation par des
méthodes comme le Gradient Descent. En fin de compte, la "Log
Loss" est un choix judicieux pour la régression logistique en raison
de sa capacité à résoudre le problème de non-convexité tout en
adaptant la pénalité en fonction des erreurs de classification pour
chaque classe.
Cela améliore la convergence de l'algorithme de Gradient Descent et
assure de meilleures performances pour le modèle logistique en
classification binaire.
13
Fonction Coût associée à la Régression
Logistique
Log(0)=-inf
Log(+inf)=+inf
Log(1)=0
14
Fonction Coût associée à la Régression
Logistique
• Fonction Coût dans les cas où 𝑦 = 1
• Voici la Fonction Coût que l’on utilise dans les cas où 𝑦 =
1:
• 𝑱(𝜽) = − 𝐥𝐨𝐠 (𝝈(𝑿. 𝜽)) = − 𝐥𝐨𝐠 (𝝈)
• Explications :
• Si notre modèle prédit 𝜎 = 0 , alors que 𝑦 = 1, on doit
pénaliser la machine par une grande erreur (un grand
coût 𝑱(0)=− 𝐥𝐨𝐠 (0)=+inf).
• La fonction logarithme permet de tracer cette courbe
avec une propriété convexe, ce qui poussera le Gradient
Descent à trouver les paramètres 𝜽 pour un coût qui
tend vers 0, (𝜎 = 1) (𝑱(1)= -𝐥𝐨𝐠 (1) = 0)
15
Fonction Coût associée à la Régression
Logistique
16
Fonction Coût associée à la Régression
Logistique
• Fonction Coût dans les cas où 𝑦 = 0
• Cette fois la Fonction Coût devient :
• 𝑱(𝜽) = − 𝐥𝐨𝐠 (𝟏 − 𝝈(𝑿. 𝜽)), ou bien 𝑱 = − 𝐥𝐨𝐠 (𝟏 − 𝝈)
• Explications :
• Si notre modèle prédit 𝜎(𝑥) = 1 alors que 𝑦 = 0, on doit
pénaliser la machine par une grande erreur (un grand
coût 𝑱 = − 𝐥𝐨𝐠 (𝟏 − 𝝈)). (𝑱(1)= -𝐥𝐨𝐠 (1-1) =+ inf)
• Cette fois 𝑱(0)=− 𝐥𝐨𝐠 (1-0)=0 donne la même
courbe, inversée sur l’axe vertical.
17
Fonction Coût associée à la Régression
Logistique
18
Fonction Coût complète
• Et dans le cas où 𝑦 = 1
• 𝐽(𝜃) = (− 1/m) * ∑ 𝟏 × 𝐥𝐨𝐠(𝝈(𝑿. 𝜽))+ 0 × log(1 − 𝜎(𝑋. 𝜃))
19
Gradient Descent pour la Régression
Logistique
L'algorithme de Gradient Descent peut être appliqué de la même
manière pour la régression logistique que pour la régression linéaire.
De plus, la dérivée de la fonction de coût utilisée dans la régression
logistique est la même que celle utilisée dans la régression linéaire.
Cela facilite l'optimisation des paramètres du modèle à l'aide de
l'algorithme de Gradient Descent, car les étapes mathématiques sont
similaires et consistent à ajuster les paramètres pour minimiser la
fonction de coût (Log Loss dans le cas de la régression logistique) et
atteindre une solution optimale.
• 𝐺𝑟𝑎𝑑𝑖𝑒𝑛𝑡:
• 𝝏 𝑱(𝜽)/𝝏 𝜽=(𝟏/𝒎)∑( 𝝈(𝑿. 𝜽) − 𝒚) *𝑿
• 𝐺𝑟𝑎𝑑𝑖𝑒𝑛𝑡 𝐷𝑒𝑠𝑐𝑒𝑛𝑡:
• 𝜽 = 𝜽 − 𝑎 × *(𝝏 𝑱(𝜽)/ 𝝏 𝜽)
20
Résumé de la Régression Logistique
21
Développer un programme de
classification binaire dans Jupyter
il faut tout d'abord importer les modules
nécessaires et générer des données aléatoires à
des fins d'apprentissage et d'exploration en
utilisant la fonction make_classification de la
bibliothèque scikit-learn en Python. Voici
comment vous pouvez procéder avec les
importations et la génération de données
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
22
Développer un programme de
classification binaire dans Jupyter
• import numpy as np
• import matplotlib.pyplot as plt
• from sklearn.datasets import make_classification
• from sklearn.linear_model import SGDClassifier
• # create features and target# Génération de données aléatoires: 100 exemples, 2 classes, 2
features x0 et x1
• x, y = make_classification(n_samples=100,
• n_features=2,
• n_informative=2,
• n_redundant=0,
• n_classes=2,
• weights=[0.3, 0.7],
• random_state=42)
• # Visualisation des données
• plt.figure(num=None, figsize=(8, 6))
• plt.scatter(x[:,0], x[:, 1], marker = 'o', c=y, edgecolors='k')
• plt.xlabel('X0')
• plt.ylabel('X1')
• x.shape
23
Développer un programme de
classification binaire dans Jupyter
24
Développer un programme de
classification binaire dans Jupyter
• Ensuite, nous devons créer un modèle en utilisant
SGDClassifier.
• # Génération d'un modele en utilisant la fonction cout
'log' pour Logistic Regression.
• model = SGDClassifier(max_iter=1000, eta0=0.001,
loss='log').
• model.fit(X, y)
• print('score:', model.score(x, y))
• Une fois le modèle entraîné, on peut afficher sa
frontière de décision avec le code suivant…un peu
compliqué je vous l’accorde, mais un simple
copier/coller fera l’affaire.
25
Développer un programme de
classification binaire dans Jupyter
• # Visualisation des données
• h = .02
• colors = "bry"
• x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
• y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
• xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
• np.arange(y_min, y_max, h))
• Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
• Z = Z.reshape(xx.shape)
• cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
• plt.axis('tight')
• for i, color in zip(model.classes_, colors):
idx = np.where(y == i)
• plt.scatter(X[idx, 0], X[idx, 1], c=color, cmap=plt.cm.Paired, edgecolor='black', s
• =20)
26
Développer un programme de
classification binaire dans Jupyter
27
Développer un programme de
classification binaire dans Jupyter
• Pour résumer de manière concise : l'apprentissage
automatique, bien que basé sur des concepts
mathématiques complexes, peut être extrêmement
amusant et gratifiant lorsqu'il est appliqué à des
problèmes du monde réel.
• Vous pouvez l'utiliser pour résoudre une variété de
défis, tels que la détection de spam, la classification de
tumeurs, la recommandation de produits, la prédiction
de la demande, et bien d'autres encore.
L'apprentissage automatique vous offre l'opportunité
de trouver des solutions créatives à des questions
diverses et passionnantes.
28
L’Algorithme de Nearest Neighbour
29
Vulgarisation du Pb: Promenade en
Montage
Vous partez en randonnée en montagne avec un
ami. Avant le départ, la température est de 30 °C, et
votre ami indique qu'il a chaud. Une fois en
montagne, la température chute à 10 °C, et votre
ami dit qu'il a froid. Maintenant, en redescendant
dans la vallée, la température est de 15 °C.
Pensez-vous que votre ami aura froid ou chaud ? En
considérant que 15 °C se rapproche davantage de
10 °C (froid) que de 30 °C (chaud)
il semble légitime de prédire que votre ami aura
froid.
30
Vulgarisation du Pb: Promenade en
Montage
31
K-Nearest Neighbour (K-NN)
32
K-Nearest Neighbour (K-NN)
33
K-Nearest Neighbour (K-NN)
La distance la plus courte
35
K-Nearest Neighbour (K-NN)
Le nombre de voisin K
• En choisissant de trouver les K voisins les plus
proches au lieu d'un seul voisin dans l'algorithme
KNN, vous réduisez la sensibilité aux bruits et aux
cas particuliers, ce qui améliore la qualité du
modèle et sa capacité à généraliser correctement.
• Cela permet au modèle de mieux saisir la
structure globale des données au lieu de se
concentrer sur des points individuels, réduisant
ainsi le risque de surajustement(overfitting).
Cependant, le choix de la valeur optimale de K est
important pour obtenir de bons résultats.
36
37
Vision par ordinateur avec K-NN dans
Jupyter
• Pour créer un programme capable de
reconnaître des chiffres écrits à la main, nous
allons utiliser un modèle d'apprentissage
automatique.
• Voici les chiffres que la machine saura
reconnaitre dans quelques minutes.
38
Vision par ordinateur avec K-NN dans
Jupyter
39
Vision par ordinateur avec K-NN dans
Jupyter
• Vous pouvez charger ces données depuis Sklearn
(la librairie contient des Datasets de base).
• Commençons par importer les libraires
habituelles :
• import numpy as np
• import matplotlib.pyplot as plt
• from sklearn.datasets import load_digits
• from sklearn.neighbors import
KNeighborsClassifier
40
Vision par ordinateur avec K-NN dans
Jupyter
• Le code ci-dessous présente un exemple d'image de chiffre inclus
dans le jeu de données. Plus précisément, il s'agit d'un exemple du
chiffre 0. Il est important de noter que le jeu de données contient
un total de 1797 exemples, ce qui équivaut à 1797 images, et
chaque exemple comprend 64 caractéristiques.
41
Vision par ordinateur avec K-NN dans
Jupyter
• # importons une base de données de chiffre
• digits = load_digits()
• X = digits.data
• y = digits.target
• print('dimension de X:', X.shape)
42
Vision par ordinateur avec K-NN dans
Jupyter
• En effet, obtenir un score de 99% en précision de classification est
une performance impressionnante, et cela démontre que le modèle
K-NN que vous avez entraîné est capable de reconnaître les chiffres
manuscrits avec une grande précision. C'est une étape significative
dans l'apprentissage automatique, et cela montre que vous
maîtrisez les concepts fondamentaux du Machine Learning.
43
Vision par ordinateur avec K-NN dans
Jupyter
• # visualisons un de ces chiffres
• plt.imshow(digits['images'][0], cmap =
'Greys_r')
• # Entraînement du modele
• model = KNeighborsClassifier()
• model.fit(X, y)
• model.score(X, y)
44
Vision par ordinateur avec K-NN dans
Jupyter
45
Vision par ordinateur avec K-NN dans
Jupyter
• C'est une excellente idée de tester le modèle avec une
image aléatoire pour voir s'il est capable de la reconnaître
correctement. Le fait que la machine ait réussi à identifier
le chiffre 4 dans la 100e image du jeu de données est une
démonstration convaincante de son efficacité et de sa
capacité à généraliser à partir des exemples
d'entraînement.
47
Vision par ordinateur avec K-NN dans
Jupyter
48
Bilan de ce chapitre
• Le KNN, quant à lui, est un algorithme simple mais puissant qui se base sur
la proximité pour effectuer des prédictions de classification. Ces deux
algorithmes constituent un excellent point de départ pour comprendre les
concepts de base de l'apprentissage automatique.
49