Travaux Pratiques 4

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 9

ISET Gafsa A.

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

1. Lire et exécuter les codes puis vérifier les résultats


2. Exécutez l'exemple, évaluez l'algorithme Perceptron sur l'ensemble de données météo
(weather.csv) et rapporte 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. Exécutez l'exemple et évalue l'algorithme Perceptron sur l'ensemble de données météo
(weather.csv) et indiquez 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 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.

Date Humidity Pressure Rain

Jan. 1 93% 999.7 Rain

Jan. 2 49% 1015.5 No Rain

Jan. 3 79% 1031.1 No Rain

Jan. 4 65% 984.9 Rain

Il s'agit d'un apprentissage supervisé car il porte le label

La tâche de l’apprentissage supervisé


Simplement expliqué, la tâche de l’exemple ci-dessus, est de trouver une fonction f comme suit.
Idéalement : f (humidity, pressure)

Exemples :

𝑓 (93,999.7) = (93,999) = Rain


𝑓 (49,1015.5) = (49,101) = No Rain
𝑓 (79,1031.1) = (79,103) = No Rain

Objectif : approximer la fonction 𝑓 - la fonction d'approximation est souvent notée ℎ

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).

Classificateur linéaire (mathématiques)


Autrement dit, nous voulons que la fonction d'approximation h soit sur la forme :

• 𝑥1: Humidity
• 𝑥2: Pressure
• ℎ(𝑥1,𝑥2)=𝑤0+𝑤1𝑥1+𝑤2𝑥2

Autrement

Vecteur de poids 𝑤 :(𝑤0, 𝑤1, 𝑤2)

Vecteur d'entrée 𝑥:(1, 𝑥1, 𝑥2)

Fonction (produit scalaire) : 𝑥⋅𝑤 = 𝑤0+𝑤1𝑥1+𝑤2𝑥2

ℎ𝑤(𝑥) = 𝑤⋅𝑥

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

𝑤𝑖 = 𝑤𝑖 + 𝛼 (𝑦 − ℎ𝑤(𝑥)) × 𝑥𝑖

La règle peut également être énoncée comme suit.

𝑤𝑖 = 𝑤𝑖 + 𝛼 (valeur actuelle - estimation) × 𝑥𝑖


𝛼 : taux d'apprentissage (learning rate)

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())

MinTemp MaxTemp Rainfall Evaporation ... Temp3pm RainToday RISK_MM RainTomorrow


Date ...
2008-02-01 19.5 22.4 15.6 6.2 ... 20.9 Yes 6.0 Yes
2008-02-02 19.5 25.6 6.0 3.4 ... 24.8 Yes 6.6 Yes
2008-02-03 21.6 24.5 6.6 2.4 ... 23.0 Yes 18.8 Yes
2008-02-04 20.2 22.8 18.8 2.2 ... 20.9 Yes 77.4 Yes
2008-02-05 19.7 25.7 77.4 NaN ... 25.5 Yes 1.6 Yes
Sélectionnez les fonctionnalités et nettoyez les données météo (weather.csv)
Nous voulons étudier les données et déterminer la quantité de données manquantes. Utilisez
isnull().

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.

dataset = data[['Humidity3pm', 'Pressure3pm', 'RainTomorrow']].dropna()

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.

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

Entraînez le modèle Perceptron et mesurez la précision


Enfin, nous voulons créer le modèle, l'ajuster (le former), prédire sur les données de formation et
imprimer le score de précision.

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)

accuracy score: 0.7729468599033816

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)

rainfall rate 0.7407071622846781

Visualisez les prédictions du modèle


Pour visualiser les données, nous pouvons procéder comme suit.

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()

Enfin, visualisons les données réelles à comparer.

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

1. Lire et exécuter les codes puis vérifier les résultats


2. L'algorithme Perceptron est disponible dans la bibliothèque de Machine Learning Python
scikit-learn via la classe Perceptron. La classe vous permet de configurer eta0 le taux
d'apprentissage (learning rate), qui est par défaut de 1,0.

# 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

Vous aimerez peut-être aussi