Mahout - Raccomandazione

Questo capitolo tratta la popolare tecnica di apprendimento automatico chiamata recommendation, i suoi meccanismi e come scrivere un'applicazione che implementa la raccomandazione Mahout.

Raccomandazione

Ti sei mai chiesto come fa Amazon a presentare un elenco di articoli consigliati per attirare la tua attenzione su un particolare prodotto a cui potresti essere interessato!

Supponi di voler acquistare il libro "Mahout in Action" da Amazon:

Insieme al prodotto selezionato, Amazon mostra anche un elenco di articoli consigliati correlati, come mostrato di seguito.

Tali elenchi di raccomandazioni vengono prodotti con l'aiuto di recommender engines. Mahout fornisce motori di raccomandazione di diversi tipi come:

  • consiglieri basati sugli utenti,
  • consiglieri basati sugli articoli e
  • molti altri algoritmi.

Motore di raccomandazione Mahout

Mahout ha un motore di raccomandazione non distribuito e non basato su Hadoop. Dovresti passare un documento di testo con le preferenze dell'utente per gli elementi. E l'output di questo motore sarebbe la stima delle preferenze di un particolare utente per altri elementi.

Esempio

Considera un sito web che vende beni di consumo come cellulari, gadget e relativi accessori. Se vogliamo implementare le funzionalità di Mahout in un sito del genere, possiamo creare un motore di raccomandazione. Questo motore analizza i dati degli acquisti passati degli utenti e consiglia nuovi prodotti sulla base di questi.

I componenti forniti da Mahout per costruire un motore di raccomandazione sono i seguenti:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Dall'archivio dati, il modello di dati viene preparato e passato come input al motore di raccomandazione. Il motore di raccomandazione genera i consigli per un particolare utente. Di seguito è riportata l'architettura del motore di raccomandazione.

Architettura del motore di raccomandazione

Creazione di un suggeritore utilizzando Mahout

Ecco i passaggi per sviluppare un semplice suggeritore:

Passaggio 1: creare l'oggetto DataModel

Il costruttore di PearsonCorrelationSimilarityclass richiede un oggetto modello dati, che contiene un file che contiene i dettagli di utenti, elementi e preferenze di un prodotto. Ecco il file del modello di dati di esempio:

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

Il DataModelobject richiede l'oggetto file, che contiene il percorso del file di input. Crea il fileDataModel oggetto come mostrato di seguito.

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

Passaggio 2: creare un oggetto UserSimilarity

Creare UserSimilarity oggetto utilizzando PearsonCorrelationSimilarity classe come mostrato di seguito:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Passaggio 3: creare l'oggetto UserNeroute

Questo oggetto calcola un "quartiere" di utenti come un dato utente. Esistono due tipi di quartieri:

  • NearestNUserNeighborhood- Questa classe calcola un vicinato costituito dagli n utenti più vicini a un dato utente. "Nearest" è definito dalla UserSimilarity data.

  • ThresholdUserNeighborhood- Questa classe calcola un quartiere composto da tutti gli utenti la cui somiglianza con un dato utente incontra o supera una certa soglia. La somiglianza è definita dalla data UserSimilarity.

Qui stiamo usando ThresholdUserNeighborhood e imposta il limite di preferenza a 3.0.

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

Passaggio 4: creare un oggetto di raccomandazione

Creare UserbasedRecomenderoggetto. Passa tutti gli oggetti creati sopra al suo costruttore come mostrato di seguito.

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

Passaggio 5: consiglia articoli a un utente

Consiglia prodotti a un utente utilizzando il metodo Recommend () di Recommenderinterfaccia. Questo metodo richiede due parametri. Il primo rappresenta l'ID utente dell'utente a cui dobbiamo inviare i consigli e il secondo rappresenta il numero di consigli da inviare. Ecco l'utilizzo direcommender() metodo:

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

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

Example Program

Di seguito è riportato un programma di esempio per impostare la raccomandazione. Prepara i consigli per l'utente con l'ID utente 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){}
      
   }
  }

Compilare il programma utilizzando i seguenti comandi:

javac Recommender.java
java Recommender

Dovrebbe produrre il seguente output:

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