kkmm001 / StatApp-Collaborative-Filtering

ENSAE ParisTech Master Project 2015-2016 "Films Recommandation System by Collaborative Filtering"
1 stars 3 forks source link

Vectorisation du code #13

Open Guepardow opened 8 years ago

Guepardow commented 8 years ago

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.

Guepardow commented 8 years ago

Je m'en charge. J'en profiterai pour rendre le code plus clair et le commenter.

Guepardow commented 8 years ago

J'ai commencé à modifier les fichiers du dossier "Util".

Modification apportée à Util

deja_Vu.R

La fonction a été vectorisée. Mais je pense qu'on peut toujours faire mieux.

error_function.R

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)

open_files.R

Suite à la remarque d'Ulrich, j'ai modifié "Choisissez un dossier : " en "Choisissez un problème : "

recap.Movies.R & recap.Users.R

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).

split_data.R

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.

Temps d'exécution

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%
Guepardow commented 8 years ago

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.

Guepardow commented 8 years ago

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.