Mahout - Szybki przewodnik

Żyjemy w czasach, w których informacji jest pod dostatkiem. Przepełnienie informacji osiągnęło takie rozmiary, że czasami trudno jest zarządzać naszymi małymi skrzynkami pocztowymi! Wyobraź sobie ilość danych i zapisów, które niektóre popularne strony internetowe (takie jak Facebook, Twitter i Youtube) muszą codziennie gromadzić i zarządzać. Nierzadko zdarza się, że nawet mniej znane witryny internetowe otrzymują zbiorczo ogromne ilości informacji.

Zwykle polegamy na algorytmach eksploracji danych, aby analizować dane masowe, aby identyfikować trendy i wyciągać wnioski. Jednak żaden algorytm eksploracji danych nie może być wystarczająco wydajny, aby przetwarzać bardzo duże zbiory danych i zapewniać wyniki w krótkim czasie, chyba że zadania obliczeniowe są uruchamiane na wielu maszynach rozproszonych w chmurze.

Mamy teraz nowe struktury, które pozwalają nam rozbić zadanie obliczeniowe na wiele segmentów i uruchomić każdy segment na innym komputerze. Mahout to taka struktura eksploracji danych, która zwykle działa w połączeniu z infrastrukturą Hadoop w tle, aby zarządzać ogromnymi ilościami danych.

Co to jest Apache Mahout?

Kornak jest ten, kto jeździ na słoniu jak jego mistrz. Nazwa pochodzi od ścisłego związku z Apache Hadoop, w którym logo jest słonia.

Hadoop to platforma typu open source firmy Apache, która umożliwia przechowywanie i przetwarzanie dużych zbiorów danych w środowisku rozproszonym na klastrach komputerów przy użyciu prostych modeli programowania.

Apache Mahoutto projekt typu open source, który jest używany głównie do tworzenia skalowalnych algorytmów uczenia maszynowego. Implementuje popularne techniki uczenia maszynowego, takie jak:

  • Recommendation
  • Classification
  • Clustering

Apache Mahout rozpoczął się jako podprojekt Apache's Lucene w 2008 roku. W 2010 roku Mahout stał się projektem najwyższego poziomu Apache.

Cechy Mahouta

Poniżej wymieniono prymitywne cechy Apache Mahout.

  • Algorytmy Mahouta są napisane na platformie Hadoop, więc działa dobrze w środowisku rozproszonym. Mahout używa biblioteki Apache Hadoop do efektywnego skalowania w chmurze.

  • Mahout oferuje programistom gotową do użycia platformę do wykonywania zadań eksploracji danych na dużych ilościach danych.

  • Mahout umożliwia aplikacjom efektywną i szybką analizę dużych zbiorów danych.

  • Obejmuje kilka implementacji klastrowania z obsługą MapReduce, takich jak k-średnie, rozmyte k-średnie, Canopy, Dirichlet i Mean-Shift.

  • Obsługuje Distributed Naive Bayes i Complementary Naive Bayes implementacje klasyfikacji.

  • Zawiera rozproszone funkcje fitness do programowania ewolucyjnego.

  • Obejmuje biblioteki macierzy i wektorów.

Zastosowania Mahouta

  • Firmy takie jak Adobe, Facebook, LinkedIn, Foursquare, Twitter i Yahoo używają Mahout wewnętrznie.

  • Foursquare pomaga znaleźć miejsca, jedzenie i rozrywkę dostępne w określonym obszarze. Wykorzystuje silnik rekomendujący firmy Mahout.

  • Twitter używa Mahouta do modelowania zainteresowań użytkowników.

  • Wieśniak! używa Mahouta do wydobywania wzorców.

Apache Mahout to wysoce skalowalna biblioteka do uczenia maszynowego, która umożliwia programistom korzystanie ze zoptymalizowanych algorytmów. Mahout implementuje popularne techniki uczenia maszynowego, takie jak rekomendowanie, klasyfikacja i grupowanie. Dlatego rozsądnie jest mieć krótką sekcję na temat uczenia maszynowego, zanim przejdziemy dalej.

Co to jest uczenie maszynowe?

Uczenie maszynowe to dziedzina nauki, która zajmuje się programowaniem systemów w taki sposób, aby automatycznie się uczyły i doskonaliły wraz z doświadczeniem. Uczenie się oznacza tutaj rozpoznawanie i rozumienie danych wejściowych oraz podejmowanie mądrych decyzji na podstawie dostarczonych danych.

