CSI 4506 - Automne 2024
Version: sept. 30, 2024 08h54
Remarque
Dans l’évolution de l’intelligence, l’apprentissage a été l’un des premiers jalons à émerger. C’est aussi l’un des mécanismes les plus compris dans l’intelligence naturelle.
Dans ce cours, nous introduirons des concepts essentiels pour comprendre l’apprentissage automatique, y compris les types de problèmes (tâches).
Pourquoi un programme informatique devrait-il apprendre ?
Mitchell (1997), page 2
Un programme informatique apprend à partir de l’expérience \(E\) par rapport à une certaine classe de tâches \(T\) et une mesure de performance \(P\), si sa performance pour les tâches dans \(T\), mesurée par \(P\), s’améliore avec l’expérience \(E\).
Il existe trois (3) types distincts de rétroaction :
L’apprentissage supervisé est le type d’apprentissage le plus étudié et sans doute le plus intuitif. C’est généralement le premier type d’apprentissage introduit dans les contextes éducatifs.
Objectif : Développer un modèle prédictif pour évaluer la probabilité de succès d’une journée de pêche, classée en trois catégories : ‘Médiocre’, ‘Moyenne’ ou ‘Excellente’.
Différentes sources, y compris The Old Farmer’s Almanac, suggèrent que la phase de la lune est un prédicteur fiable du succès de la pêche.
Exemple | Phase de la lune | Prévisions météorologiques | Température extérieure (°C) | Température de l’eau (°C) | Probabilité d’une journée de pêche |
---|---|---|---|---|---|
1 | Pleine lune | Ensoleillé | 25 | 22 | Excellente |
2 | Nouvelle lune | Nuageux | 18 | 19 | Moyenne |
3 | Premier quartier | Pluvieux | 15 | 17 | Médiocre |
4 | Dernier quartier | Ensoleillé | 30 | 24 | Excellente |
5 | Pleine lune | Nuageux | 20 | 20 | Moyenne |
6 | Nouvelle lune | Pluvieux | 22 | 21 | Médiocre |
Phase de la lune | Prévisions météorologiques | Température extérieure (°C) | Température de l’eau (°C) |
---|---|---|---|
Pleine lune | Ensoleillé | 25 | 22 |
Nouvelle lune | Nuageux | 18 | 19 |
Premier quartier | Pluvieux | 15 | 17 |
Dernier quartier | Ensoleillé | 30 | 24 |
Pleine lune | Nuageux | 20 | 20 |
Nouvelle lune | Pluvieux | 22 | 21 |
Probabilité d’une journée de pêche |
---|
Excellente |
Moyenne |
Médiocre |
Excellente |
Moyenne |
Médiocre |
L’entraînement du modèle consiste à utiliser des données étiquetées pour enseigner à un algorithme d’apprentissage automatique comment faire des prédictions. Ce processus ajuste les paramètres du modèle pour minimiser l’erreur entre les résultats prévus et les résultats réels.
\(\ldots\)
Étant donné de nouvelles données non vues, prédisez si la journée sera réussie.
L’ensemble de données (“expérience”) est une collection d’exemples étiquetés.
Problème : Étant donné l’ensemble de données en entrée, créer un modèle qui peut être utilisé pour prédire la valeur de \(y\) pour un \(x\) non vu.
Lorsque l’étiquette \(y_i\) est une classe, prise d’une liste finie de classes, \(\{1, 2, \ldots, C\}\), nous appelons la tâche une tâche de classification.
Lorsque l’étiquette \(y_i\) est un nombre réel, nous appelons la tâche une tâche de régression.
Scikit-learn
Scikit-learn
est une bibliothèque open source (ou à code source ouvert) d’apprentissage automatique qui prend en charge l’apprentissage supervisé et non supervisé. Elle offre également divers outils pour l’entraînement des modèles, le prétraitement des données, la sélection de modèle, l’évaluation de modèle, et de nombreuses autres utilités.
Scikit-learn
fournit des dizaines d’algorithmes et de modèles d’apprentissage automatique intégrés, appelés estimateurs.
Construite sur NumPy, SciPy et matplotlib.
Scikit-learn
# Creatingg 2 test examples
# 'sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'
X_test = [[5.1, 3.5, 1.4, 0.2],[6.7, 3.0, 5.2, 2.3]]
# Prediction
y_test = clf.predict(X_test)
# Printing the predicted labels for our two examples
print(iris.target_names[y_test])
['setosa' 'virginica']
from sklearn.metrics import classification_report, accuracy_score
# Make predictions
y_pred = clf.predict(X)
# Evaluate the model
accuracy = accuracy_score(y, y_pred)
report = classification_report(y, y_pred, target_names=iris.target_names)
print(f'Accuracy: {accuracy:.2f}')
print('Classification Report:')
print(report)
Accuracy: 1.00
Classification Report:
precision recall f1-score support
setosa 1.00 1.00 1.00 50
versicolor 1.00 1.00 1.00 50
virginica 1.00 1.00 1.00 50
accuracy 1.00 150
macro avg 1.00 1.00 1.00 150
weighted avg 1.00 1.00 1.00 150
Nous avons vu un exemple complet :
from sklearn.metrics import classification_report, accuracy_score
# Make predictions
y_pred = clf.predict(X)
# Evaluate the model
accuracy = accuracy_score(y, y_pred)
report = classification_report(y, y_pred, target_names=iris.target_names)
print(f'Accuracy: {accuracy:.2f}')
print('Classification Report:')
print(report)
Important
Cet exemple est trompeur, voire même fautif!
Dataset Description:
.. _iris_dataset:
Iris plants dataset
--------------------
**Data Set Characteristics:**
:Number of Instances: 150 (50 in each of three classes)
:Number of Attributes: 4 numeric, predictive attributes and the class
:Attribute Information:
- sepal length in cm
- sepal width in cm
- petal length in cm
- petal width in cm
- class:
- Iris-Setosa
- Iris-Versicolour
- Iris-Virginica
:Summary Statistics:
============== ==== ==== ======= ===== ====================
Min Max Mean SD Class Correlation
============== ==== ==== ======= ===== ====================
sepal length: 4.3 7.9 5.84 0.83 0.7826
sepal width: 2.0 4.4 3.05 0.43 -0.4194
petal length: 1.0 6.9 3.76 1.76 0.9490 (high!)
petal width: 0.1 2.5 1.20 0.76 0.9565 (high!)
============== ==== ==== ======= ===== ====================
:Missing Attribute Values: None
:Class Distribution: 33.3% for each of 3 classes.
:Creator: R.A. Fisher
:Donor: Michael Marshall (MARSHALL%[email protected])
:Date: July, 1988
The famous Iris database, first used by Sir R.A. Fisher. The dataset is taken
from Fisher's paper. Note that it's the same as in R, but not as in the UCI
Machine Learning Repository, which has two wrong data points.
This is perhaps the best known database to be found in the
pattern recognition literature. Fisher's paper is a classic in the field and
is referenced frequently to this day. (See Duda & Hart, for example.) The
data set contains 3 classes of 50 instances each, where each class refers to a
type of iris plant. One class is linearly separable from the other 2; the
latter are NOT linearly separable from each other.
.. dropdown:: References
- Fisher, R.A. "The use of multiple measurements in taxonomic problems"
Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions to
Mathematical Statistics" (John Wiley, NY, 1950).
- Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis.
(Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218.
- Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
Structure and Classification Rule for Recognition in Partially Exposed
Environments". IEEE Transactions on Pattern Analysis and Machine
Intelligence, Vol. PAMI-2, No. 1, 67-71.
- Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule". IEEE Transactions
on Information Theory, May 1972, 431-433.
- See also: 1988 MLC Proceedings, 54-64. Cheeseman et al"s AUTOCLASS II
conceptual clustering system finds 3 classes in the data.
- Many, many more ...
Feature Names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Pandas
Pandas
(suite)Pandas
(suite) sepal length (cm) sepal width (cm) petal length (cm) \
count 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000
std 0.828066 0.435866 1.765298
min 4.300000 2.000000 1.000000
25% 5.100000 2.800000 1.600000
50% 5.800000 3.000000 4.350000
75% 6.400000 3.300000 5.100000
max 7.900000 4.400000 6.900000
petal width (cm) species
count 150.000000 150.000000
mean 1.199333 1.000000
std 0.762238 0.819232
min 0.100000 0.000000
25% 0.300000 0.000000
50% 1.300000 1.000000
75% 1.800000 2.000000
max 2.500000 2.000000
Seaborn
Seaborn
from sklearn.metrics import classification_report, accuracy_score
# Make predictions
# Evaluate the model
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred, target_names=iris.target_names)
print(f'Accuracy: {accuracy:.2f}')
print('Classification Report:')
print(report)
Accuracy: 0.90
Classification Report:
precision recall f1-score support
setosa 1.00 1.00 1.00 7
versicolor 0.91 0.83 0.87 12
virginica 0.83 0.91 0.87 11
accuracy 0.90 30
macro avg 0.91 0.91 0.91 30
weighted avg 0.90 0.90 0.90 30
Marcel Turcotte
École de science informatique et de génie électrique (SIGE)
Université d’Ottawa