0

Modifier: J'ai essayé une application Spark autonome (au lieu de PredictionIO) et mes observations sont les mêmes. Donc ce n'est pas un problème PredictionIO, mais encore confus.Pourquoi ALS.trainImplicit donne-t-il de meilleures prédictions pour les évaluations explicites?


J'utilise PredictionIO 0.9.6 et le modèle Recommendation pour le filtrage collaboratif. Les notes dans mon ensemble de données sont des nombres entre 1 et 10. Quand j'ai d'abord formé un modèle avec les valeurs par défaut du modèle (en utilisant ALS.train), les prédictions étaient horribles, au moins subjectivement. Les scores allaient jusqu'à 60,0 ou plus, mais les recommandations semblaient totalement aléatoires.

Quelqu'un a suggéré que ALS.trainImplicit a fait un meilleur travail, donc je changé src/main/scala/ALSAlgorithm.scala en conséquence:

val m = ALS.trainImplicit( // instead of ALS.train 
    ratings = mllibRatings, 
    rank = ap.rank, 
    iterations = ap.numIterations, 
    lambda = ap.lambda, 
    blocks = -1, 
    alpha = 1.0, // also added this line 
    seed = seed) 

scores sont maintenant beaucoup plus faible (inférieure à 1,0), mais les recommandations sont conformes aux évaluations personnelles. Beaucoup mieux, mais aussi déroutant. PredictionIO définit la différence entre explicite et implicite ainsi:

préférence explicite (également appelé comme « rétroaction explicite »), comme « note » donnée au point par les utilisateurs. préférence implicite (également référencé comme "commentaires implicites"), tels que l'historique "view" et "buy".

et:

Par défaut, le modèle de recommandation utilise ALS.train() qui attend des valeurs de notation explicites que l'utilisateur a noté l'élément.

source

La documentation est mauvaise? Je pense toujours que commentaires explicites correspond à mon cas d'utilisation. Peut-être que je dois adapter le modèle avec ALS.train afin d'obtenir des recommandations utiles? Ou ai-je juste mal compris quelque chose?

+0

D'où vous proviennent vos évaluations? Sont-ils calculés ou demandez-vous explicitement aux utilisateurs d'évaluer les éléments entre 1 et 10? Si oui, alors vous utilisez en effet les commentaires explicites – alex9311

+0

@ alex9311 en effet, les utilisateurs ont évalué les éléments sur une échelle de 1 à 10. J'ai quelques millions d'évaluations. – stholzm

Répondre

0

Cela dépend en grande partie de la façon dont vous avez recueilli les données. Souvent, les évaluations qui semblent explicites peuvent être implicites. Par exemple, supposons que vous donniez la possibilité d'autoriser les utilisateurs à évaluer les éléments qu'ils ont achetés/utilisés auparavant. Cela signifie que le fait même qu'ils aient passé leur temps à évaluer cet article particulier signifie que l'article est de haute qualité. En tant que tel, les articles de mauvaise qualité ne sont pas évalués du tout parce que les gens ne prennent même pas la peine de les utiliser. Ainsi, même si l'ensemble de données doit être explicite, vous obtiendrez de meilleurs résultats si vous considérez que les résultats sont implicites. Encore une fois, cela varie considérablement en fonction de la façon dont les données sont obtenues.