Mahout - Empfehlung
Dieses Kapitel behandelt die beliebte Technik des maschinellen Lernens recommendation, seine Mechanismen und wie man eine Anwendung schreibt, die die Mahout-Empfehlung implementiert.
Empfehlung
Haben Sie sich jemals gefragt, wie Amazon eine Liste empfohlener Artikel erstellt, um Ihre Aufmerksamkeit auf ein bestimmtes Produkt zu lenken, an dem Sie interessiert sein könnten?
Angenommen, Sie möchten das Buch „Mahout in Action“ bei Amazon kaufen:
Zusammen mit dem ausgewählten Produkt zeigt Amazon auch eine Liste verwandter empfohlener Artikel an, wie unten gezeigt.
Solche Empfehlungslisten werden mit Hilfe von erstellt recommender engines. Mahout bietet Empfehlungsmotoren verschiedener Typen an, wie zum Beispiel:
- benutzerbasierte Empfehlungen,
- artikelbasierte Empfehlungen und
- mehrere andere Algorithmen.
Mahout Recommender Engine
Mahout verfügt über eine nicht verteilte, nicht auf Hadoop basierende Empfehlungs-Engine. Sie sollten ein Textdokument mit Benutzereinstellungen für Elemente übergeben. Die Ausgabe dieser Engine entspricht den geschätzten Präferenzen eines bestimmten Benutzers für andere Elemente.
Beispiel
Stellen Sie sich eine Website vor, auf der Konsumgüter wie Handys, Gadgets und deren Zubehör verkauft werden. Wenn wir die Funktionen von Mahout auf einer solchen Site implementieren möchten, können wir eine Empfehlungs-Engine erstellen. Diese Engine analysiert frühere Kaufdaten der Benutzer und empfiehlt darauf basierend neue Produkte.
Die von Mahout bereitgestellten Komponenten zum Aufbau eines Empfehlungsmotors sind wie folgt:
- DataModel
- UserSimilarity
- ItemSimilarity
- UserNeighborhood
- Recommender
Aus dem Datenspeicher wird das Datenmodell vorbereitet und als Eingabe an die Empfehlungs-Engine übergeben. Die Recommender-Engine generiert die Empfehlungen für einen bestimmten Benutzer. Im Folgenden wird die Architektur der Empfehlungs-Engine angegeben.
Architektur der Empfehlungsmaschine
Erstellen eines Empfehlers mit Mahout
Hier sind die Schritte zum Entwickeln eines einfachen Empfehlers:
Schritt 1: Erstellen Sie ein DataModel-Objekt
Der Konstruktor von PearsonCorrelationSimilarityFür die Klasse ist ein Datenmodellobjekt erforderlich, das eine Datei enthält, die die Details Benutzer, Elemente und Einstellungen eines Produkts enthält. Hier ist die Beispieldatenmodelldatei:
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
Das DataModelObjekt erfordert das Dateiobjekt, das den Pfad der Eingabedatei enthält. Erstellen Sie dieDataModel Objekt wie unten gezeigt.
DataModel datamodel = new FileDataModel(new File("input file"));
Schritt 2: Erstellen Sie ein UserSimilarity-Objekt
Erstellen UserSimilarity Objekt mit PearsonCorrelationSimilarity Klasse wie unten gezeigt:
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
Schritt 3: Erstellen Sie das UserNeighborhood-Objekt
Dieses Objekt berechnet eine "Nachbarschaft" von Benutzern wie ein bestimmter Benutzer. Es gibt zwei Arten von Stadtteilen:
NearestNUserNeighborhood- Diese Klasse berechnet eine Nachbarschaft, die aus den n Benutzern besteht, die einem bestimmten Benutzer am nächsten liegen . "Am nächsten" wird durch die angegebene UserSimilarity definiert.
ThresholdUserNeighborhood- Diese Klasse berechnet eine Nachbarschaft, die aus allen Benutzern besteht, deren Ähnlichkeit mit dem angegebenen Benutzer einen bestimmten Schwellenwert erreicht oder überschreitet. Die Ähnlichkeit wird durch die angegebene UserSimilarity definiert.
Hier verwenden wir ThresholdUserNeighborhood und setzen Sie die Präferenzgrenze auf 3,0.
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
Schritt 4: Empfehlungsobjekt erstellen
Erstellen UserbasedRecomenderObjekt. Übergeben Sie alle oben erstellten Objekte wie unten gezeigt an den Konstruktor.
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
Schritt 5: Elemente einem Benutzer empfehlen
Empfehlen Sie einem Benutzer Produkte mit der Empfehlung () -Methode von RecommenderSchnittstelle. Diese Methode erfordert zwei Parameter. Die erste repräsentiert die Benutzer-ID des Benutzers, an den wir die Empfehlungen senden müssen, und die zweite repräsentiert die Anzahl der zu sendenden Empfehlungen. Hier ist die Verwendung vonrecommender() Methode:
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
Example Program
Im Folgenden finden Sie ein Beispielprogramm zum Festlegen von Empfehlungen. Bereiten Sie die Empfehlungen für den Benutzer mit der Benutzer-ID 2 vor.
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){}
}
}
Kompilieren Sie das Programm mit den folgenden Befehlen:
javac Recommender.java
java Recommender
Es sollte die folgende Ausgabe erzeugen:
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]