2016-03-01 1 views
1

Je tente de créer un moteur de recommandations basé sur un filtrage collaboratif à l'aide d'Apache Spark. J'ai pu exécuter le recommendation_example.py sur mes données, avec un très bon résultat. (MSE ~ 0,9). Certaines des questions spécifiques que j'ai sont:Création d'un moteur de recommandation de filtrage collaboratif à l'aide de Spark mlLib

  1. Comment faire une recommandation pour les utilisateurs qui n'ont pas fait d'activité sur le site. N'y at-il pas un appel API pour les articles populaires, ce qui me donnerait les éléments les plus populaires en fonction des actions de l'utilisateur. Une façon de faire est d'identifier les articles populaires par nous-mêmes, et attraper l'exception java.util.NoSuchElementException, et de retourner ces articles populaires.
  2. Comment recharger le modèle, après que certaines données ont été ajoutées dans le fichier d'entrée. J'essaye de recharger le modèle using une autre fonction, qui essaye de sauver le modèle, mais il donne l'erreur comme org.apache.hadoop.mapred.FileAlreadyExistsException. Une façon de faire est d'écouter les données entrantes sur un fil parallèle, enregistrez-le en utilisant model.save(sc, "target/tmp/<some target>"), puis rechargez le modèle après réception des données importantes. Je suis perdu ici, comment y parvenir.

Ce serait très utile, si je pouvais obtenir une direction ici.

Répondre

1

Pour la première partie, vous pouvez trouver item_id, Nombre de fois que item_id est apparu. Vous pouvez utiliser les fonctions map et reduceByKey de spark pour cela. Après cela, trouvez les 10 premiers éléments ayant le nombre maximum. Vous pouvez également donner le poids en fonction de la récence des articles.

Pour la deuxième partie, vous pouvez enregistrer le modèle avec un nouveau nom à chaque fois. Je crée généralement un nom de dossier sur la route en utilisant la date et l'heure actuelles et utilise le même nom pour recharger le modèle à partir du dossier enregistré. Vous devrez toujours répéter le modèle, en utilisant les données passées et les nouvelles données reçues, puis utiliser le modèle pour prédire.

1

Indépendamment de l'utilisation de plates-formes comme Spark, il existe de très bonnes techniques (par exemple la factorisation matricielle non négative) de la prédiction de lien qui prédit le lien entre 2 ensembles. D'autres techniques de recommandations très efficaces (et bonnes) sont: - 1. Thompson Sampling, 2.MAB (Multi Arm Bandits). Beaucoup dépend de l'ensemble de données brutes. Comment votre ensemble de données brutes est-il distribué? Je recommande d'appliquer les méthodes ci-dessus sur un ensemble de données brutes de 5%, de construire une hypothèse, d'utiliser le test A/B, de prévoir les liens et d'aller de l'avant.

Encore une fois, toutes ces techniques sont indépendantes de la plate-forme. Je recommande également de passer de zéro au lieu d'utiliser des plates-formes comme des étincelles qui ne sont utiles que pour les grands ensembles de données. Vous pouvez toujours passer à ces plates-formes à l'avenir pour l'évolutivité.

Hope it helps!

+0

Merci. Je vais les essayer dès que possible et vous le faire savoir. :) – Abhishek