Mahout - Kurzanleitung
Wir leben in einer Zeit, in der Informationen im Überfluss verfügbar sind. Die Informationsüberflutung ist so groß geworden, dass es manchmal schwierig wird, unsere kleinen Postfächer zu verwalten! Stellen Sie sich das Daten- und Aufzeichnungsvolumen vor, das einige der beliebtesten Websites (z. B. Facebook, Twitter und Youtube) täglich sammeln und verwalten müssen. Es ist nicht ungewöhnlich, dass weniger bekannte Websites große Mengen an Informationen in großen Mengen erhalten.
Normalerweise greifen wir auf Data Mining-Algorithmen zurück, um Massendaten zu analysieren, um Trends zu identifizieren und Schlussfolgerungen zu ziehen. Kein Data Mining-Algorithmus kann jedoch effizient genug sein, um sehr große Datenmengen zu verarbeiten und Ergebnisse in kurzer Zeit bereitzustellen, es sei denn, die Rechenaufgaben werden auf mehreren Computern ausgeführt, die über die Cloud verteilt sind.
Wir haben jetzt neue Frameworks, mit denen wir eine Rechenaufgabe in mehrere Segmente aufteilen und jedes Segment auf einem anderen Computer ausführen können. Mahout ist ein solches Data Mining-Framework, das normalerweise in Verbindung mit der Hadoop-Infrastruktur im Hintergrund ausgeführt wird, um große Datenmengen zu verwalten.
Was ist Apache Mahout?
Ein Mahout ist einer, der einen Elefanten als seinen Meister treibt. Der Name kommt von seiner engen Verbindung mit Apache Hadoop, der einen Elefanten als Logo verwendet.
Hadoop ist ein Open-Source-Framework von Apache, mit dem Big Data mithilfe einfacher Programmiermodelle in einer verteilten Umgebung über mehrere Computercluster hinweg gespeichert und verarbeitet werden kann.
Apache Mahoutist ein Open-Source-Projekt, das hauptsächlich zur Erstellung skalierbarer Algorithmen für maschinelles Lernen verwendet wird. Es implementiert beliebte Techniken des maschinellen Lernens wie:
- Recommendation
- Classification
- Clustering
Apache Mahout wurde 2008 als Teilprojekt von Apaches Lucene gestartet. 2010 wurde Mahout zu einem Top-Level-Projekt von Apache.
Eigenschaften von Mahout
Die primitiven Merkmale von Apache Mahout sind unten aufgeführt.
Die Algorithmen von Mahout sind auf Hadoop geschrieben, sodass sie in verteilten Umgebungen gut funktionieren. Mahout verwendet die Apache Hadoop-Bibliothek, um effektiv in der Cloud zu skalieren.
Mahout bietet dem Codierer ein sofort einsatzbereites Framework für Data Mining-Aufgaben mit großen Datenmengen.
Mit Mahout können Anwendungen große Datenmengen effektiv und schnell analysieren.
Enthält mehrere MapReduce-fähige Clustering-Implementierungen wie k-means, fuzzy k-means, Canopy, Dirichlet und Mean-Shift.
Unterstützt verteilte Naive Bayes- und komplementäre Naive Bayes-Klassifizierungsimplementierungen.
Kommt mit verteilten Fitnessfunktionsfunktionen für die evolutionäre Programmierung.
Enthält Matrix- und Vektorbibliotheken.
Anwendungen von Mahout
Unternehmen wie Adobe, Facebook, LinkedIn, Foursquare, Twitter und Yahoo verwenden Mahout intern.
Foursquare hilft Ihnen dabei, Orte, Essen und Unterhaltung in einem bestimmten Gebiet herauszufinden. Es verwendet die Empfehlungsmaschine von Mahout.
Twitter verwendet Mahout zur Modellierung des Benutzerinteresses.
Yahoo! verwendet Mahout für das Pattern Mining.
Apache Mahout ist eine hoch skalierbare Bibliothek für maschinelles Lernen, mit der Entwickler optimierte Algorithmen verwenden können. Mahout implementiert gängige Techniken des maschinellen Lernens wie Empfehlung, Klassifizierung und Clustering. Daher ist es ratsam, einen kurzen Abschnitt über maschinelles Lernen zu lesen, bevor wir fortfahren.
Was ist maschinelles Lernen?
Maschinelles Lernen ist ein Wissenschaftszweig, der sich mit der Programmierung der Systeme so befasst, dass sie automatisch lernen und sich mit der Erfahrung verbessern. Lernen bedeutet hier, die Eingabedaten zu erkennen und zu verstehen und auf der Grundlage der bereitgestellten Daten kluge Entscheidungen zu treffen.
Es ist sehr schwierig, alle Entscheidungen auf der Grundlage aller möglichen Eingaben zu treffen. Um dieses Problem anzugehen, werden Algorithmen entwickelt. Diese Algorithmen bauen Wissen aus spezifischen Daten und früheren Erfahrungen mit den Prinzipien der Statistik, Wahrscheinlichkeitstheorie, Logik, kombinatorischen Optimierung, Suche, Verstärkungslernen und Steuerungstheorie auf.
Die entwickelten Algorithmen bilden die Grundlage für verschiedene Anwendungen wie:
- Bildverarbeitung
- Sprachverarbeitung
- Prognose (z. B. Börsentrends)
- Mustererkennung
- Games
- Data Mining
- Expertensysteme
- Robotics
Maschinelles Lernen ist ein weites Feld und es geht weit über den Rahmen dieses Tutorials hinaus, alle seine Funktionen abzudecken. Es gibt verschiedene Möglichkeiten, maschinelle Lerntechniken zu implementieren. Die am häufigsten verwendeten sind jedochsupervised und unsupervised learning.
Überwachtes Lernen
Betreutes Lernen befasst sich mit dem Lernen einer Funktion aus verfügbaren Trainingsdaten. Ein überwachter Lernalgorithmus analysiert die Trainingsdaten und erzeugt eine abgeleitete Funktion, die zur Abbildung neuer Beispiele verwendet werden kann. Häufige Beispiele für überwachtes Lernen sind:
- E-Mails als Spam klassifizieren,
- Beschriften von Webseiten anhand ihres Inhalts und
- Spracherkennung.
Es gibt viele überwachte Lernalgorithmen wie neuronale Netze, Support Vector Machines (SVMs) und Naive Bayes-Klassifikatoren. Mahout implementiert den Naive Bayes-Klassifikator.
Unbeaufsichtigtes Lernen
Unbeaufsichtigtes Lernen macht Sinn für unbeschriftete Daten, ohne dass ein vordefinierter Datensatz für das Training vorhanden ist. Unbeaufsichtigtes Lernen ist ein äußerst leistungsfähiges Werkzeug, um verfügbare Daten zu analysieren und nach Mustern und Trends zu suchen. Es wird am häufigsten zum Clustering ähnlicher Eingaben in logische Gruppen verwendet. Zu den gängigen Ansätzen für unbeaufsichtigtes Lernen gehören:
- k-means
- selbstorganisierende Karten und
- hierarchisches Clustering
Empfehlung
Empfehlung ist eine beliebte Technik, die auf der Grundlage von Benutzerinformationen wie früheren Einkäufen, Klicks und Bewertungen genaue Empfehlungen liefert.
Amazon verwendet diese Technik, um eine Liste empfohlener Elemente anzuzeigen, an denen Sie interessiert sein könnten, und um Informationen aus Ihren früheren Aktionen zu zeichnen. Es gibt Empfehlungs-Engines, die hinter Amazon arbeiten, um das Benutzerverhalten zu erfassen und ausgewählte Elemente basierend auf Ihren früheren Aktionen zu empfehlen.
Facebook verwendet die Empfehlungstechnik, um die Liste der Personen zu identifizieren und zu empfehlen, die Sie möglicherweise kennen.
Einstufung
Klassifizierung, auch bekannt als categorizationist eine maschinelle Lerntechnik, bei der anhand bekannter Daten festgelegt wird, wie die neuen Daten in eine Reihe vorhandener Kategorien eingeteilt werden sollen. Die Klassifizierung ist eine Form des überwachten Lernens.
Mail-Dienstleister wie Yahoo! und Google Mail verwenden diese Technik, um zu entscheiden, ob eine neue E-Mail als Spam eingestuft werden soll. Der Kategorisierungsalgorithmus trainiert sich selbst, indem er die Benutzergewohnheiten analysiert, bestimmte E-Mails als Spam zu markieren. Auf dieser Grundlage entscheidet der Klassifizierer, ob eine zukünftige E-Mail in Ihrem Posteingang oder im Spam-Ordner abgelegt werden soll.
Die iTunes-Anwendung verwendet die Klassifizierung, um Wiedergabelisten vorzubereiten.
Clustering
Clustering wird verwendet, um Gruppen oder Cluster ähnlicher Daten basierend auf gemeinsamen Merkmalen zu bilden. Clustering ist eine Form des unbeaufsichtigten Lernens.
Suchmaschinen wie Google und Yahoo! Verwenden Sie Clustering-Techniken, um Daten mit ähnlichen Merkmalen zu gruppieren.
Newsgroups verwenden Clustering-Techniken, um verschiedene Artikel basierend auf verwandten Themen zu gruppieren.
Die Clustering-Engine durchläuft die Eingabedaten vollständig und entscheidet anhand der Dateneigenschaften, unter welchem Cluster sie gruppiert werden soll. Schauen Sie sich das folgende Beispiel an.
Unsere Bibliothek mit Tutorials enthält Themen zu verschiedenen Themen. Wenn wir bei TutorialsPoint ein neues Tutorial erhalten, wird es von einer Clustering-Engine verarbeitet, die anhand ihres Inhalts entscheidet, wo es gruppiert werden soll.
In diesem Kapitel erfahren Sie, wie Sie Mahout einrichten. Java und Hadoop sind die Voraussetzungen für Mahout. Im Folgenden finden Sie die Schritte zum Herunterladen und Installieren von Java, Hadoop und Mahout.
Setup vor der Installation
Bevor wir Hadoop in einer Linux-Umgebung installieren, müssen wir Linux mit einrichten ssh(Sichere Shell). Führen Sie die folgenden Schritte aus, um die Linux-Umgebung einzurichten.
Benutzer erstellen
Es wird empfohlen, einen separaten Benutzer für Hadoop zu erstellen, um das Hadoop-Dateisystem vom Unix-Dateisystem zu isolieren. Führen Sie die folgenden Schritte aus, um einen Benutzer zu erstellen:
Öffnen Sie root mit dem Befehl "su".
- Erstellen Sie mit dem Befehl einen Benutzer aus dem Root-Konto “useradd username”.
Jetzt können Sie mit dem Befehl ein vorhandenes Benutzerkonto eröffnen “su username”.
Öffnen Sie das Linux-Terminal und geben Sie die folgenden Befehle ein, um einen Benutzer zu erstellen.
$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd
SSH-Setup und Schlüsselgenerierung
Das SSH-Setup ist erforderlich, um verschiedene Vorgänge in einem Cluster auszuführen, z. B. das Starten, Stoppen und Verteilen von Daemon-Shell-Vorgängen. Um verschiedene Benutzer von Hadoop zu authentifizieren, muss ein öffentliches / privates Schlüsselpaar für einen Hadoop-Benutzer bereitgestellt und für verschiedene Benutzer freigegeben werden.
Die folgenden Befehle werden verwendet, um mithilfe von SSH ein Schlüsselwertpaar zu generieren, die öffentlichen Schlüssel aus id_rsa.pub nach autorisierten Schlüsseln zu kopieren und Eigentümer-, Lese- und Schreibberechtigungen für die Datei "autorisierte Schlüssel" bereitzustellen.
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
Überprüfung von ssh
ssh localhost
Java installieren
Java ist die Hauptvoraussetzung für Hadoop und HBase. Zunächst sollten Sie die Existenz von Java in Ihrem System mit "java -version" überprüfen. Die Syntax des Java-Versionsbefehls ist unten angegeben.
$ java -version
Es sollte die folgende Ausgabe erzeugen.
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Wenn auf Ihrem System kein Java installiert ist, führen Sie die folgenden Schritte aus, um Java zu installieren.
Step 1
Laden Sie Java (JDK <neueste Version> - X64.tar.gz) über den folgenden Link herunter: Oracle
Dann jdk-7u71-linux-x64.tar.gz is downloaded auf Ihr System.
Step 2
Im Allgemeinen finden Sie die heruntergeladene Java-Datei im Ordner Downloads. Überprüfen Sie es und extrahieren Sie diejdk-7u71-linux-x64.gz Datei mit den folgenden Befehlen.
$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
Step 3
Um Java allen Benutzern zur Verfügung zu stellen, müssen Sie es an den Speicherort "/ usr / local /" verschieben. Öffnen Sie root und geben Sie die folgenden Befehle ein.
$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit
Step 4
Zum Einrichten PATH und JAVA_HOME Variablen, fügen Sie die folgenden Befehle hinzu ~/.bashrc file.
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin
Überprüfen Sie nun die java -version Befehl vom Terminal wie oben erläutert.
Hadoop herunterladen
Nach der Installation von Java müssen Sie zunächst Hadoop installieren. Überprüfen Sie die Existenz von Hadoop mit dem Befehl "Hadoop-Version" (siehe unten).
hadoop version
Es sollte die folgende Ausgabe erzeugen:
Hadoop 2.6.0
Compiled by jenkins on 2014-11-13T21:10Z
Compiled with protoc 2.5.0
From source with checksum 18e43357c8f927c0695f1e9522859d6a
This command was run using /home/hadoop/hadoop/share/hadoop/common/hadoopcommon-2.6.0.jar
Wenn Ihr System Hadoop nicht finden kann, laden Sie Hadoop herunter und installieren Sie es auf Ihrem System. Befolgen Sie dazu die unten angegebenen Befehle.
Laden Sie hadoop-2.6.0 mit den folgenden Befehlen von der Apache Software Foundation herunter und extrahieren Sie es.
$ su
password:
# cd /usr/local
# wget http://mirrors.advancedhosters.com/apache/hadoop/common/hadoop-
2.6.0/hadoop-2.6.0-src.tar.gz
# tar xzf hadoop-2.6.0-src.tar.gz
# mv hadoop-2.6.0/* hadoop/
# exit
Hadoop installieren
Installieren Sie Hadoop in einem der erforderlichen Modi. Hier demonstrieren wir HBase-Funktionen im pseudoverteilten Modus. Installieren Sie daher Hadoop im pseudoverteilten Modus.
Befolgen Sie zur Installation die folgenden Schritte Hadoop 2.4.1 auf Ihrem System.
Schritt 1: Hadoop einrichten
Sie können Hadoop-Umgebungsvariablen festlegen, indem Sie die folgenden Befehle an anhängen ~/.bashrc Datei.
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
Übernehmen Sie nun alle Änderungen in das aktuell ausgeführte System.
$ source ~/.bashrc
Schritt 2: Hadoop-Konfiguration
Sie finden alle Hadoop-Konfigurationsdateien unter dem Speicherort "$ HADOOP_HOME / etc / hadoop". Es ist erforderlich, Änderungen an diesen Konfigurationsdateien entsprechend Ihrer Hadoop-Infrastruktur vorzunehmen.
$ cd $HADOOP_HOME/etc/hadoop
Um Hadoop-Programme in Java zu entwickeln, müssen Sie die Java-Umgebungsvariablen in zurücksetzen hadoop-env.sh Datei durch Ersetzen JAVA_HOME Wert mit dem Speicherort von Java in Ihrem System.
export JAVA_HOME=/usr/local/jdk1.7.0_71
Im Folgenden finden Sie eine Liste der Dateien, die Sie bearbeiten müssen, um Hadoop zu konfigurieren.
core-site.xml
Das core-site.xml Die Datei enthält Informationen wie die für die Hadoop-Instanz verwendete Portnummer, den für das Dateisystem zugewiesenen Speicher, das Speicherlimit zum Speichern von Daten und die Größe der Lese- / Schreibpuffer.
Öffnen Sie core-site.xml und fügen Sie die folgende Eigenschaft zwischen den Tags <configuration>, </ configuration> hinzu:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xm
Das hdfs-site.xmlDie Datei enthält Informationen wie den Wert der Replikationsdaten, den Namensknotenpfad und den Datenknotenpfad Ihrer lokalen Dateisysteme. Dies ist der Ort, an dem Sie die Hadoop-Infrastruktur speichern möchten.
Nehmen wir folgende Daten an:
dfs.replication (data replication value) = 1
(In the below given path /hadoop/ is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path = //home/hadoop/hadoopinfra/hdfs/namenode
(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path = //home/hadoop/hadoopinfra/hdfs/datanode
Öffnen Sie diese Datei und fügen Sie die folgenden Eigenschaften zwischen den Tags <configuration>, </ configuration> in dieser Datei hinzu.
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode</value>
</property>
</configuration>
Note:In der obigen Datei sind alle Eigenschaftswerte benutzerdefiniert. Sie können Änderungen entsprechend Ihrer Hadoop-Infrastruktur vornehmen.
mapred-site.xml
Diese Datei wird verwendet, um Garn in Hadoop zu konfigurieren. Öffnen Sie die Datei mapred-site.xml und fügen Sie die folgende Eigenschaft zwischen den Tags <configuration>, </ configuration> in dieser Datei hinzu.
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
mapred-site.xml
Diese Datei wird verwendet, um anzugeben, welches MapReduce-Framework wir verwenden. Standardmäßig enthält Hadoop eine Vorlage von mapred-site.xml. Zunächst muss die Datei von kopiert werdenmapred-site.xml.template zu mapred-site.xml Datei mit dem folgenden Befehl.
$ cp mapred-site.xml.template mapred-site.xml
Öffnen mapred-site.xml Datei und fügen Sie die folgenden Eigenschaften zwischen den Tags <configuration>, </ configuration> in dieser Datei hinzu.
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
Überprüfen der Hadoop-Installation
Die folgenden Schritte werden verwendet, um die Hadoop-Installation zu überprüfen.
Schritt 1: Namensknoten-Setup
Richten Sie den Namensknoten mit dem Befehl "hdfs namenode -format" wie folgt ein:
$ cd ~
$ hdfs namenode -format
Das erwartete Ergebnis ist wie folgt:
10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = localhost/192.168.1.11
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to retain
1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/
Schritt 2: Überprüfen von Hadoop dfs
Der folgende Befehl wird verwendet, um dfs zu starten. Dieser Befehl startet Ihr Hadoop-Dateisystem.
$ start-dfs.sh
Die erwartete Ausgabe ist wie folgt:
10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to /home/hadoop/hadoop-
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
Schritt 3: Überprüfen des Garnskripts
Der folgende Befehl wird verwendet, um das Garnskript zu starten. Wenn Sie diesen Befehl ausführen, werden Ihre Garndämonen gestartet.
$ start-yarn.sh
Die erwartete Ausgabe ist wie folgt:
starting yarn daemons
starting resource manager, logging to /home/hadoop/hadoop-2.4.1/logs/yarn-
hadoop-resourcemanager-localhost.out
localhost: starting node manager, logging to /home/hadoop/hadoop-
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out
Schritt 4: Zugriff auf Hadoop über den Browser
Die Standardportnummer für den Zugriff auf hadoop ist 50070. Verwenden Sie die folgende URL, um Hadoop-Dienste in Ihrem Browser abzurufen.
http://localhost:50070/
Schritt 5: Überprüfen Sie alle Anwendungen für Cluster
Die Standardportnummer für den Zugriff auf alle Clusteranwendungen ist 8088. Verwenden Sie die folgende URL, um diesen Dienst zu besuchen.
http://localhost:8088/
Mahout herunterladen
Mahout ist auf der Website Mahout verfügbar . Laden Sie Mahout über den auf der Website bereitgestellten Link herunter. Hier ist der Screenshot der Website.
Schritt 1
Laden Sie Apache Mahout über den Link herunter http://mirror.nexcess.net/apache/mahout/ mit dem folgenden Befehl.
[Hadoop@localhost ~]$ wget
http://mirror.nexcess.net/apache/mahout/0.9/mahout-distribution-0.9.tar.gz
Dann mahout-distribution-0.9.tar.gz wird in Ihr System heruntergeladen.
Schritt 2
Durchsuchen Sie den Ordner, in dem mahout-distribution-0.9.tar.gz wird gespeichert und extrahiert die heruntergeladene JAR-Datei wie unten gezeigt.
[Hadoop@localhost ~]$ tar zxvf mahout-distribution-0.9.tar.gz
Maven Repository
Im Folgenden finden Sie die Datei pom.xml zum Erstellen von Apache Mahout mit Eclipse.
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-integration</artifactId>
<version>${mahout.version}</version>
</dependency>
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]
Clustering ist das Verfahren zum Organisieren von Elementen oder Elementen einer bestimmten Sammlung in Gruppen, basierend auf der Ähnlichkeit zwischen den Elementen. Beispielsweise gruppieren die Anwendungen im Zusammenhang mit Online-Nachrichtenveröffentlichungen ihre Nachrichtenartikel mithilfe von Clustering.
Anwendungen des Clustering
Clustering wird häufig in vielen Anwendungen wie Marktforschung, Mustererkennung, Datenanalyse und Bildverarbeitung eingesetzt.
Clustering kann Marketingfachleuten dabei helfen, unterschiedliche Gruppen in ihrer Kundenbasis zu entdecken. Und sie können ihre Kundengruppen anhand von Kaufmustern charakterisieren.
Auf dem Gebiet der Biologie können damit Taxonomien von Pflanzen und Tieren abgeleitet, Gene mit ähnlicher Funktionalität kategorisiert und Einblicke in Strukturen gewonnen werden, die Populationen innewohnen.
Clustering hilft bei der Identifizierung von Gebieten mit ähnlicher Landnutzung in einer Erdbeobachtungsdatenbank.
Clustering hilft auch bei der Klassifizierung von Dokumenten im Web für die Informationserkennung.
Clustering wird in Ausreißererkennungsanwendungen wie der Erkennung von Kreditkartenbetrug verwendet.
Als Data Mining-Funktion dient die Clusteranalyse als Werkzeug, um Einblicke in die Verteilung von Daten zu erhalten und die Merkmale jedes Clusters zu beobachten.
Mit Mahout können wir einen bestimmten Datensatz gruppieren. Folgende Schritte sind erforderlich:
Algorithm Sie müssen einen geeigneten Clustering-Algorithmus auswählen, um die Elemente eines Clusters zu gruppieren.
Similarity and Dissimilarity Sie müssen über eine Regel verfügen, um die Ähnlichkeit zwischen den neu angetroffenen Elementen und den Elementen in den Gruppen zu überprüfen.
Stopping Condition Eine Stoppbedingung ist erforderlich, um den Punkt zu definieren, an dem kein Clustering erforderlich ist.
Vorgehensweise beim Clustering
Um die angegebenen Daten zu gruppieren, müssen Sie -
Starten Sie den Hadoop-Server. Erstellen Sie die erforderlichen Verzeichnisse zum Speichern von Dateien im Hadoop-Dateisystem. (Erstellen Sie Verzeichnisse für Eingabedatei, Sequenzdatei und Clusterausgabe im Falle einer Überdachung.)
Kopieren Sie die Eingabedatei vom Unix-Dateisystem in das Hadoop-Dateisystem.
Bereiten Sie die Sequenzdatei aus den Eingabedaten vor.
Führen Sie einen der verfügbaren Clustering-Algorithmen aus.
Holen Sie sich die Clusterdaten.
Hadoop starten
Mahout arbeitet mit Hadoop zusammen. Stellen Sie daher sicher, dass der Hadoop-Server betriebsbereit ist.
$ cd HADOOP_HOME/bin
$ start-all.sh
Eingabedateiverzeichnisse vorbereiten
Erstellen Sie Verzeichnisse im Hadoop-Dateisystem, um die Eingabedatei, Sequenzdateien und Clusterdaten mit dem folgenden Befehl zu speichern:
$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq
Sie können überprüfen, ob das Verzeichnis mithilfe der Hadoop-Weboberfläche unter der folgenden URL erstellt wurde: http://localhost:50070/
Es gibt Ihnen die Ausgabe wie unten gezeigt:
Kopieren der Eingabedatei nach HDFS
Kopieren Sie nun die Eingabedatendatei aus dem Linux-Dateisystem in das Verzeichnis mahout_data im Hadoop-Dateisystem, wie unten gezeigt. Angenommen, Ihre Eingabedatei lautet mydata.txt und befindet sich im Verzeichnis / home / Hadoop / data /.
$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/
Sequenzdatei vorbereiten
Mahout bietet Ihnen ein Dienstprogramm zum Konvertieren der angegebenen Eingabedatei in ein Sequenzdateiformat. Dieses Dienstprogramm erfordert zwei Parameter.
- Das Eingabedateiverzeichnis, in dem sich die Originaldaten befinden.
- Das Ausgabedateiverzeichnis, in dem die Clusterdaten gespeichert werden sollen.
Unten ist die Eingabeaufforderung von Mahout angegeben seqdirectory Nützlichkeit.
Step 1:Navigieren Sie zum Mahout-Ausgangsverzeichnis. Sie können Hilfe des Dienstprogramms wie folgt erhalten:
[Hadoop@localhost bin]$ ./mahout seqdirectory --help
Job-Specific Options:
--input (-i) input Path to job input directory.
--output (-o) output The directory pathname for output.
--overwrite (-ow) If present, overwrite the output directory
Generieren Sie die Sequenzdatei mit dem Dienstprogramm mit der folgenden Syntax:
mahout seqdirectory -i <input file path> -o <output directory>
Example
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
Clustering-Algorithmen
Mahout unterstützt zwei Hauptalgorithmen für das Clustering:
- Canopy Clustering
- K-bedeutet Clustering
Canopy Clustering
Canopy Clustering ist eine einfache und schnelle Technik, die Mahout für Clustering-Zwecke verwendet. Die Objekte werden als Punkte in einem einfachen Raum behandelt. Diese Technik wird häufig als erster Schritt bei anderen Clustering-Techniken wie dem k-means-Clustering verwendet. Sie können einen Canopy-Job mit der folgenden Syntax ausführen:
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
Der Canopy-Job erfordert ein Eingabedateiverzeichnis mit der Sequenzdatei und ein Ausgabeverzeichnis, in dem die Clusterdaten gespeichert werden sollen.
Example
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
Sie erhalten die im angegebenen Ausgabeverzeichnis generierten Clusterdaten.
K-bedeutet Clustering
K-Means-Clustering ist ein wichtiger Clustering-Algorithmus. Der Clustering-Algorithmus k in k bedeutet die Anzahl der Cluster, in die die Daten unterteilt werden sollen. Zum Beispiel wird der für diesen Algorithmus angegebene k-Wert als 3 ausgewählt, der Algorithmus wird die Daten in 3 Cluster aufteilen.
Jedes Objekt wird als Vektor im Raum dargestellt. Anfänglich werden k Punkte vom Algorithmus zufällig ausgewählt und als Zentren behandelt. Jedes Objekt, das jedem Zentrum am nächsten liegt, wird gruppiert. Es gibt verschiedene Algorithmen für die Entfernungsmessung, und der Benutzer sollte den gewünschten auswählen.
Creating Vector Files
Im Gegensatz zum Canopy-Algorithmus benötigt der k-means-Algorithmus Vektordateien als Eingabe, daher müssen Sie Vektordateien erstellen.
Um Vektordateien aus dem Sequenzdateiformat zu generieren, bietet Mahout die seq2parse Nützlichkeit.
Nachstehend sind einige der Optionen von aufgeführt seq2parseNützlichkeit. Erstellen Sie mit diesen Optionen Vektordateien.
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.
Fahren Sie nach dem Erstellen der Vektoren mit dem k-means-Algorithmus fort. Die Syntax zum Ausführen des k-means-Jobs lautet wie folgt:
mahout kmeans -i <input vectors directory>
-c <input clusters directory>
-o <output working directory>
-dm <Distance Measure technique>
-x <maximum number of iterations>
-k <number of initial clusters>
Für den K-Means-Clustering-Job sind ein Eingabevektorverzeichnis, ein Ausgabeclusterverzeichnis, ein Entfernungsmaß, die maximale Anzahl der auszuführenden Iterationen und ein ganzzahliger Wert erforderlich, der die Anzahl der Cluster darstellt, in die die Eingabedaten unterteilt werden sollen.
Was ist Klassifizierung?
Die Klassifizierung ist eine maschinelle Lerntechnik, bei der anhand bekannter Daten festgelegt wird, wie die neuen Daten in eine Reihe vorhandener Kategorien eingeteilt werden sollen. Zum Beispiel,
Die iTunes-Anwendung verwendet die Klassifizierung, um Wiedergabelisten vorzubereiten.
Mail-Dienstleister wie Yahoo! und Google Mail verwenden diese Technik, um zu entscheiden, ob eine neue E-Mail als Spam eingestuft werden soll. Der Kategorisierungsalgorithmus trainiert sich selbst, indem er die Benutzergewohnheiten analysiert, bestimmte E-Mails als Spam zu markieren. Auf dieser Grundlage entscheidet der Klassifizierer, ob eine zukünftige E-Mail in Ihrem Posteingang oder im Spam-Ordner abgelegt werden soll.
Wie die Klassifizierung funktioniert
Während der Klassifizierung eines bestimmten Datensatzes führt das Klassifizierungssystem die folgenden Aktionen aus:
- Zunächst wird unter Verwendung eines der Lernalgorithmen ein neues Datenmodell erstellt.
- Anschließend wird das vorbereitete Datenmodell getestet.
- Danach wird dieses Datenmodell verwendet, um die neuen Daten auszuwerten und ihre Klasse zu bestimmen.
Anwendungen der Klassifikation
Credit card fraud detection- Der Klassifizierungsmechanismus wird verwendet, um Kreditkartenbetrug vorherzusagen. Anhand historischer Informationen früherer Betrugsfälle kann der Klassifizierer vorhersagen, welche zukünftigen Transaktionen zu Betrug führen können.
Spam e-mails - Abhängig von den Merkmalen früherer Spam-Mails bestimmt der Klassifizierer, ob eine neu aufgetretene E-Mail an den Spam-Ordner gesendet werden soll.
Naiver Bayes-Klassifikator
Mahout verwendet den Naive Bayes-Klassifikatoralgorithmus. Es werden zwei Implementierungen verwendet:
- Verteilte Naive Bayes-Klassifizierung
- Komplementäre Naive Bayes Klassifizierung
Naive Bayes ist eine einfache Technik zum Konstruieren von Klassifikatoren. Es ist kein einzelner Algorithmus zum Trainieren solcher Klassifikatoren, sondern eine Familie von Algorithmen. Ein Bayes-Klassifikator erstellt Modelle zur Klassifizierung von Probleminstanzen. Diese Klassifizierungen werden anhand der verfügbaren Daten vorgenommen.
Ein Vorteil von naiven Bayes besteht darin, dass nur eine geringe Menge an Trainingsdaten erforderlich ist, um die für die Klassifizierung erforderlichen Parameter abzuschätzen.
Für einige Arten von Wahrscheinlichkeitsmodellen können naive Bayes-Klassifikatoren in einer überwachten Lernumgebung sehr effizient trainiert werden.
Trotz seiner stark vereinfachten Annahmen haben naive Bayes-Klassifikatoren in vielen komplexen realen Situationen recht gut funktioniert.
Verfahren der Klassifizierung
Die folgenden Schritte sind zu befolgen, um die Klassifizierung zu implementieren:
- Beispieldaten generieren
- Erstellen Sie Sequenzdateien aus Daten
- Konvertieren Sie Sequenzdateien in Vektoren
- Trainiere die Vektoren
- Testen Sie die Vektoren
Schritt 1: Beispieldaten generieren
Generieren oder laden Sie die zu klassifizierenden Daten herunter. Zum Beispiel können Sie die bekommen 20 newsgroups Beispieldaten von folgendem Link: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
Erstellen Sie ein Verzeichnis zum Speichern von Eingabedaten. Laden Sie das Beispiel wie unten gezeigt herunter.
$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz
Schritt 2: Erstellen Sie Sequenzdateien
Erstellen Sie eine Sequenzdatei aus dem Beispiel mit seqdirectoryNützlichkeit. Die Syntax zum Generieren der Sequenz ist unten angegeben:
mahout seqdirectory -i <input file path> -o <output directory>
Schritt 3: Konvertieren von Sequenzdateien in Vektoren
Erstellen Sie Vektordateien aus Sequenzdateien mit seq2parseNützlichkeit. Die Optionen von seq2parse Dienstprogramm sind unten angegeben:
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.
Schritt 4: Trainieren Sie die Vektoren
Trainieren Sie die generierten Vektoren mit dem trainnbNützlichkeit. Die zu verwendenden Optionentrainnb Dienstprogramm sind unten angegeben:
mahout trainnb
-i ${PATH_TO_TFIDF_VECTORS}
-el
-o ${PATH_TO_MODEL}/model
-li ${PATH_TO_MODEL}/labelindex
-ow
-c
Schritt 5: Testen Sie die Vektoren
Testen Sie die Vektoren mit testnbNützlichkeit. Die zu verwendenden Optionentestnb Dienstprogramm sind unten angegeben:
mahout testnb
-i ${PATH_TO_TFIDF_TEST_VECTORS}
-m ${PATH_TO_MODEL}/model
-l ${PATH_TO_MODEL}/labelindex
-ow
-o ${PATH_TO_OUTPUT}
-c
-seq