Bardzo trudno jest uwzględnić wszystkie decyzje oparte na wszystkich możliwych danych wejściowych. Aby rozwiązać ten problem, opracowano algorytmy. Algorytmy te budują wiedzę na podstawie określonych danych i wcześniejszych doświadczeń z zasadami statystyki, teorii prawdopodobieństwa, logiki, optymalizacji kombinatorycznej, wyszukiwania, uczenia się ze wzmocnieniem i teorii sterowania.

Opracowane algorytmy są podstawą różnych aplikacji, takich jak:

  • Przetwarzanie wizji
  • Przetwarzanie języka
  • Prognozowanie (np. Trendy na giełdzie)
  • Rozpoznawanie wzorców
  • Games
  • Eksploracja danych
  • Systemy eksperckie
  • Robotics

Uczenie maszynowe to rozległy obszar i wykrycie wszystkich jego funkcji wykracza poza zakres tego samouczka. Istnieje kilka sposobów implementacji technik uczenia maszynowego, jednak te najczęściej są używanesupervised i unsupervised learning.

Nadzorowana nauka

Uczenie nadzorowane dotyczy uczenia się funkcji na podstawie dostępnych danych szkoleniowych. Algorytm uczenia nadzorowanego analizuje dane szkoleniowe i tworzy wywnioskowaną funkcję, której można użyć do mapowania nowych przykładów. Typowe przykłady nadzorowanego uczenia się obejmują:

  • klasyfikowanie e-maili jako spamu,
  • etykietowanie stron internetowych na podstawie ich zawartości oraz
  • rozpoznawanie głosu.

Istnieje wiele algorytmów uczenia nadzorowanego, takich jak sieci neuronowe, maszyny wektorów pomocniczych (SVM) i klasyfikatory Naive Bayes. Mahout implementuje klasyfikator Naive Bayes.

Uczenie się bez nadzoru

Uczenie się nienadzorowane ma sens w przypadku danych nieoznaczonych bez żadnego predefiniowanego zestawu danych do ich uczenia. Uczenie się bez nadzoru to niezwykle potężne narzędzie do analizowania dostępnych danych oraz wyszukiwania wzorców i trendów. Jest najczęściej używany do grupowania podobnych danych wejściowych w logiczne grupy. Typowe podejścia do uczenia się bez nadzoru obejmują:

  • k-means
  • samoorganizujące się mapy i
  • hierarchiczne grupowanie

Rekomendacje

Rekomendacja to popularna technika, która zapewnia bliskie rekomendacje na podstawie informacji o użytkowniku, takich jak poprzednie zakupy, kliknięcia i oceny.

  • Amazon używa tej techniki do wyświetlania listy polecanych przedmiotów, które mogą Cię zainteresować, czerpiąc informacje z Twoich wcześniejszych działań. Istnieją silniki rekomendujące, które działają za Amazon, aby uchwycić zachowanie użytkowników i polecić wybrane elementy na podstawie Twoich wcześniejszych działań.

  • Facebook wykorzystuje technikę rekomendacji, aby zidentyfikować i polecić „listę osób, które możesz znać”.

Klasyfikacja

Klasyfikacja, znana również jako categorization, to technika uczenia maszynowego, która wykorzystuje znane dane do określenia, jak nowe dane powinny zostać sklasyfikowane w zestawie istniejących kategorii. Klasyfikacja jest formą nauki nadzorowanej.

  • Dostawcy usług pocztowych, tacy jak Yahoo! a Gmail używa tej techniki do decydowania, czy nowa wiadomość powinna zostać sklasyfikowana jako spam. Algorytm kategoryzacji uczy się, analizując nawyki użytkowników związane z oznaczaniem niektórych wiadomości jako spamu. Na tej podstawie klasyfikator decyduje, czy przyszła poczta powinna trafić do Twojej skrzynki odbiorczej, czy do folderu ze spamem.

  • Aplikacja iTunes używa klasyfikacji do przygotowywania list odtwarzania.

Grupowanie

Klastrowanie służy do tworzenia grup lub klastrów podobnych danych na podstawie wspólnych cech. Tworzenie klastrów jest formą uczenia się bez nadzoru.

  • Wyszukiwarki takie jak Google i Yahoo! stosować techniki grupowania w celu grupowania danych o podobnych cechach.

  • Grupy dyskusyjne używają technik klastrowania do grupowania różnych artykułów na podstawie pokrewnych tematów.

