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 matplotlib.pyplot as plt
from sklearn.datasets 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
np.random.seed(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
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
(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')
model.fit(X, y)
print('score:', model.score(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 = 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)
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 matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.neighbors 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 = digits.data
y = digits.target
print('dimension de X:', X.shape)
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
plt.imshow(digits['images'][0], cmap = 'Greys_r')
# Entraînement du modele
model = KNeighborsClassifier()
model.fit(X, y)
model.score(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)
plt.imshow(digits['images'][100], cmap = 'Greys_r')
model.predict(test)