From 087b86afbce22e56d0bf2b47e504e24e9b40d358 Mon Sep 17 00:00:00 2001 From: Numbtus <matias.mennecart.etu@univ-lille.fr> Date: Fri, 29 Nov 2024 17:57:25 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20rapport=20K-NN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DevEfficace/rapport.md | 21 ++++++++++++++++--- .../sae/classification/knn/MethodKNN.java | 3 +++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/DevEfficace/rapport.md b/DevEfficace/rapport.md index 8811065..15aa324 100644 --- a/DevEfficace/rapport.md +++ b/DevEfficace/rapport.md @@ -97,7 +97,7 @@ Pour obtenir le meilleur K, on appel la methode bestK(List<LoadableData> datas, En appliquant cette methode voici les resultats que nous avons obtenue avec: -##### Iris +### Iris @@ -110,7 +110,9 @@ En appliquant cette methode voici les resultats que nous avons obtenue avec: On obtient donc un taux de reussiste plutôt élevé. A chaque fois l'algorithme choisit le K avec le plus haut taux de reussite. En cas d'égalité, il choisit le plus petit K parmis les égalités. -##### Pokemon +### Pokemon + +**Classification selon le type** | Distance \ K | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | K choisit | |---------------------------------|-------|-------|-------|-------|-------|-------|----|----|----|----|----|----| @@ -123,7 +125,20 @@ On obtient donc un taux de reussiste plutôt élevé. A chaque fois l'algorithme Le taux de reussiste est ici plus bas, cela s'explique notement par le nombre d'attribut different et la complexité a identifier le type d'un pokemon. Cependant le taux de reussiste reste satisfaisant et stable. -Classification par isLegendary +**Classification Legendaire ou Non Legendaire** + + + +| Distance \ K | 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 21 | K choisit | +|---------------------------------|-------|-------|-------|-------|-------|-------|----|----|----|----|----|----| +| Distance Euclidienne | 0.986 | 0.978 | 0.984 | 0.980 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 1 | +| Distance Euclidienne Normalisée | 1.0 | 0.998 | 0.998 | 0.996 | 0.996 | 0.998 | 0.998 | 0.998 | 0.998 | 0.998 | 0.998 | 1 | +| Distance Manhattan | 0.978 | 0.972 | 0.984 | 0.980 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 0.984 | 5 | +| Distance Manhattan Normalisée | 0.980 | 0.984 | 0.988 | 0.984 | 0.984 | 0.986 | 0.986 | 0.986 | 0.986 | 0.986 | 0.984 | 5 | + +On a ici des résultats bien meilleurs. En effet, estimer si un Pokemon est legendaire ou non est bien plus simple qu'estimer son type, les attributs des pokemons legendaires sont bien différent des pokemons non-legendaire contrairement aux types, ou selon les types, les valeurs ne fluctuent pas autant + +--- ## Efficacité diff --git a/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java b/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java index c27e2df..0feaffe 100644 --- a/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java +++ b/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java @@ -169,6 +169,9 @@ public class MethodKNN { MethodKNN.updateModel(model.getDatas()); System.out.println(); + // Permet de definir l'attribut sur lequel ont souhaite classifier: + LoadableData.setClassificationTypeGlobal(12); + List<LoadableData> datas = ClassificationModel.getClassificationModel().getDatas(); // On mélange les données pour tester sur differentes variétes car le fichier de base est trié. Collections.shuffle(datas); -- GitLab