Mechanizm klastrowania w całości analizuje dane wejściowe i na podstawie charakterystyk danych zadecyduje, w ramach którego klastra należy go zgrupować. Spójrz na poniższy przykład.

Nasza biblioteka samouczków zawiera tematy z różnych dziedzin. Kiedy otrzymujemy nowy samouczek w TutorialsPoint, jest on przetwarzany przez silnik klastrowania, który na podstawie jego zawartości decyduje, gdzie powinien zostać zgrupowany.

W tym rozdziale dowiesz się, jak ustawić kornak. Java i Hadoop są warunkami wstępnymi gry mahout. Poniżej podano kroki, aby pobrać i zainstalować Java, Hadoop i Mahout.

Konfiguracja przed instalacją

Przed zainstalowaniem Hadoopa w środowisku Linux, musimy skonfigurować Linuksa przy użyciu ssh(Bezpieczna powłoka). Wykonaj poniższe czynności, aby skonfigurować środowisko Linux.

Tworzenie użytkownika

Zaleca się utworzenie oddzielnego użytkownika dla Hadoop w celu odizolowania systemu plików Hadoop od systemu plików Unix. Wykonaj poniższe czynności, aby utworzyć użytkownika:

  • Otwórz root za pomocą polecenia „su”.

  • Utwórz użytkownika z konta root za pomocą polecenia “useradd username”.

  • Teraz możesz otworzyć istniejące konto użytkownika za pomocą polecenia “su username”.

  • Otwórz terminal Linux i wpisz następujące polecenia, aby utworzyć użytkownika.

$ su
password:
# useradd hadoop
# passwd hadoop
New passwd:
Retype new passwd

Konfiguracja SSH i generowanie klucza

Konfiguracja SSH jest wymagana do wykonywania różnych operacji w klastrze, takich jak uruchamianie, zatrzymywanie i rozproszone operacje powłoki demona. Aby uwierzytelnić różnych użytkowników Hadoop, wymagane jest podanie pary kluczy publiczny / prywatny dla użytkownika Hadoop i udostępnienie go różnym użytkownikom.

Poniższe polecenia służą do generowania pary klucz-wartość za pomocą protokołu SSH, kopiowania kluczy publicznych z formularza id_rsa.pub do authoris_keys i przyznawania odpowiednio właścicielowi, uprawnienia do odczytu i zapisu w pliku author_key.

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

Weryfikacja ssh

ssh localhost

Instalowanie Java

Java jest głównym wymaganiem wstępnym dla Hadoop i HBase. Przede wszystkim powinieneś zweryfikować istnienie Javy w swoim systemie za pomocą „java -version”. Poniżej podano składnię polecenia wersji Java.

$ java -version

Powinien dać następujący wynik.

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)

Jeśli nie masz zainstalowanej Javy w swoim systemie, wykonaj poniższe kroki, aby zainstalować Javę.

Step 1

Pobierz java (JDK <najnowsza wersja> - X64.tar.gz), odwiedzając poniższy link: Oracle

Następnie jdk-7u71-linux-x64.tar.gz is downloaded do twojego systemu.

Step 2

Ogólnie pobrany plik Java znajduje się w folderze Pobrane. Sprawdź go i wyodrębnij plikjdk-7u71-linux-x64.gz plik za pomocą następujących poleceń.

$ 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

Aby udostępnić Javę wszystkim użytkownikom, musisz przenieść ją do lokalizacji „/ usr / local /”. Otwórz root i wpisz następujące polecenia.

$ su
password:
# mv jdk1.7.0_71 /usr/local/
# exit

Step 4

Do konfiguracji PATH i JAVA_HOME zmienne, dodaj następujące polecenia do ~/.bashrc file.

export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH= $PATH:$JAVA_HOME/bin

Teraz sprawdź java -version polecenie z terminala, jak wyjaśniono powyżej.

Pobieranie Hadoop

Po zainstalowaniu Javy należy najpierw zainstalować Hadoop. Sprawdź istnienie Hadoop przy użyciu polecenia „Wersja Hadoop”, jak pokazano poniżej.

hadoop version

Powinien dać następujący wynik:

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

