Université Moulay Ismail AU 2024-2025
FS Meknès Département d’Informatique
Parcours d’excellence : SDIA – S6
TP 3: Classification
1. Développement d’un programme de classification binaire
La première étape consiste à générer des données aléatoires avec la
fonction make_classification.
# On va commencer par importer les modules habituels :
import numpy as np
import [Link] as plt
from [Link] import make_classification
from sklearn.linear_model import SGDClassifier
# Génération de données aléatoires : 100 exemples, 2 classes, 2
features x0 et x1
[Link](1)
x, y = make_classification(n_samples=100,n_features=2,
n_redundant=0, n_informative=1,
n_clusters_per_class=1)
# Visualisation des données
[Link](num=None, figsize=(8, 6))
[Link](x[:,0], x[:, 1], marker = 'o', c=y, edgecolors='k')
[Link]('X0')
[Link]('X1')
[Link]
(100, 2)
Deuxième étape on doit 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')
[Link](X, y)
print('score:', [Link](x, y))
Troisième étape, une fois le modèle entraîné, on peut afficher sa
frontière de décision avec le code suivant :
Université Moulay Ismail AU 2024-2025
FS Meknès Département d’Informatique
Parcours d’excellence : SDIA – S6
# 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 = [Link]([Link](x_min, x_max, h),
[Link](y_min, y_max, h))
Z = [Link](np.c_[[Link](), [Link]()])
Z = [Link]([Link])
cs = [Link](xx, yy, Z, cmap=[Link])
[Link]('tight')
for i, color in zip(model.classes_, colors):
idx = [Link](y == i)
[Link](X[idx, 0], X[idx, 1], c=color,
cmap=[Link], edgecolor='black', s
=20)
On peut réutiliser ce code sur nos propres données pour prédire si un
email est un spam ou encore si une tumeur est maligne ou non.
Université Moulay Ismail AU 2024-2025
FS Meknès Département d’Informatique
Parcours d’excellence : SDIA – S6
2. L’Algorithme de Nearest Neighbour : classification multi-
classes
L’algorithme de Nearest Neighbour (le voisin le plus proche) permet de
résoudre des problèmes de classification à plusieurs classes de façon
simple et très efficace.
Vision par ordinateur avec K-NN
Développement d’un programme capable de reconnaître un chiffre entre
0 et 9 écrits à la main. Voici les chiffres que la machine peut reconnaitre.
Vous pouvez charger ces données depuis Sklearn (la librairie contient des
Datasets de base).
Import des libraires habituelles :
import numpy as np
import [Link] as plt
from [Link] import load_digits
from [Link] import KNeighborsClassifier
Le code ci-dessous montre un exemple de chiffre présent dans le Dataset,
c’est un exemple du chiffre 0.
Le Dataset comprend 1797 exemples, c’est-à-dire1797 images, et que
chaque exemple contient 64 features. Il s’agit de la valeur de chacun des
64 pixels qui forment les images.
Quand on soumet un nouveau chiffre à la machine, l’algorithme de K-NN
trouve l’exemple du Dataset qui ressemble le plus à notre chiffre, basé
sur le voisin le plus proche pour la valeur de chaque pixel.
# importons une base de données de chiffre
digits = load_digits()
Université Moulay Ismail AU 2024-2025
FS Meknès Département d’Informatique
Parcours d’excellence : SDIA – S6
X = [Link]
y = [Link]
print('dimension de X:', [Link])
dimension de X: (1797, 64)
L’étape suivante consiste à entraîner le modèle de Nearest Neighbour.
En exécutant le code suivant vous devriez obtenir un score de 99%, ce
qui signifie que votre modèle reconnaitra le bon chiffre à 99%. Ceci
représente un très bon pourcentage.
# visualisons un de ces chiffres
[Link](digits['images'][0], cmap = 'Greys_r')
# Entraînement du modele
model = KNeighborsClassifier()
[Link](X, y)
[Link](X, y)
0.9905397885364496
Après l’entrainement on va tester une image au hasard et voyons si la
machine arrive à identifier le bon chiffre.
Exemple on va tester la 100ième image de notre Dataset, qui est un 4…
résultat : la machine a su la reconnaître !
#Test du modele
test = digits['images'][100].reshape(1, -1)
[Link](digits['images'][100], cmap = 'Greys_r')
[Link](test)