From 7eff25126d25ca71d6d322c8449a3e05a82c6a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= <72651575+BreizhHardware@users.noreply.github.com> Date: Tue, 30 Sep 2025 08:31:49 +0200 Subject: [PATCH] Obisidian vault auto-backup: 30-09-2025 08:31:49 on . 1 files edited --- ISEN/IA/CIPA4/TP/TP2/tp2_IA.ipynb | 144 ++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/ISEN/IA/CIPA4/TP/TP2/tp2_IA.ipynb b/ISEN/IA/CIPA4/TP/TP2/tp2_IA.ipynb index fab6b15..48f9e9d 100644 --- a/ISEN/IA/CIPA4/TP/TP2/tp2_IA.ipynb +++ b/ISEN/IA/CIPA4/TP/TP2/tp2_IA.ipynb @@ -2539,6 +2539,150 @@ " label_original = Y_train.iloc[i]\n", " print(f\"[{sup7:5}, {impair:5}] - Label original: {label_original}\")\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eb817782", + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.neighbors import KNeighborsClassifier\n", + "import numpy as np\n", + "\n", + "print(\"=== Classification multi-label avec K-plus proches voisins ===\\n\")\n", + "\n", + "# a. Créer un objet de la classe KNeighborsClassifier\n", + "knn_classifier = KNeighborsClassifier()\n", + "print(f\"- Nombre de voisins (n_neighbors): {knn_classifier.n_neighbors}\")\n", + "print(f\"- Métrique de distance: {knn_classifier.metric}\")\n", + "print(f\"- Algorithme: {knn_classifier.algorithm}\")\n", + "\n", + "# b. Appliquer la méthode fit avec la base d'apprentissage et le vecteur multi-label\n", + "print(f\"- Données d'entraînement: {X_train.shape}\")\n", + "print(f\"- Vecteur multi-label: {vecteur_multilabel.shape}\")\n", + "\n", + "knn_classifier.fit(X_train, vecteur_multilabel)\n", + "print(\"Entraînement terminé avec succès\")\n", + "\n", + "# c. Prédire la classe de la première instance\n", + "\n", + "# Extraire la première instance\n", + "premiere_instance = X.iloc[0:1] # Garder la forme 2D\n", + "print(f\"- Forme de la première instance: {premiere_instance.shape}\")\n", + "\n", + "# Effectuer la prédiction\n", + "prediction_multilabel = knn_classifier.predict(premiere_instance)\n", + "print(f\"- Forme de la prédiction: {prediction_multilabel.shape}\")\n", + "print(f\"- Type de la prédiction: {type(prediction_multilabel)}\")\n", + "\n", + "# Analyser la prédiction\n", + "pred_sup_7 = prediction_multilabel[0, 0] # Premier label (> 7)\n", + "pred_impair = prediction_multilabel[0, 1] # Deuxième label (impair)\n", + "\n", + "print(f\"\\n=== Résultat de la prédiction ===\")\n", + "print(f\"Prédiction multi-label: [{pred_sup_7}, {pred_impair}]\")\n", + "print(f\" - Supérieur à 7: {pred_sup_7}\")\n", + "print(f\" - Impair: {pred_impair}\")\n", + "\n", + "# Vérifier avec la vraie classe\n", + "vraie_classe = Y.iloc[0]\n", + "vraie_sup_7 = vraie_classe > 7\n", + "vraie_impair = vraie_classe % 2 == 1\n", + "\n", + "print(f\"\\n=== Comparaison avec la réalité ===\")\n", + "print(f\"Vraie classe: {vraie_classe}\")\n", + "print(f\"Vraies caractéristiques: [{vraie_sup_7}, {vraie_impair}]\")\n", + "print(f\" - Vraiment supérieur à 7: {vraie_sup_7}\")\n", + "print(f\" - Vraiment impair: {vraie_impair}\")\n", + "\n", + "# Vérifier la correction de la prédiction\n", + "correction_sup_7 = (pred_sup_7 == vraie_sup_7)\n", + "correction_impair = (pred_impair == vraie_impair)\n", + "prediction_totalement_correcte = correction_sup_7 and correction_impair\n", + "\n", + "print(f\"\\n=== Évaluation de la prédiction ===\")\n", + "print(f\"Prédiction 'Supérieur à 7': {'Correcte' if correction_sup_7 else 'Incorrecte'}\")\n", + "print(f\"Prédiction 'Impair': {'Correcte' if correction_impair else 'Incorrecte'}\")\n", + "print(f\"Prédiction globale: {'TOTALEMENT CORRECTE' if prediction_totalement_correcte else 'PARTIELLEMENT/TOTALEMENT INCORRECTE'}\")\n", + "\n", + "# Analyse détaillée\n", + "print(f\"\\n=== Interprétation ===\")\n", + "if vraie_classe <= 7:\n", + " if vraie_classe % 2 == 1:\n", + " print(f\"Le chiffre {vraie_classe} est un chiffre impair ≤ 7\")\n", + " interpretation = \"[False, True]\"\n", + " else:\n", + " print(f\"Le chiffre {vraie_classe} est un chiffre pair ≤ 7\")\n", + " interpretation = \"[False, False]\"\n", + "else:\n", + " if vraie_classe % 2 == 1:\n", + " print(f\"Le chiffre {vraie_classe} est un chiffre impair > 7\")\n", + " interpretation = \"[True, True]\"\n", + " else:\n", + " print(f\"Le chiffre {vraie_classe} est un chiffre pair > 7\")\n", + " interpretation = \"[True, False]\"\n", + "\n", + "print(f\"Attendu: {interpretation}\")\n", + "print(f\"Prédit: [{pred_sup_7}, {pred_impair}]\")\n", + "\n", + "if prediction_totalement_correcte:\n", + " print(\"Le modèle KNN a correctement identifié les deux caractéristiques multi-label!\")\n", + "else:\n", + " print(\"Le modèle KNN n'a pas parfaitement prédit toutes les caractéristiques.\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "b6600aef", + "metadata": {}, + "source": [ + "# V- Classification multi-output" + ] + }, + { + "cell_type": "markdown", + "id": "a782268f", + "metadata": {}, + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl\n", + "\n", + "print(\"=== Ajout de bruit aux images d'apprentissage ===\\n\")\n", + "\n", + "# a. Créer un vecteur de bruit\n", + "noise_train = np.random.randint(0, 100, (len(X_train), 784))\n", + "\n", + "# b. Ajouter ce bruit avec une simple addition à la base d'apprentissage\n", + "print(f\"\\n Addition du bruit à la base d'apprentissage...\")\n", + "\n", + "# Effectuer l'addition\n", + "X_train_noisy = X_train.values + noise_train # Utiliser .values pour obtenir numpy array\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dc4f7ce8", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import matplotlib as mpl\n", + "\n", + "print(\"=== Ajout de bruit aux images d'apprentissage ===\\n\")\n", + "\n", + "# a. Créer un vecteur de bruit\n", + "noise_test = np.random.randint(0, 100, (len(X_test), 784))\n", + "\n", + "# b. Ajouter ce bruit avec une simple addition à la base de test\n", + "print(f\"\\n Addition du bruit à la base de test...\")\n", + "\n", + "# Effectuer l'addition\n", + "X_test_noisy = X_test.values + noise_test # Utiliser .values pour obtenir numpy array\n" + ] } ], "metadata": {