Jeśli Twój system nie może zlokalizować Hadoop, pobierz Hadoop i zainstaluj go w swoim systemie. Aby to zrobić, postępuj zgodnie z poleceniami podanymi poniżej.

Pobierz i wyodrębnij hadoop-2.6.0 z fundacji oprogramowania Apache, używając następujących poleceń.

$ 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

Instalowanie Hadoop

Zainstaluj Hadoop w dowolnym z wymaganych trybów. Tutaj demonstrujemy funkcjonalności HBase w trybie pseudo-rozproszonym, dlatego zainstaluj Hadoop w trybie pseudo-rozproszonym.

Wykonaj poniższe czynności, aby zainstalować Hadoop 2.4.1 w twoim systemie.

Krok 1: Konfiguracja Hadoop

Możesz ustawić zmienne środowiskowe Hadoop, dołączając następujące polecenia do ~/.bashrc plik.

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

Teraz zastosuj wszystkie zmiany do aktualnie działającego systemu.

$ source ~/.bashrc

Krok 2: Konfiguracja Hadoop

Wszystkie pliki konfiguracyjne Hadoop można znaleźć w lokalizacji „$ HADOOP_HOME / etc / hadoop”. Wymagane jest wprowadzenie zmian w tych plikach konfiguracyjnych zgodnie z infrastrukturą Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Aby tworzyć programy Hadoop w Javie, musisz zresetować zmienne środowiskowe Java w hadoop-env.sh plik, zastępując JAVA_HOME wartość z położeniem Java w systemie.

export JAVA_HOME=/usr/local/jdk1.7.0_71

Poniżej znajduje się lista plików, które musisz edytować, aby skonfigurować Hadoop.

core-site.xml

Plik core-site.xml plik zawiera informacje, takie jak numer portu używanego dla wystąpienia Hadoop, pamięć przydzielona dla systemu plików, limit pamięci do przechowywania danych oraz rozmiar buforów do odczytu / zapisu.

Otwórz plik core-site.xml i dodaj następującą właściwość między tagami <configuration>, </configuration>:

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>

hdfs-site.xm

Plik hdfs-site.xmlplik zawiera informacje, takie jak wartość danych replikacji, ścieżka do kodu nazwy i ścieżki do węzła danych lokalnych systemów plików. To miejsce, w którym chcesz przechowywać infrastrukturę Hadoop.

Załóżmy następujące dane:

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

Otwórz ten plik i dodaj następujące właściwości między tagami <configuration>, </configuration> w tym pliku.

<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:W powyższym pliku wszystkie wartości właściwości są zdefiniowane przez użytkownika. Możesz wprowadzać zmiany zgodnie z infrastrukturą Hadoop.

mapred-site.xml

Ten plik służy do konfigurowania przędzy w Hadoop. Otwórz plik mapred-site.xml i dodaj następującą właściwość między tagami <configuration>, </configuration> w tym pliku.

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
   </property>
</configuration>

mapred-site.xml

Ten plik jest używany do określenia, której platformy MapReduce używamy. Domyślnie Hadoop zawiera szablon mapred-site.xml. Przede wszystkim należy skopiować plik zmapred-site.xml.template do mapred-site.xml plik za pomocą następującego polecenia.

$ cp mapred-site.xml.template mapred-site.xml

otwarty mapred-site.xml file i dodaj następujące właściwości między tagami <configuration>, </configuration> w tym pliku.

<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Weryfikacja instalacji Hadoop

Poniższe kroki służą do weryfikacji instalacji Hadoop.

Krok 1: Konfiguracja nazwy węzła

Skonfiguruj namenode za pomocą polecenia „hdfs namenode -format” w następujący sposób:

$ cd ~
$ hdfs namenode -format

Oczekiwany wynik jest następujący:

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
************************************************************/

Krok 2: weryfikacja plików dfs na platformie Hadoop

Następujące polecenie służy do uruchamiania dfs. To polecenie uruchamia system plików Hadoop.

$ start-dfs.sh

Oczekiwany wynik jest następujący:

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]

Krok 3: weryfikacja skryptu przędzy

Następujące polecenie służy do uruchamiania skryptu przędzy. Wykonanie tego polecenia spowoduje uruchomienie demonów przędzy.

$ start-yarn.sh

Oczekiwany wynik jest następujący:

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

