Skip to content
Extraits de code Groupes Projets
Valider 817df132 rédigé par Nathanaël Kindidi's avatar Nathanaël Kindidi
Parcourir les fichiers

Inutile

parent 7d1e209c
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -7,6 +7,7 @@ from collections import defaultdict ...@@ -7,6 +7,7 @@ from collections import defaultdict
# Third-party imports # Third-party imports
import numpy as np import numpy as np
import pandas as pd import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import pearsonr from scipy.stats import pearsonr
from sklearn.ensemble import AdaBoostRegressor, GradientBoostingRegressor, RandomForestRegressor from sklearn.ensemble import AdaBoostRegressor, GradientBoostingRegressor, RandomForestRegressor
...@@ -20,7 +21,6 @@ from sklearn.svm import SVR ...@@ -20,7 +21,6 @@ from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor from sklearn.tree import DecisionTreeRegressor
from surprise import AlgoBase, KNNWithMeans, accuracy, PredictionImpossible from surprise import AlgoBase, KNNWithMeans, accuracy, PredictionImpossible
from xgboost import XGBRegressor from xgboost import XGBRegressor
from lightgbm import LGBMRegressor
# Local imports # Local imports
from constants import Constant as C from constants import Constant as C
...@@ -315,6 +315,19 @@ class RecommenderSystem_KNN : ...@@ -315,6 +315,19 @@ class RecommenderSystem_KNN :
predictions = self.model.test(self.testset) predictions = self.model.test(self.testset)
self.rmse = accuracy.rmse(predictions) 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): def evaluate_mae(self):
""" """
Evaluate the MAE of the model on the test set. Evaluate the MAE of the model on the test set.
...@@ -400,7 +413,49 @@ class RecommenderSystem_KNN : ...@@ -400,7 +413,49 @@ class RecommenderSystem_KNN :
average_distance = 0.0 average_distance = 0.0
return average_distance 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 ################################################## ################################################# OTHER USER-BASED MODEL ##################################################
########################################################################################################################### ###########################################################################################################################
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter