L'objectif est de mettre en pratique ce qui a été vu en cours concernant la factorisation de matrices dans le cadre des systèmes de notation de produits.
On va travailler avec des données issues du système de recommandation
de films MovieLens. Plusieurs
jeux de données sont disponibles sur le site
de GroupLens. Ces jeux
de données diffèrent par leur taille et vous travaillerez avec le plus
petit pour mettre au point vos programmes. Néanmoins, vos programmes
doivent aussi fonctionner avec les deux autres jeux de données.
MovieLens est un site
communautaire de recommandation de films. Les utilisateurs de ce site
notent des films de 1 à 5. Ils peuvent également demander des
suggestions de films étant donnés les notations qu'ils ont fournies.
Chaque utilisateur est décrit par quelques attributs :
Chaque film est décrit par :
On dispose alors d'une liste de notes sous la forme :
Dans le plus petit jeu de données, il y a 100.000 notes, provenant de
943 utilisateurs pour 1682 films. Les autres jeux de données en
comptent respectivement 1 million et 10 millions.
L'objectif est de pouvoir sélectionner des films pour un
utilisateur. Les recommandations peuvent concerner des films qui
devraient lui plaire, mais aussi des films qui ne lui plairont
probablement pas.
Pour cela, on va appliquer ce que l'on a vu en cours concernant la
factorisation de matrices non négatives.
On va appliquer la méthode de factorisation de matrices non négatives vue en cours pour effectuer des recommentations.
L'algorithme vu en cours est le suivant :
(on suppose que vous avez récupéré les deux fichiers u1.base
et u1.test
)
u1.base
:
u1.test
(on mesure l'écart-type de l'erreur quadratique moyenne, i.e. la RMSE)break
)Deux points auxquels il faut prêter attention :
Une fois que cette première version fonctionne, il y a plein de petits trucs pour en améliorer ses performances. Par exemple :
Écrire une fonction qui recommande 5 films qu'il n'a pas notés à un utilisateur identifié par son numéro.