Mahout - Recommandation

Ce chapitre couvre la technique d'apprentissage automatique populaire appelée recommendation, ses mécanismes, et comment écrire une application mettant en œuvre la recommandation Mahout.

Recommandation

Vous êtes-vous déjà demandé comment Amazon propose une liste d'articles recommandés pour attirer votre attention sur un produit particulier qui pourrait vous intéresser!

Supposons que vous souhaitiez acheter le livre «Mahout in Action» sur Amazon:

En plus du produit sélectionné, Amazon affiche également une liste des articles recommandés associés, comme indiqué ci-dessous.

Ces listes de recommandations sont produites à l'aide de recommender engines. Mahout fournit des moteurs de recommandation de plusieurs types tels que:

  • recommandateurs basés sur les utilisateurs,
  • recommandateurs basés sur les articles, et
  • plusieurs autres algorithmes.

Moteur de recommandation Mahout

Mahout a un moteur de recommandation non distribué et non basé sur Hadoop. Vous devez transmettre un document texte ayant des préférences utilisateur pour les éléments. Et la sortie de ce moteur serait les préférences estimées d'un utilisateur particulier pour d'autres éléments.

Exemple

Pensez à un site Web qui vend des biens de consommation tels que des mobiles, des gadgets et leurs accessoires. Si nous voulons implémenter les fonctionnalités de Mahout dans un tel site, nous pouvons créer un moteur de recommandation. Ce moteur analyse les données d'achat passées des utilisateurs et recommande de nouveaux produits en fonction de cela.

Les composants fournis par Mahout pour construire un moteur de recommandation sont les suivants:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

À partir du magasin de données, le modèle de données est préparé et transmis en tant qu'entrée au moteur de recommandation. Le moteur de recommandation génère les recommandations pour un utilisateur particulier. Vous trouverez ci-dessous l'architecture du moteur de recommandation.

Architecture du moteur de recommandation

Créer un recommandé avec Mahout

Voici les étapes pour développer un simple recommandateur:

Étape 1: créer un objet DataModel

Le constructeur de PearsonCorrelationSimilarityLa classe nécessite un objet de modèle de données, qui contient un fichier contenant les détails des utilisateurs, des éléments et des préférences d'un produit. Voici l'exemple de fichier de modèle de données:

1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0

2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0

3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0

4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0

le DataModelobject requiert l'objet fichier, qui contient le chemin du fichier d'entrée. Créer leDataModel objet comme indiqué ci-dessous.

DataModel datamodel = new FileDataModel(new File("input file"));

Étape 2: créer un objet UserSimilarity

Créer UserSimilarity objet utilisant PearsonCorrelationSimilarity classe comme indiqué ci-dessous:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Étape 3: créer un objet UserNe Neighborhood

Cet objet calcule un "voisinage" d'utilisateurs comme un utilisateur donné. Il existe deux types de quartiers:

  • NearestNUserNeighborhood- Cette classe calcule un voisinage constitué des n utilisateurs les plus proches d'un utilisateur donné. "Nearest" est défini par la UserSimilarity donnée.

  • ThresholdUserNeighborhood- Cette classe calcule un voisinage constitué de tous les utilisateurs dont la similitude avec l'utilisateur donné atteint ou dépasse un certain seuil. La similarité est définie par la similitude utilisateur donnée.

Ici, nous utilisons ThresholdUserNeighborhood et définissez la limite de préférence à 3,0.

UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);

Étape 4: créer un objet de recommandation

Créer UserbasedRecomenderobjet. Passez tous les objets créés ci-dessus à son constructeur comme indiqué ci-dessous.

UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

Étape 5: recommander des éléments à un utilisateur

Recommander des produits à un utilisateur en utilisant la méthode recommend () de Recommenderinterface. Cette méthode nécessite deux paramètres. Le premier représente l'identifiant de l'utilisateur auquel nous devons envoyer les recommandations, et le second représente le nombre de recommandations à envoyer. Voici l'utilisation derecommender() méthode:

List<RecommendedItem> recommendations = recommender.recommend(2, 3);

for (RecommendedItem recommendation : recommendations) {
   System.out.println(recommendation);
 }

Example Program

Vous trouverez ci-dessous un exemple de programme pour établir une recommandation. Préparez les recommandations pour l'utilisateur avec l'ID utilisateur 2.

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;

import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;

import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.UserBasedRecommender;

import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class Recommender {
   public static void main(String args[]){
      try{
         //Creating data model
         DataModel datamodel = new FileDataModel(new File("data")); //data
      
         //Creating UserSimilarity object.
         UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
      
         //Creating UserNeighbourHHood object.
         UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
      
         //Create UserRecomender
         UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
        
         List<RecommendedItem> recommendations = recommender.recommend(2, 3);
			
         for (RecommendedItem recommendation : recommendations) {
            System.out.println(recommendation);
         }
      
      }catch(Exception e){}
      
   }
  }

Compilez le programme à l'aide des commandes suivantes:

javac Recommender.java
java Recommender

Il devrait produire la sortie suivante:

RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]