diff --git a/recommender.py b/recommender.py
index bf407ea688427efd6bbff0a7328c9ae7c0fe0bbc..e37cc25954a026dd50d3b42636ba7fbc23eb1ec0 100644
--- a/recommender.py
+++ b/recommender.py
@@ -7,6 +7,7 @@ from collections import defaultdict
 # Third-party imports
 import numpy as np
 import pandas as pd
+import matplotlib.pyplot as plt
 
 from scipy.stats import pearsonr
 from sklearn.ensemble import AdaBoostRegressor, GradientBoostingRegressor, RandomForestRegressor
@@ -20,7 +21,6 @@ from sklearn.svm import SVR
 from sklearn.tree import DecisionTreeRegressor
 from surprise import AlgoBase, KNNWithMeans, accuracy, PredictionImpossible
 from xgboost import XGBRegressor
-from lightgbm import LGBMRegressor
 
 # Local imports
 from constants import Constant as C
@@ -315,6 +315,19 @@ class RecommenderSystem_KNN :
         predictions = self.model.test(self.testset)
         self.rmse = accuracy.rmse(predictions)
     
+    def evaluate_rmse(self, testset):
+        """
+        Evaluate the RMSE of the model on a test set.
+
+        Args:
+            testset (list): List of testset entries containing (user, item, rating).
+
+        Returns:
+            float: RMSE of the model.
+        """
+        predictions = self.model.test(self.testset)
+        return accuracy.rmse(predictions, verbose=True)
+
     def evaluate_mae(self):
         """
         Evaluate the MAE of the model on the test set.
@@ -400,7 +413,49 @@ class RecommenderSystem_KNN :
             average_distance = 0.0
 
         return average_distance
-    
+
+    def evaluate_knn_rmse_for_different_k(self):
+        """
+        Evaluate the RMSE of the KNN model for different values of k.
+        """
+        # Charger les données (par exemple, à partir d'un fichier de test de Surprise)
+ 
+        # Split data into training and testing sets
+        surprise_data = load_ratings(surprise_format=True)
+        self.trainset = surprise_data.build_full_trainset()
+        self.testset = self.trainset.build_anti_testset()
+ 
+        # Valeurs de k à tester
+        k_values = range(1, 81, 10)
+        rmse_values = []
+ 
+        # Évaluer le modèle pour chaque valeur de k
+        for k in k_values:
+            print(f"Évaluating for k={k}")
+            sim_options = {
+                'name': 'msd',
+                'user_based': True
+            }
+            algo = KNNWithMeans(sim_options=sim_options, k=k, min_k=k)
+            algo.fit(self.trainset)
+            predictions = algo.test(self.testset)
+            rmse = accuracy.rmse(predictions, verbose=False)
+            rmse_values.append(rmse)
+            print(f"k={k}, RMSE={rmse}")
+ 
+        # Tracer le graphique de l'évolution du RMSE en fonction de k
+        plt.figure(figsize=(10, 6))
+        plt.plot(k_values, rmse_values, marker='o')
+        plt.title('Évolution du RMSE en fonction de k')
+        plt.xlabel('Nombre de voisins (k)')
+        plt.ylabel('RMSE')
+        plt.grid(True)
+        plt.show()
+ 
+# # Utilisation de la classe RecommenderSystem_KNN
+recommender = RecommenderSystem_KNN(ratings_path='data/small/evidence/ratings.csv')
+recommender.evaluate_knn_rmse_for_different_k()
+
 ###########################################################################################################################
 ################################################# OTHER USER-BASED MODEL ##################################################
 ###########################################################################################################################