Open Guepardow opened 8 years ago
Je m'en charge. J'en profiterai pour rendre le code plus clair et le commenter.
J'ai commencé à modifier les fichiers du dossier "Util".
La fonction a été vectorisée. Mais je pense qu'on peut toujours faire mieux.
J'ai compris pourquoi lors de la validation croisée, on avait eu l'erreur 01 qui décroissant avec le nombre de plus proches voisins : le calcul de l'erreur 01 est buggé. En effet, dès qu'il y a des NA, le dénominateur est plus grand que prévu. J'ai rajouté en commentaires des tests unitaires qu'il faudra valider. La solution : lors du calcul de l'erreur, les NA ne doivent pas être pris en compte (cf exemples de tests unitaires)
Suite à la remarque d'Ulrich, j'ai modifié "Choisissez un dossier : " en "Choisissez un problème : "
Ces deux fonctions ont été vectorisées. Gains non négligeables !! =) De plus, j'ai modifié les inputs et l'output. Les fonctions prennent en compte data.Movies (resp. data.Users) pour éviter de faire un merge en dehors de la fonction. Ainsi à la sortie, nous obtenons directement notre recap.Movies (resp. recap.Users) au lieu de notre ancien stat.Movies(resp. stat.Users).
Je l'ai transformé en une fonction. Les entrées sont la base des notes et le nombre de tests de validation croisée. Par ailleurs, j'ai supprimé le seed : ça n'apportait pas de changement à mes yeux. Sauf erreur.
fonction | temps d'exécution - version non-optimisée | temps d'exécution - version optimisée | amélioration |
---|---|---|---|
deja_Vu.R | 1.29s | 1.21s | -6% |
recap_Movies.R | 2.89s | 0.31s | -89% |
recap.Users.R | 1.54s | 0.20s | -87% |
Je reviens sur ma décision : on génère bien les statistiques stat_Movies et stat_Users. cf : naive_predictions.R n'utilise que les statistiques : y intégrer les bases des utilisateurs et des films serait bizarre.
Un petit mis au point : les fonctions incriminées (knn_user_predictions, main_preparation, Q_nearest_neighbors, ...) ont été modifiées. Mais, il me reste toujours les fonctions main.R et knn_user_recommendations.R à modifier.
Actuellement, pour le problème ml-100k, générer une matrice de similarité prend 20/25 minutes. Quid pour ml-1m ??
Il faudra qu'on recense les fonctions à accélérer + qu'on utilise les
apply, lapply, sapply
.