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]