Krok 4: Dostęp do Hadoop w przeglądarce

Domyślny numer portu dostępu do hadoop to 50070. Użyj następującego adresu URL, aby pobrać usługi Hadoop w przeglądarce.

http://localhost:50070/

Krok 5: Sprawdź wszystkie aplikacje dla klastra

Domyślny numer portu dostępu do wszystkich aplikacji klastra to 8088. Aby odwiedzić tę usługę, użyj następującego adresu URL.

http://localhost:8088/

Pobieranie Mahout

Mahout jest dostępny na stronie Mahout . Pobierz Mahouta z linku podanego na stronie internetowej. Oto zrzut ekranu strony internetowej.

Krok 1

Pobierz kornak Apache z linku http://mirror.nexcess.net/apache/mahout/ za pomocą następującego polecenia.

[Hadoop@localhost ~]$ wget
http://mirror.nexcess.net/apache/mahout/0.9/mahout-distribution-0.9.tar.gz

Następnie mahout-distribution-0.9.tar.gz zostanie pobrany w twoim systemie.

Krok 2

Przejrzyj folder, w którym mahout-distribution-0.9.tar.gz jest przechowywany i wyodrębnij pobrany plik jar, jak pokazano poniżej.

[Hadoop@localhost ~]$ tar zxvf mahout-distribution-0.9.tar.gz

Repozytorium Maven

Poniżej podano pom.xml do zbudowania Apache Mahout przy użyciu 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>

W tym rozdziale omówiono popularną technikę uczenia maszynowego zwaną recommendation, jego mechanizmy i jak napisać aplikację realizującą rekomendację Mahouta.

Rekomendacje

Czy zastanawiałeś się kiedyś, jak Amazon tworzy listę polecanych produktów, aby zwrócić Twoją uwagę na konkretny produkt, który może Cię zainteresować!

Załóżmy, że chcesz kupić książkę „Mahout in Action” od Amazon:

Wraz z wybranym produktem Amazon wyświetla również listę powiązanych zalecanych pozycji, jak pokazano poniżej.

Takie listy rekomendacji są tworzone za pomocą recommender engines. Mahout oferuje silniki rekomendujące kilku typów, takie jak:

  • rekomendacje oparte na użytkownikach,
  • rekomendacje oparte na elementach i
  • kilka innych algorytmów.

Silnik rekomendujący Mahout

Mahout ma nierozproszony silnik rekomendujący, który nie jest oparty na Hadoop. Należy przekazać dokument tekstowy zawierający preferencje użytkownika dotyczące towarów. Efektem tego silnika byłyby szacunkowe preferencje konkretnego użytkownika w odniesieniu do innych elementów.

Przykład

Rozważ witrynę, która sprzedaje towary konsumpcyjne, takie jak telefony komórkowe, gadżety i akcesoria do nich. Jeśli chcemy zaimplementować funkcje Mahouta w takiej witrynie, możemy zbudować silnik rekomendujący. Silnik ten analizuje dane o wcześniejszych zakupach użytkowników i na tej podstawie rekomenduje nowe produkty.

Komponenty dostarczone przez firmę Mahout do budowy silnika rekomendującego są następujące:

  • DataModel
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Z bazy danych model danych jest przygotowywany i przekazywany jako dane wejściowe do silnika rekomendującego. Silnik rekomendujący generuje rekomendacje dla konkretnego użytkownika. Poniżej podano architekturę silnika rekomendującego.

Architektura silnika rekomendującego

Tworzenie rekomendującego przy użyciu Mahouta

Oto kroki, aby opracować prostego polecającego:

Krok 1: Utwórz obiekt DataModel

Konstruktor PearsonCorrelationSimilarityclass wymaga obiektu modelu danych, który przechowuje plik zawierający szczegóły dotyczące użytkowników, elementów i preferencji produktu. Oto przykładowy plik modelu danych:

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

Plik DataModelobiekt wymaga obiektu pliku, który zawiera ścieżkę do pliku wejściowego. Utwórz plikDataModel obiekt, jak pokazano poniżej.

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

Krok 2: Utwórz obiekt UserSimilarity

Stwórz UserSimilarity obiekt za pomocą PearsonCorrelationSimilarity klasa, jak pokazano poniżej:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Krok 3: Utwórz obiekt UserNeighborhood

