diff --git a/DevEfficace/rapport.md b/DevEfficace/rapport.md
index 57e2c8bb503e8153ea05fd21d650bed7563c12c6..88110653b61e7e6f0c763359c635fd4c21e7f0a6 100644
--- a/DevEfficace/rapport.md
+++ b/DevEfficace/rapport.md
@@ -120,7 +120,10 @@ On obtient donc un taux de reussiste plutôt élevé. A chaque fois l'algorithme
 | Distance Manhattan Normalisée | 0.178 | 0.188 | 0.2 | 0.215 | 0.205 | 0.203 | 0.194 | 0.190 | 0.184 | 0.180 | 0.190 | 7 |
 ---
 
-ajoyter un commentaire sur les resultats
+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
 
 ## Efficacité
 
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index 9a220bdf4e1c24f8db37dad2a63785c1c25873de..4d38f1f0d7b078b7a5511cae8186bc47f2b122cf 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -45,56 +45,61 @@ public class AddDataController {
         ClassificationModel model = ClassificationModel.getClassificationModel();
         if (!model.getDatas().isEmpty()) {
             Map<String, Object> attrMap = model.getDatas().get(0).getAttributesNames();
+            int classificationType = model.getDatas().get(0).getClassificationType();
             for (Map.Entry<String, Object> entry : attrMap.entrySet()) {
                 String attrName = entry.getKey();
                 Object attrValue = entry.getValue();
 
-                Label label = new Label(attrName);
-                HBox hbox = new HBox(10, label);
-                hbox.setAlignment(Pos.CENTER);
-                hbox.setSpacing(10);
-
-                if (attrValue instanceof Double) {
-                    Spinner<Double> doubleSpinner = new Spinner<>();
-                    doubleSpinner.setEditable(true);
-                    SpinnerValueFactory<Double> valueFactory =
-                            new SpinnerValueFactory.DoubleSpinnerValueFactory(
-                                    0.0,
-                                    9999,
-                                    0.0,
-                                    0.5
-                            );
-                    doubleSpinner.setValueFactory(valueFactory);
-                    hbox.getChildren().add(doubleSpinner);
-                    components.add(doubleSpinner);
-                }
-                else if (attrValue instanceof Integer) {
-                    Spinner<Integer> integerSpinner = new Spinner<>();
-                    integerSpinner.setEditable(true);
-                    SpinnerValueFactory<Integer> valueFactory =
-                            new SpinnerValueFactory.IntegerSpinnerValueFactory(
-                                    0,
-                                    Integer.MAX_VALUE,
-                                    0,
-                                    1
-                            );
-                    integerSpinner.setValueFactory(valueFactory);
-                    hbox.getChildren().add(integerSpinner);
-                    components.add(integerSpinner);
-                }
-                else if (attrValue instanceof String) {
-                    TextField textField = new TextField();
-                    hbox.getChildren().add(textField);
-                    components.add(textField);
-                }
-                else if (attrValue instanceof Boolean) {
-                    ChoiceBox<String> choiceBox = new ChoiceBox<>();
-                    choiceBox.getItems().addAll("VRAI", "FAUX");
-                    choiceBox.setValue("VRAI");
-                    hbox.getChildren().add(choiceBox);
-                    components.add(choiceBox);
+                if(!attrMap.keySet().toArray()[classificationType].equals(attrName))  {
+                    Label label = new Label(attrName);
+                    HBox hbox = new HBox(10, label);
+                    hbox.setAlignment(Pos.CENTER);
+                    hbox.setSpacing(10);
+
+                    if (attrValue instanceof Double) {
+                        Spinner<Double> doubleSpinner = new Spinner<>();
+                        doubleSpinner.setEditable(true);
+                        SpinnerValueFactory<Double> valueFactory =
+                                new SpinnerValueFactory.DoubleSpinnerValueFactory(
+                                        0.0,
+                                        9999,
+                                        0.0,
+                                        0.5
+                                );
+                        doubleSpinner.setValueFactory(valueFactory);
+                        hbox.getChildren().add(doubleSpinner);
+                        components.add(doubleSpinner);
+                    }
+                    else if (attrValue instanceof Integer) {
+                        Spinner<Integer> integerSpinner = new Spinner<>();
+                        integerSpinner.setEditable(true);
+                        SpinnerValueFactory<Integer> valueFactory =
+                                new SpinnerValueFactory.IntegerSpinnerValueFactory(
+                                        0,
+                                        Integer.MAX_VALUE,
+                                        0,
+                                        1
+                                );
+                        integerSpinner.setValueFactory(valueFactory);
+                        hbox.getChildren().add(integerSpinner);
+                        components.add(integerSpinner);
+                    }
+                    else if (attrValue instanceof String) {
+                        TextField textField = new TextField();
+                        hbox.getChildren().add(textField);
+                        components.add(textField);
+                    }
+                    else if (attrValue instanceof Boolean) {
+                        ChoiceBox<String> choiceBox = new ChoiceBox<>();
+                        choiceBox.getItems().addAll("VRAI", "FAUX");
+                        choiceBox.setValue("VRAI");
+                        hbox.getChildren().add(choiceBox);
+                        components.add(choiceBox);
+                    }
+                    entries.getChildren().add(hbox);
                 }
-                entries.getChildren().add(hbox);
+
+
             }
         }
     }
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 686303ccf2d4e88c048c40d37c40ebe7719370b4..c27e2df513ced5ab0a53559accbdfc9317c5b0e5 100644
--- a/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java
+++ b/src/main/java/fr/univlille/sae/classification/knn/MethodKNN.java
@@ -51,15 +51,6 @@ public class MethodKNN {
         }
     }
 
