333 lines
8.7 KiB
Plaintext
333 lines
8.7 KiB
Plaintext
{
|
||
"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
|
||
}
|