Ten obiekt oblicza „sąsiedztwo” użytkowników, takich jak dany użytkownik. Istnieją dwa rodzaje okolic:

  • NearestNUserNeighborhood- Ta klasa oblicza otoczenie składające się z n najbliższych użytkowników do danego użytkownika. „Najbliższy” jest określony przez podobieństwo użytkownika.

  • ThresholdUserNeighborhood- Ta klasa oblicza otoczenie składające się ze wszystkich użytkowników, których podobieństwo do danego użytkownika spełnia lub przekracza określony próg. Podobieństwo jest definiowane przez podobieństwo użytkownika.

Tutaj używamy ThresholdUserNeighborhood i ustaw limit preferencji na 3,0.

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

Krok 4: Utwórz obiekt polecającego

Stwórz UserbasedRecomenderobiekt. Przekaż wszystkie powyższe utworzone obiekty do jego konstruktora, jak pokazano poniżej.

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

Krok 5: Poleć produkty użytkownikowi

Poleć produkty użytkownikowi za pomocą metody Recommend () Recommenderberło. Ta metoda wymaga dwóch parametrów. Pierwsza reprezentuje identyfikator użytkownika, do którego musimy wysłać rekomendacje, a druga reprezentuje liczbę rekomendacji do wysłania. Oto użycierecommender() metoda:

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

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

Example Program

Poniżej podano przykładowy program do ustawiania rekomendacji. Przygotuj zalecenia dla użytkownika o identyfikatorze użytkownika 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){}
      
   }
  }

Skompiluj program za pomocą następujących poleceń:

javac Recommender.java
java Recommender

Powinien dać następujący wynik:

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

Klastrowanie to procedura organizowania elementów lub elementów danej kolekcji w grupy na podstawie podobieństwa między elementami. Na przykład aplikacje związane z publikowaniem wiadomości online grupują artykuły z wiadomościami za pomocą grupowania.

Zastosowania klastrowania

  • Klastrowanie jest szeroko stosowane w wielu zastosowaniach, takich jak badania rynku, rozpoznawanie wzorców, analiza danych i przetwarzanie obrazu.

  • Tworzenie klastrów może pomóc marketerom w odkrywaniu odrębnych grup klientów. Mogą scharakteryzować swoje grupy klientów na podstawie wzorców zakupowych.

  • W dziedzinie biologii można go wykorzystać do wyprowadzenia taksonomii roślin i zwierząt, kategoryzacji genów o podobnej funkcjonalności i uzyskania wglądu w struktury właściwe dla populacji.

  • Klastrowanie pomaga w identyfikacji obszarów o podobnym przeznaczeniu w bazie danych obserwacji Ziemi.

  • Klastrowanie pomaga również w klasyfikowaniu dokumentów w sieci WWW w celu wyszukiwania informacji.

  • Klastrowanie jest używane w aplikacjach do wykrywania wartości odstających, takich jak wykrywanie oszustw związanych z kartami kredytowymi.

  • Jako funkcja eksploracji danych Cluster Analysis służy jako narzędzie do uzyskiwania wglądu w dystrybucję danych w celu obserwacji cech każdego klastra.

Używając Mahouta, możemy skupić dany zestaw danych. Wymagane kroki są następujące:

  • Algorithm Musisz wybrać odpowiedni algorytm klastrowania, aby pogrupować elementy klastra.

  • Similarity and Dissimilarity Musisz mieć regułę sprawdzającą podobieństwo między nowo napotkanymi elementami a elementami w grupach.

  • Stopping Condition Do zdefiniowania punktu, w którym nie jest wymagane grupowanie, wymagany jest warunek zatrzymania.

Procedura klastrowania

Aby zgrupować podane dane, musisz -

  • Uruchom serwer Hadoop. Utwórz wymagane katalogi do przechowywania plików w systemie plików Hadoop. (Utwórz katalogi dla pliku wejściowego, pliku sekwencji i grupowanego wyjścia w przypadku baldachimu).

  • Skopiuj plik wejściowy do systemu plików Hadoop z systemu plików Unix.

  • Przygotuj plik sekwencji z danych wejściowych.

  • Uruchom dowolny z dostępnych algorytmów klastrowania.

  • Pobierz dane w klastrze.

Uruchamiam Hadoop

Mahout współpracuje z Hadoop, dlatego upewnij się, że serwer Hadoop działa.

$ cd HADOOP_HOME/bin
$ start-all.sh