-    /**
-     * Permet de recuperer les K-voisins les plus proches d'une données dans un jeu de données
-     * en fonction d'une Distance.
-     * @param datas Le jeu de données
-     * @param data  La donnée avec laquelle calculer la distance
-     * @param k     Le nombre de voisins a recupérer
-     * @param distance
-     * @return
-     */
     public static List<LoadableData> kVoisins(List<LoadableData> datas, LoadableData data, int k, Distance distance) {
 
         // On recupere toutes les données
@@ -77,7 +68,7 @@ public class MethodKNN {
 
 
 
-    public static String estimateClass(List<LoadableData> datas, LoadableData data, int k, Distance distance) {
+    public static String estimateClass(List<LoadableData> datas, LoadableData data, int k, Distance distance) throws IllegalAccessException {
 
         // On recupere les K voisions  de data.
         List<LoadableData> kVoisins = MethodKNN.kVoisins(datas, data, k, distance);
@@ -105,7 +96,7 @@ public class MethodKNN {
     }
 
 
-    public static int bestK(List<LoadableData> datas, Distance distance) {
+    public static int bestK(List<LoadableData> datas, Distance distance) throws IllegalAccessException {
         // On borne le K pour eviter de trouver un K trop grand
         int maxK = (int) (Math.sqrt(datas.size()));
         System.out.println("Max k: " + maxK);
@@ -128,7 +119,7 @@ public class MethodKNN {
     }
 
 
-    public static double robustesse(List<LoadableData> datas, int k, Distance distance, double testPart) {
+    public static double robustesse(List<LoadableData> datas, int k, Distance distance, double testPart) throws IllegalAccessException {
 
 
 
@@ -167,7 +158,7 @@ public class MethodKNN {
         return taux/(1/testPart);
     }
 
-    public static void main(String[] args) throws CsvRequiredFieldEmptyException {
+    public static void main(String[] args) throws CsvRequiredFieldEmptyException, IllegalAccessException {
 
         //Test de la robustesse et du meillleur K
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
index 403e01cbbfdc0b1b94d65de4ec9196c80d43878a..f37d5519057e01c16df3f10d791c0be0ed0059cc 100644
--- a/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
+++ b/src/main/java/fr/univlille/sae/classification/model/ClassificationModel.java
@@ -101,6 +101,8 @@ public class ClassificationModel extends Observable {
             notifyObservers();
         } catch (IOException e) {
             System.err.println("Erreur lors du chargement des données : " + e.getMessage());
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
         }
     }
 
@@ -121,7 +123,11 @@ public class ClassificationModel extends Observable {
     public void classifierDonnee(LoadableData data) {
         if(dataToClass.get(data) != null && dataToClass.get(data)) return;
         this.dataToClass.remove(data);
-        data.setClassification(MethodKNN.estimateClass(datas, data, k, distance));
+        try {
+            data.setClassification(MethodKNN.estimateClass(datas, data, k, distance));
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
         notifyObservers(data);
         dataToClass.put(data, true);
     }
diff --git a/src/main/java/fr/univlille/sae/classification/model/Iris.java b/src/main/java/fr/univlille/sae/classification/model/Iris.java
index fbf1734713ae37b123b20e4f9f1f06cbfce9fe32..381a19395a1d8a97109f3fc46d247ee2851b57e2 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Iris.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Iris.java
@@ -68,6 +68,16 @@ public class Iris extends LoadableData {
         return variety;
     }
 
+    @Override
+    public Map<String, Object> getClassifiedAttributes() {
+        return Map.of();
+    }
+
+    @Override
+    public int getClassificationType() {
+        return 0;
+    }
+
     /**
      * Définit la classification (variété) de l'Iris.
      * @param classification variété à définir.
diff --git a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
index d1b6696c9a3b53870870913fb953e819b3f1a413..90d43b00dd0e2d417e23a711af22a552310dea44 100644
--- a/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
+++ b/src/main/java/fr/univlille/sae/classification/model/LoadableData.java
@@ -29,7 +29,7 @@ public abstract class LoadableData {
      * Renvoie la classification de l'objet.
      * @return classification sous forme de chaîne.
      */
-    public abstract String getClassification();
+    public abstract String getClassification() throws IllegalAccessException;
 
     /**
      * Renvoie les types de classification définis.
@@ -97,11 +97,15 @@ public abstract class LoadableData {
 
     */
 
+    public abstract Map<String, Object> getClassifiedAttributes();
+
+    public abstract int getClassificationType() ;
+
     /**
      * Définit la classification de l'objet.
      * @param classification classification à définir.
      */
-    public abstract void setClassification(String classification);
+    public abstract void setClassification(String classification) throws IllegalAccessException;
 
     public abstract Map<String, Object> getAttributesNames();
 
diff --git a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
index 7ac5fad96ac847d5199b969014b9c3f852fa4e79..faec110043fb617da86efbef5e0f752c7b57bed7 100644
--- a/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
+++ b/src/main/java/fr/univlille/sae/classification/model/Pokemon.java
@@ -1,9 +1,8 @@
 package fr.univlille.sae.classification.model;
 
 import com.opencsv.bean.CsvBindByName;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
+
+import java.util.*;
 
 public class Pokemon extends LoadableData{
 
@@ -37,6 +36,7 @@ public class Pokemon extends LoadableData{
     @CsvBindByName(column = "is_legendary")
     private boolean isLegendary;
 
+    private int classificationType = 5;
 
     public Pokemon(String name, int attack, int baseEggSteps, double captureRate, int defense, int experienceGrowth, int hp, int spAttack, int spDefense, String type1, String type2, double speed, boolean isLegendary) {
         super();
@@ -76,8 +76,8 @@ public class Pokemon extends LoadableData{
      * @return classification sous forme de chaîne.
      */
     @Override
-    public String getClassification() {
-        return type1;
+    public String getClassification() throws IllegalAccessException {
+        return (String) this.getClass().getDeclaredFields()[classificationType].get(this).toString();
     }
 
     /**
@@ -86,10 +86,42 @@ public class Pokemon extends LoadableData{
      * @param classification classification à définir.
      */
     @Override
-    public void setClassification(String classification) {
-        this.type1 = classification;
+    public void setClassification(String classification) throws IllegalAccessException {
+       this.getClass().getDeclaredFields()[classificationType].set("", classification);
+    }
+
+
+    /**
+     * Permet de modifier l'attribut sur lequelle ont souhaite classifier
+     * Ne sont valable que les attributs present dans getClassificationAttributes()
+     *
+     * Le numéro de l'attribut correspond a sa place dans la liste de tous le attributs.
+     * @param classificationType
+     */
+    public void setClassificationType(int classificationType) throws IllegalArgumentException{
+        if(classificationType < 0 || classificationType > getAttributesNames().size()) throw new IllegalArgumentException("Cette attribut n'existe pas");
+        if(getClassifiedAttributes().containsKey(getAttributesNames().keySet().toArray()[classificationType])) throw new IllegalArgumentException("Cette attribut ne peut pas être utiliser pour la classification");
+        this.classificationType = classificationType;
+    }
+
+
+
+
+    public Map<String, Object> getClassifiedAttributes() {
+        Map<String, Object> attributes = new HashMap<>();
+
+        attributes.put("Experience growth", experienceGrowth);
+        attributes.put("Type 1", type1);
+        attributes.put("Type 2", type2);
+        attributes.put("Is legendary", isLegendary);
+
+        return attributes;
     }
 
+    @Override
+    public int getClassificationType() {
+        return classificationType;
+    }
 
     /**
      * Renvoie les noms des attributs de l'objet.
@@ -109,6 +141,8 @@ public class Pokemon extends LoadableData{
         attrNames.put("HP", hp);
         attrNames.put("Special attack", spAttack);
         attrNames.put("Special defense", spDefense);
+        attrNames.put("Type 1", type1);
+        attrNames.put("Type 2", type2);
         attrNames.put("Speed", speed);
         attrNames.put("Is legendary", isLegendary);
         return attrNames;
diff --git a/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
index 2217c066ed36bdc8b7c4522533f301623810569e..aeb72aafad696eafd60fb055824fe9bc837cf1bf 100644
--- a/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
+++ b/src/main/java/fr/univlille/sae/classification/utils/ViewUtil.java
@@ -87,9 +87,9 @@ public class ViewUtil {
 
                 tempHBox = new HBox();
                 label = new Label(colorsString[i+j]);
-                rectangle = new Rectangle(10, 10);
-                rectangle.setFill(colors.get(colorsString[i+j]));
-                tempHBox.getChildren().addAll(rectangle, label);
+                Circle circle = new Circle(5);
+                circle.setFill(colors.get(colorsString[i+j]));
+                tempHBox.getChildren().addAll(circle, label);
                 line.getChildren().add(tempHBox);
 
             }