Obisidian vault auto-backup: 30-09-2025 08:31:49 on . 1 files edited

This commit is contained in:
Félix MARQUET
2025-09-30 08:31:49 +02:00
parent d2910dd73e
commit 7eff25126d

View File

@@ -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": {