2016-04-06 1 views
1

J'ai travaillé à la mise en place d'un système de recommandation par le biais de recommandations fondées sur des commentaires implicites. Par conséquent, j'utilise le tuple (user, item, count) pour créer ma matrice d'item utilisateur.recommandation paramètres du moteur

j'ai fait mettre en œuvre mon système de recommandation en utilisant cet exemple très agréable sur les données scientifiques blog Perspicacité: http://insightdatascience.com/blog/explicit_matrix_factorization.html

Cependant, par rapport à l'ensemble de données de lentille de film, mon ensemble de données est très clairsemée. Dans l'exemple, 6,3% de l'ensemble de données est rempli, alors que ce nombre est de 0,30% pour moi. Donc, il y a beaucoup de valeurs inconnues dans mon ensemble de données. J'ai environ 2900 utilisateurs et 5000 articles.

J'ai entraîné mon modèle, et la formation MSE refuse de descendre. J'ai essayé d'optimiser les paramètres, mais en vain. J'ai eu les questions suivantes:

(1) MSE n'est pas une métrique fiable? J'avais passé par cette discussion: https://www.quora.com/How-do-you-measure-and-evaluate-the-quality-of-recommendation-engines

Cependant, le test A/B n'est pas une option pour moi. Mon expérience avec les modèles d'apprentissage automatique m'a toujours appris que si la formation MSE est bloquée à un point, alors c'est une mauvaise chose (pour tout un tas de raisons)

Alors, je n'évalue pas les choses correctement?

(2) Le problème du démarrage à froid? J'initialise mes vecteurs d'utilisateur et vecteurs d'élément comme ceci:

self.user_vectors = np.random.normal(size=(self.num_users,self.num_factors)) 

self.item_vectors = np.random.normal(size=(self.num_items,self.num_factors)) 

Y at-il quelque chose que je peux changer ici?

Je suis confus quant à ce qu'il faut faire ensuite. La densité de la matrice est très élevée et je sais que mon algorithme prédire des valeurs pour un grand nombre de zéros. Je sens intuitivement que cela garde ma MSE constante.

Toute idée ou direction serait vraiment appréciée!

Merci

+0

Que signifie ** compter ** dans votre jeu de données? Nombre de fois qu'un utilisateur a visionné un film? –

+0

Oui. Le nombre fait référence au nombre de fois que l'utilisateur a visionné un film. –

Répondre

1

(1) Le MovieLens DataSet est un ensemble de données académique et il y a un choix clair de la façon dont ils génèrent l'ensemble de données qui le rend très différent d'un vrai jeu de données de systèmes de recommandation de la vie. Sur README du jeu de données, les auteurs précisent:

Each user has rated at least 20 movies. 

donc leur faible RMSE est applicable uniquement aux utilisateurs ayant cette caractéristique.

Je suggère deux mesures:

  1. diviser vos données en jeu de train et de tester et de comparer vos prédictions avec le jeu de test, voir si vous prédisez un du (utilisateur, film) paires qui sont dans votre test ensemble;
  2. Comparez votre niveau de référence avec la moyenne de l'utilisateur et la moyenne du film.

(2) Je pense que vous êtes un peu confus au sujet du problème de démarrage à froid: Il est un problème qui affecte les systèmes de recommandation (RS) qui ne disposent pas de données sur un utilisateur ou d'un film. Par exemple, si personne n'a vu un film, vous ne pouvez pas faire de prédictions fiables sur qui va l'apprécier.De la même manière pour les utilisateurs, pour quelqu'un qui n'a pas regardé un film, vous ne pouvez pas prédire quels films ils vont aimer. Une façon de surmonter le problème est de créer une mesure de similarité entre les films et entre les utilisateurs, en fonction de leurs caractéristiques (sexe, âge, pays pour les utilisateurs et genre, date et langue pour les films). Avec cela, vous pouvez faire des recommandations basées sur les utilisateurs et les films les plus similaires. Ces types de RS sont dits hybrides.

papiers suggérés:

+0

Merci pour l'aide! Je me demandais comment je devrais faire pour la formation et la répartition des tests. En général, je fais une division 80/20 et mon modèle (forêts aléatoires, régression logistique, etc.) apprend les caractéristiques de l'ensemble d'entraînement et prédispose sur l'ensemble de test. –

+0

Cependant, c'est un peu différent ici parce que mon algorithme optimise le vecteur d'utilisateur et d'article. Ceux-ci ne peuvent être utilisés que sur une matrice de la même taille. –

+0

Dois-je faire quelque chose comme choisir un nombre x de comptes non nuls et créer un ensemble de test de la même taille. Quelque chose de similaire à ce qui a été fait ici: https://gist.github.com/EthanRosenthal/68362b45ad6ca586199d –