Przygotowywanie katalogów plików wejściowych

Utwórz katalogi w systemie plików Hadoop do przechowywania pliku wejściowego, plików sekwencji i danych klastrowych, używając następującego polecenia:

$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq

Możesz sprawdzić, czy katalog został utworzony za pomocą interfejsu internetowego Hadoop w następującym adresie URL - http://localhost:50070/

Daje dane wyjściowe, jak pokazano poniżej:

Kopiowanie pliku wejściowego do HDFS

Teraz skopiuj plik danych wejściowych z systemu plików Linux do katalogu mahout_data w systemie plików Hadoop, jak pokazano poniżej. Załóżmy, że plik wejściowy to mydata.txt i znajduje się w katalogu / home / Hadoop / data /.

$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/

Przygotowanie pliku sekwencji

Mahout udostępnia narzędzie do konwersji podanego pliku wejściowego do formatu pliku sekwencji. To narzędzie wymaga dwóch parametrów.

  • Katalog pliku wejściowego, w którym znajdują się oryginalne dane.
  • Katalog pliku wyjściowego, w którym mają być przechowywane dane klastrowe.

Poniżej podano podpowiedź dla kornaka seqdirectory użyteczność.

Step 1:Przejdź do katalogu domowego Mahout. Możesz uzyskać pomoc dotyczącą narzędzia, jak pokazano poniżej:

[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

Wygeneruj plik sekwencji za pomocą narzędzia, używając następującej składni:

mahout seqdirectory -i <input file path> -o <output directory>

Example

mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/

Algorytmy grupowania

Mahout obsługuje dwa główne algorytmy grupowania, a mianowicie:

  • Grupowanie baldachimu
  • Klastry K-średnich

Grupowanie baldachimu

Grupowanie baldachimów jest prostą i szybką techniką używaną przez Mahouta do tworzenia klastrów. Obiekty będą traktowane jako punkty w czystej przestrzeni. Technika ta jest często używana jako pierwszy krok w innych technikach grupowania, takich jak grupowanie k-średnich. Możesz uruchomić zadanie Canopy, używając następującej składni:

mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>

Zadanie Canopy wymaga katalogu pliku wejściowego z plikiem sekwencji i katalogiem wyjściowym, w którym mają być przechowywane dane klastrowe.

Example

mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30

Otrzymasz klastrowane dane wygenerowane w podanym katalogu wyjściowym.

Grupowanie środków K

Grupowanie k-średnich jest ważnym algorytmem grupowania. Algorytm grupowania k w k-średnich reprezentuje liczbę klastrów, na które mają zostać podzielone dane. Na przykład wartość k określona dla tego algorytmu jest wybrana jako 3, algorytm podzieli dane na 3 klastry.

Każdy obiekt będzie reprezentowany jako wektor w przestrzeni. Początkowo algorytm wybiera losowo k punktów i traktuje je jako centra, a każdy obiekt najbliżej każdego z nich jest skupiony. Istnieje kilka algorytmów pomiaru odległości, a użytkownik powinien wybrać żądany.

Creating Vector Files

  • W przeciwieństwie do algorytmu Canopy, algorytm k-średnich wymaga plików wektorowych jako danych wejściowych, dlatego musisz tworzyć pliki wektorowe.

  • Aby wygenerować pliki wektorowe z formatu pliku sekwencji, Mahout udostępnia rozszerzenie seq2parse użyteczność.

Poniżej podano niektóre opcje seq2parseużyteczność. Twórz pliki wektorowe, korzystając z tych opcji.

$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.

Po utworzeniu wektorów przejdź do algorytmu k-średnich. Składnia do uruchomienia zadania k-średnich jest następująca:

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>

Zadanie klastrowania K-średnich wymaga katalogu wektorów wejściowych, katalogu klastrów wyjściowych, miary odległości, maksymalnej liczby iteracji do wykonania oraz liczby całkowitej reprezentującej liczbę klastrów, na które mają zostać podzielone dane wejściowe.

Co to jest klasyfikacja?

Klasyfikacja to technika uczenia maszynowego, która wykorzystuje znane dane do określenia, jak nowe dane powinny zostać sklasyfikowane w zestawie istniejących kategorii. Na przykład,

  • Aplikacja iTunes używa klasyfikacji do przygotowywania list odtwarzania.

  • Dostawcy usług pocztowych, tacy jak Yahoo! a Gmail używa tej techniki do decydowania, czy nowa wiadomość powinna zostać sklasyfikowana jako spam. Algorytm kategoryzacji uczy się, analizując nawyki użytkowników związane z oznaczaniem niektórych wiadomości jako spamu. Na tej podstawie klasyfikator decyduje, czy przyszła poczta powinna trafić do Twojej skrzynki odbiorczej, czy do folderu ze spamem.

Jak działa klasyfikacja

Klasyfikując zadany zbiór danych, system klasyfikatora wykonuje następujące czynności:

  • Początkowo nowy model danych jest przygotowywany przy użyciu dowolnego algorytmu uczącego.
  • Następnie testowany jest przygotowany model danych.
  • Następnie ten model danych jest używany do oceny nowych danych i określenia ich klasy.

Zastosowania klasyfikacji

  • Credit card fraud detection- Mechanizm klasyfikacji służy do przewidywania oszustw związanych z kartami kredytowymi. Korzystając z historycznych informacji o poprzednich oszustwach, klasyfikator może przewidzieć, które przyszłe transakcje mogą przekształcić się w oszustwa.

  • Spam e-mails - W zależności od cech poprzednich wiadomości spamowych klasyfikator określa, czy nowo napotkana wiadomość e-mail powinna zostać wysłana do folderu spamu.

Naiwny klasyfikator Bayesa

Mahout używa algorytmu klasyfikatora Naive Bayes. Wykorzystuje dwie implementacje:

  • Rozproszona klasyfikacja Bayesa naiwnego
  • Uzupełniająca klasyfikacja Bayesa Naive

Naiwny Bayes to prosta technika konstruowania klasyfikatorów. Nie jest to pojedynczy algorytm do uczenia takich klasyfikatorów, ale rodzina algorytmów. Klasyfikator Bayesa tworzy modele do klasyfikowania wystąpień problemów. Klasyfikacje te są dokonywane na podstawie dostępnych danych.

Zaletą naiwnego Bayesa jest to, że wymaga on jedynie niewielkiej ilości danych szkoleniowych do oszacowania parametrów niezbędnych do klasyfikacji.

W przypadku niektórych typów modeli prawdopodobieństwa naiwne klasyfikatory Bayesa można bardzo skutecznie szkolić w nadzorowanym środowisku uczenia się.

Pomimo swoich nadmiernie uproszczonych założeń, naiwne klasyfikatory Bayesa działały całkiem dobrze w wielu skomplikowanych sytuacjach rzeczywistych.

Procedura klasyfikacji

Aby wdrożyć klasyfikację, należy wykonać następujące kroki:

  • Wygeneruj przykładowe dane
  • Utwórz pliki sekwencji z danych
  • Konwertuj pliki sekwencji na wektory
  • Trenuj wektory
  • Przetestuj wektory

Krok 1: Wygeneruj przykładowe dane

Wygeneruj lub pobierz dane do sklasyfikowania. Na przykład możesz pobrać plik20 newsgroups przykładowe dane z linku: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Utwórz katalog do przechowywania danych wejściowych. Pobierz przykład, jak pokazano poniżej.

$ mkdir classification_example
$ cd classification_example
$tar xzvf 20news-bydate.tar.gz
wget http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Krok 2: Utwórz pliki sekwencji

Utwórz plik sekwencji z przykładu przy użyciu seqdirectoryużyteczność. Składnia do generowania sekwencji jest podana poniżej:

mahout seqdirectory -i <input file path> -o <output directory>

Krok 3: Konwertuj pliki sekwencji na wektory

Utwórz pliki wektorowe z plików sekwencji za pomocą seq2parseużyteczność. Opcjeseq2parse użyteczność podano poniżej:

$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.

Krok 4: Wytrenuj wektory

Trenuj wygenerowane wektory przy użyciu trainnbużyteczność. Opcje do użyciatrainnb użyteczność podano poniżej:

mahout trainnb
 -i ${PATH_TO_TFIDF_VECTORS}
 -el
 -o ${PATH_TO_MODEL}/model
 -li ${PATH_TO_MODEL}/labelindex
 -ow
 -c

Krok 5: Przetestuj wektory

Przetestuj wektory za pomocą testnbużyteczność. Opcje do użyciatestnb użyteczność podano poniżej:

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