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]