Travaux Pratiques 4
Travaux Pratiques 4
Travaux Pratiques 4
U: 2022/2023
Département : Semestre 2
Technologies de l'Informatique Matière : Machine Learning
Classe : RSI4 DSI4 MDW4
Travaux pratiques №4
Thème : Introduction de Machine Learning
Travail : Classificateurs linéaires
Interprété par :
Étudiant(e) RSI4
DSI4 MDW4
A accepté par :
Mohamed L’Afif Tej
Gafsa 2023
Travaux pratiques №4
Thème : Maîtriser une grande variété de classificateurs linéaires.
Objectif :
▪ Découvrez l'apprentissage supervisé
▪ Découvrez comment l'utiliser pour la classification
▪ Comprendre le classificateur Perceptron
▪ Utiliser Perceptron comme classificateur linéaire
Théorie : Les classificateurs linéaires sont (relativement) faciles à comprendre, simples au sens
mathématique, puissantes en elles-mêmes et constituent la base de nombreuses autres méthodes
plus sophistiquées. Nous appliquerons Perceptron, un algorithme d'apprentissage automatique
linéaire pour les tâches de classification binaire.
Les tâches
Page 2 of 9
Apprentissage supervisé
Étant donné un ensemble de données de paires entrée-sortie, apprenez une fonction pour mapper
les entrées aux sorties. Il y a différentes tâches - mais nous commençons à nous concentrer sur la
classification.
Classification
Tâche d'apprentissage supervisé consistant à apprendre une fonction mappant un point d'entrée à
une catégorie discrète.
Exemple
Prédire s'il va pleuvoir ou non.
Nous disposons de données historiques pour entraîner notre modèle.
Exemples :
Classificateur linéaire
Un classificateur linéaire prend une décision de classification sur la base de la valeur d'une
combinaison linéaire des caractéristiques.
Page 3 of 9
Le diagramme ci-dessus montre comment il classerait avec une ligne s'il prédira de la pluie ou non.
Sur le côté gauche, ce sont les données classées à partir des données historiques, et la ligne montre
une ligne optimisée réalisée par l'algorithme d'apprentissage automatique.
Sur le côté droit, nous avons une nouvelle donnée d'entrée (sans étiquette), puis avec cette ligne,
elle la classerait comme pluie (en supposant que bleu signifie pluie).
• 𝑥1: Humidity
• 𝑥2: Pressure
• ℎ(𝑥1,𝑥2)=𝑤0+𝑤1𝑥1+𝑤2𝑥2
Autrement
ℎ𝑤(𝑥) = 𝑤⋅𝑥
Par conséquent, le but est d'optimiser les valeurs 𝑤0, 𝑤1, 𝑤2, pour trouver le meilleur classifieur.
Classificateur Perceptron
Perceptron est un algorithme linéaire qui peut être appliqué à la classification binaire. Il apprend
de manière itérative en ajoutant de nouvelles connaissances à une ligne déjà existante.
Le taux d'apprentissage (learning rate) est donné par alpha, et la règle d'apprentissage est la
suivante.
Page 4 of 9
Règle d'apprentissage du Perceptron
Étant donné le point de données 𝑥, 𝑦 mettre à jour chaque poids (𝑤) en fonction
𝑤𝑖 = 𝑤𝑖 + 𝛼 (𝑦 − ℎ𝑤(𝑥)) × 𝑥𝑖
En Machine Learning et les statistiques, le taux d'apprentissage (learning rate) est un paramètre
de réglage dans un algorithme d'optimisation qui détermine la taille du pas à chaque itération tout
en se déplaçant vers un minimum d'une fonction de perte (loss function).
Chaque fois qu'une nouvelle valeur arrive, le perceptron ajuste les poids pour mieux s'adapter en
conséquence.
Étant donné la ligne après qu'elle a été ajustée à toutes les données d'entraînement, elle est alors
prête à prédire.
Cela s'appelle la règle de mise à jour Perceptron. Ce processus est répété pour tous les exemples
de l'ensemble de données d'apprentissage, appelé une époque (epoch). Ce processus de mise à
jour du modèle à l'aide d'exemples est ensuite répété pour de nombreuses époques.
L'apprentissage est arrêté lorsque l'erreur commise par le modèle tombe à un niveau bas ou ne
s'améliore plus, ou qu'un nombre maximum d'époques est effectué.
Obtenez les données météo (weather.csv) que nous utiliserons pour entraîner un modèle
Perceptron.
Commençons par importer toutes les bibliothèques utilisées.
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.linear_model import Perceptron
import matplotlib.pyplot as plt
Page 5 of 9
data = pd.read_csv('weather.csv', parse_dates=True, index_col=0)
print(data.head())
print(data.isnull().sum())
[5 rows x 22 columns]
MinTemp 3
MaxTemp 2
Rainfall 6
Evaporation 51
Sunshine 16
WindGustDir 1036
WindGustSpeed 1036
WindDir9am 56
WindDir3pm 33
WindSpeed9am 26
WindSpeed3pm 25
Humidity9am 14
Humidity3pm 13
Pressure9am 20
Pressure3pm 19
Cloud9am 566
Cloud3pm 561
Temp9am 4
Temp3pm 4
RainToday 6
RISK_MM 0
RainTomorrow 0
dtype: int64
Cela montre combien de lignes dans chaque colonne ont une valeur nulle (valeurs manquantes).
Nous voulons travailler uniquement avec deux caractéristiques (colonnes), pour garder notre
classification simple. Évidemment, nous devons garder RainTomorrow, car cela porte l'étiquette
de la classe.
Page 6 of 9
Nous sélectionnons les fonctionnalités que nous voulons et supprimons les lignes avec des valeurs
nulles comme suit.
Diviser en données d'apprentissage et de test La prochaine étape que nous devons faire est de
diviser l'ensemble de données en caractéristiques et en étiquettes. Mais nous voulons également
renommer les étiquettes de No et Yes pour qu'elles soient numériques.
X = dataset[['Humidity3pm', 'Pressure3pm']]
y = dataset['RainTomorrow']
y = np.array([0 if value == 'No' else 1 for value in y])
Ensuite, nous effectuons la division comme suit, où nous ne faisons qu'un random_state afin de
pouvoir reproduire. C'est souvent une excellente idée, si vous faites du hasard et rencontrez un
problème, alors vous pouvez le reproduire.
clf = Perceptron(random_state=0)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
ac = accuracy_score(y_test, y_pred)
print(ac)
clf = Perceptron(random_state=0)
random_state : Utilisé pour mélanger les données d'apprentissage, lorsque le mélange est défini
sur True. Passez un int pour une sortie reproductible sur plusieurs appels de fonction.
ra = sum(y == 0)/len(y)
print('rainfall rate',ra)
Page 7 of 9
fig, ax = plt.subplots()
X_data = X.to_numpy()
y_all = clf.predict(X_data)
ax.scatter(x=X_data[:,0], y=X_data[:,1], c=y_all, alpha=.25)
plt.show()
fig, ax = plt.subplots()
ax.scatter(x=X_data[:,0], y=X_data[:,1], c=y, alpha=.25)
plt.show()
Page 8 of 9
Tâche à faire
# define model
model = Perceptron(eta0=1.0)
Exécutez l'exemple et évaluez l'algorithme Perceptron sur l'ensemble de données météo
(weather.csv) et indiquez la précision moyenne pour le taux d'apprentissage (learning rate)
eta0=0.00000001.
3. Que remarquez-vous à partir de résultat de la précision ?
4. L'implémentation vous permet également de configurer le nombre total d'époques
d'entraînement (max_iter), qui est par défaut de 1 000.
# define model
model = Perceptron(max_iter=1000)
Exécutez l'exemple et évalue l'algorithme Perceptron sur l'ensemble de données météo
(weather.csv) et rapporte la précision moyenne pour le nombre total d'époques
d'entraînement max_iter=1, max_iter=4, max_iter=7 et max_iter=10000. Que
remarquez-vous à partir des résultats de la précision ?
Page 9 of 9