Files
ENI-Jupyter/M07_TP01_Exercice.ipynb
johanleroy 10477cdf94 TP
2025-09-19 08:58:26 +02:00

333 lines
8.7 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "c6c97ebc",
"metadata": {},
"source": [
"# TP n°1 du module 7 : L'apprentissage non supervisé pour le _Machine Learning_\n",
"\n",
"Dans ce TP, nous allons mettre en pratique les principes de l'apprentissage non supervisé.\n",
"\n",
"Objectifs :\n",
"- Passer en revue les principaux algorithmes de clustering\n",
"- Comparer les performances de ces différents algorithmes\n",
"- Comparer avec les performances de la classification supervisée.\n",
"\n",
"La recherche d'itemsets fréquents et de règles d'associaion ne sera pas abordée dans ce TP.\n",
"\n",
"_NB. : Des messages d'alertes sont suceptibles d'apparaître…_"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3d02d7de",
"metadata": {},
"outputs": [],
"source": [
"# Ajoutez ici les imports de librairies nécessaires\n",
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "925311c6",
"metadata": {},
"source": [
"Même si ce module concerne l'apprentissage non supervisé, nous allons continuer à explorer le jeu de données du Titanic :\n",
"- Cela nous permettra, à la fin, de comparer les clusters obtenus, avec les deux classes réelles obtenus via les labels du jeu de données.\n",
"\n",
"Nous allons donc commencer par charger les données. Pour cela, repartez du csv obtenu à la fin du TP n°1 du module 4 :\n",
"- Construisez, comme pour l'apprentissage supervisé, deux dataframe : un avec les attributs, l'autre avec les labels."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "8660a70c",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "7ab5c627",
"metadata": {},
"source": [
"## 1 - Découverte de KMeans"
]
},
{
"cell_type": "markdown",
"id": "596a7460-2256-40dc-9fcf-d1cbdd4164d2",
"metadata": {},
"source": [
"### Question n°1\n",
"Nous allons commencer par faire un premier clustering avec KMeans.\n",
"- Comme nous connaissons le nombre de clusters à rechercher, créer un modèle avec la classe de scikit-learn, en fixant le nombre de clusters.\n",
"- Appliquez ce clustering aux attributs de _Titanic.csv_\n",
"- Récupérer dans une liste le numéro du cluster prédit pour chaque donnée."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ad5f4f32",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "23f5200c",
"metadata": {},
"source": [
"### Question n°2\n",
"- Quelle est la classe majoritaire dans le premier cluster ?\n",
"- Dans le deuxième cluster ?\n",
"- Affichez une matrice, qui donne pour chaque classe le nombre de fois où elle apparaît dans chaque cluster.\n",
"- Qu'observez-vous ?"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "35da6202",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "5b356cb5",
"metadata": {},
"source": [
"### Question n°3\n",
"Faites un pairplot des données du Titanic, en colorant chaque donnée en fonction du cluster auquel elle a été affectée.\n",
"- Remarquez-vous des phénomènes intéressants ?"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "32bf66f5",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "20edcaa2",
"metadata": {},
"source": [
"### Question n°4\n",
"Les algorithmes de clustering impliquant des mesures de distances sont très sensibles aux plages de valeurs des différents attributs.\n",
"- Normalisez vos données, et refaites les mêmes étapes que précédemment.\n",
"- Observez-vous une différence ?"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ee230dda",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "69d9c149",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "0b188d1d-94b5-4c11-806f-374a797986ca",
"metadata": {},
"source": [
"#### Observation :\n",
"`à compléter`"
]
},
{
"cell_type": "markdown",
"id": "462ecef1",
"metadata": {},
"source": [
"### Question n°5\n",
"Étudions l'évolution du coefficient de _silhouette_.\n",
"- Pour k variant de 2 à 10, tracez l'évolution de ce coefficient pour un clustering kmeans appliqué au données normalisées.\n",
"- Le nombre de clusters utilisé aux questions précédentes vous semble-t'il pertinent ?"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "3b0c59a0",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "08525d4b",
"metadata": {},
"source": [
"## 2 - Clustering hiérarchique\n",
"\n",
"⚠ Attention : Pour toute la suite du TP, nous travaillerons avec les données normalisées. "
]
},
{
"cell_type": "markdown",
"id": "975de584-bd9e-4837-b443-3a17c49983e8",
"metadata": {},
"source": [
"### Question n°1\n",
"Créez un modèle de clustering hiérarchique (`AgglomerativeClustering`). En utilisant le coefficient de silhouette, comparez le score obtenu pour deux clusters avec celui obtenu par KMeans sur la section précédente."
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "6c8c8175",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "6516e52f-c916-4d0a-a4db-87128de828ce",
"metadata": {},
"source": [
"#### Observation :\n",
"`à compléter`"
]
},
{
"cell_type": "markdown",
"id": "7527fa93",
"metadata": {},
"source": [
"### Question n°2\n",
"Représentez graphiquement ce nouveau clustering, à l'aide d'un pairplot.\n",
"- Remarquez-vous des tendances ou des changements intéressants ?"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "6cb2ad2c",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "8305067c",
"metadata": {},
"source": [
"### Question n°3\n",
"Étudiez l'impact du paramètre `linkage` sur les résultats de votre clustering hiérarchique.\n",
"- Pour rappel, ce paramètre désigne la manière dont est calculée la distance entre deux clusters, pour décider lesquels réunir à une itération donnée.\n",
"- Construisez un graphique montrant la valeur du coefficient silhouette en fonction de la méthode utilisée."
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "5e3fa74f",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "34eef8e2",
"metadata": {},
"source": [
"## 3 - Comparaison des différents clustering\n",
"\n",
"Nous allons à présent comparer les résultats obtenus avec les autres algorithmes de clustering proposés par _Scikit-Learn_.\n",
"- Testez ces différents algorithmes, et calculez à chaque fois le coefficient de slihouette obtenu.\n",
"- Pour les algorithmes qui ne demandent pas de préciser le nombre de clusters à construire :\n",
" - Affichez le nombre de clusters déduit par l'algorithme."
]
},
{
"cell_type": "markdown",
"id": "9b1d9bc9-b50f-4c35-91fd-310bf3948e71",
"metadata": {},
"source": [
"Présentez une synthèse de vos résultats sous forme d'un tableau et d'un graphique.\n",
"\n",
"Liste des algorithmes à prendre en compte : `KMeans`, `DBScan`, `Spectral`, `Affinity_Propagation`, `agglomerativeClustering`, `OPTICS`, `BIRCH`, …\n",
"\n",
"⚠Attention : Pour certains algorithmes, vous devrez jouer avec les paramètres à votre disposition pour parvenir à obtenir au moins deux clusters."
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "cd9df865",
"metadata": {},
"outputs": [],
"source": [
"#TODO"
]
},
{
"cell_type": "markdown",
"id": "4fe16763-a151-4516-80cd-8f8ba0069fa3",
"metadata": {},
"source": [
"# Fin du TP !"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}