mirror of
https://github.com/BreizhHardware/cours-ISEN-MD.git
synced 2026-01-18 16:47:24 +01:00
Obisidian vault auto-backup: 30-09-2025 08:31:49 on . 1 files edited
This commit is contained in:
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user