Учебники

Mahout — Краткое руководство

Mahout — Введение

Мы живем в эпоху, когда информация доступна в изобилии. Информационная перегрузка масштабируется до такой высоты, что иногда становится трудно управлять нашими маленькими почтовыми ящиками! Представьте себе объем данных и записей, которые некоторые популярные сайты (такие как Facebook, Twitter и Youtube) должны собирать и управлять ими ежедневно. Нередко даже менее известные сайты получают огромное количество информации в больших количествах.

Обычно мы применяем алгоритмы интеллектуального анализа данных, чтобы анализировать объемные данные, выявлять тенденции и делать выводы. Однако ни один алгоритм анализа данных не может быть настолько эффективным, чтобы обрабатывать очень большие наборы данных и быстро получать результаты, если только вычислительные задачи не выполняются на нескольких компьютерах, распределенных в облаке.

Теперь у нас есть новые фреймворки, которые позволяют разбить вычислительную задачу на несколько сегментов и запустить каждый сегмент на другой машине. Mahout — это такая среда интеллектуального анализа данных, которая обычно работает в сочетании с инфраструктурой Hadoop на заднем плане для управления огромными объемами данных.

Что такое Apache Mahout?

Махоут это тот, кто водит слона как своего хозяина. Название происходит от его тесной связи с Apache Hadoop, который использует слона в качестве логотипа.

Hadoop — это платформа с открытым исходным кодом от Apache, которая позволяет хранить и обрабатывать большие данные в распределенной среде на кластерах компьютеров с использованием простых моделей программирования.

Apache Mahout — проект с открытым исходным кодом, который в основном используется для создания масштабируемых алгоритмов машинного обучения. Он реализует популярные методы машинного обучения, такие как:

  • Рекомендация
  • классификация
  • Кластеризация

Apache Mahout начался как подпроект Apache’s Lucene в 2008 году. В 2010 году Mahout стал проектом Apache высшего уровня.

Особенности Mahout

Примитивные особенности Apache Mahout перечислены ниже.

  • Алгоритмы Mahout написаны поверх Hadoop, поэтому он хорошо работает в распределенной среде. Mahout использует библиотеку Apache Hadoop для эффективного масштабирования в облаке.

  • Mahout предлагает кодировщику готовую к использованию среду для выполнения задач интеллектуального анализа данных на больших объемах данных.

  • Mahout позволяет приложениям эффективно и быстро анализировать большие наборы данных.

  • Включает несколько реализаций кластеризации с поддержкой MapReduce, таких как k-средних, нечетких k-средних, Canopy, Dirichlet и Mean-Shift.

  • Поддержка распределенных наивных байесовских и дополнительных наивных байесовских классификаций.

  • Поставляется с распределенными функциями фитнес-функций для эволюционного программирования.

  • Включает матричные и векторные библиотеки.

Алгоритмы Mahout написаны поверх Hadoop, поэтому он хорошо работает в распределенной среде. Mahout использует библиотеку Apache Hadoop для эффективного масштабирования в облаке.

Mahout предлагает кодировщику готовую к использованию среду для выполнения задач интеллектуального анализа данных на больших объемах данных.

Mahout позволяет приложениям эффективно и быстро анализировать большие наборы данных.

Включает несколько реализаций кластеризации с поддержкой MapReduce, таких как k-средних, нечетких k-средних, Canopy, Dirichlet и Mean-Shift.

Поддержка распределенных наивных байесовских и дополнительных наивных байесовских классификаций.

Поставляется с распределенными функциями фитнес-функций для эволюционного программирования.

Включает матричные и векторные библиотеки.

Приложения Mahout

  • Такие компании, как Adobe, Facebook, LinkedIn, Foursquare, Twitter и Yahoo используют Mahout для внутреннего использования.

  • Foursquare поможет вам найти места, еду и развлечения, доступные в определенном районе. Он использует механизм рекомендации Mahout.

  • Twitter использует Mahout для моделирования интересов пользователей.

  • Yahoo! использует Mahout для майнинга.

Такие компании, как Adobe, Facebook, LinkedIn, Foursquare, Twitter и Yahoo используют Mahout для внутреннего использования.

Foursquare поможет вам найти места, еду и развлечения, доступные в определенном районе. Он использует механизм рекомендации Mahout.

Twitter использует Mahout для моделирования интересов пользователей.

Yahoo! использует Mahout для майнинга.

Mahout — машинное обучение

Apache Mahout — это масштабируемая библиотека машинного обучения, которая позволяет разработчикам использовать оптимизированные алгоритмы. Mahout реализует популярные методы машинного обучения, такие как рекомендации, классификация и кластеризация. Поэтому целесообразно иметь краткий раздел, посвященный машинному обучению, прежде чем мы пойдем дальше.

Что такое машинное обучение?

Машинное обучение — это отрасль науки, которая занимается программированием систем таким образом, что они автоматически учатся и совершенствуются с опытом. Здесь обучение означает распознавание и понимание входных данных и принятие мудрых решений на основе предоставленных данных.

Очень трудно удовлетворить все решения, основанные на всех возможных входах. Для решения этой проблемы разработаны алгоритмы. Эти алгоритмы строят знания из конкретных данных и прошлого опыта с принципами статистики, теории вероятностей, логики, комбинаторной оптимизации, поиска, обучения с подкреплением и теории управления.

Разработанные алгоритмы составляют основу различных приложений, таких как:

  • Обработка зрения
  • Обработка языка
  • Прогнозирование (например, тенденции фондового рынка)
  • Распознавание образов
  • Игры
  • Сбор данных
  • Экспертные системы
  • робототехника

Машинное обучение является обширной областью, и оно выходит за рамки этого учебного пособия, чтобы охватить все его функции. Существует несколько способов реализации методов машинного обучения, однако наиболее распространенными из них являются контролируемое и неконтролируемое обучение .

Контролируемое обучение

Контролируемое обучение касается изучения функции на основе доступных данных обучения. Контролируемый алгоритм обучения анализирует данные обучения и выдает предполагаемую функцию, которую можно использовать для отображения новых примеров. Типичные примеры контролируемого обучения включают в себя:

  • классифицировать электронные письма как спам,
  • маркировка веб-страниц в зависимости от их содержания и
  • распознавание голоса.

Существует множество контролируемых алгоритмов обучения, таких как нейронные сети, машины опорных векторов (SVM) и наивные байесовские классификаторы. Махоут реализует наивный байесовский классификатор.

Обучение без учителя

Неподготовленное обучение имеет смысл немаркированных данных, не имея предварительно определенного набора данных для его обучения. Неподготовленное обучение — чрезвычайно мощный инструмент для анализа доступных данных и поиска закономерностей и тенденций. Он чаще всего используется для кластеризации аналогичных входных данных в логические группы. Общие подходы к обучению без учителя включают в себя:

  • K-средства
  • самоорганизующиеся карты и
  • иерархическая кластеризация

Рекомендация

Рекомендация — это популярный метод, который предоставляет подробные рекомендации, основанные на информации пользователя, такой как предыдущие покупки, клики и оценки.

  • Amazon использует эту технику для отображения списка рекомендуемых элементов, которые могут вас заинтересовать, и извлечения информации из ваших прошлых действий. За Amazon работают механизмы рекомендации, позволяющие фиксировать поведение пользователей и рекомендовать выбранные элементы на основе ваших предыдущих действий.

  • Facebook использует метод рекомендации, чтобы идентифицировать и рекомендовать «список людей, которых вы, возможно, знаете».

Amazon использует эту технику для отображения списка рекомендуемых элементов, которые могут вас заинтересовать, и извлечения информации из ваших прошлых действий. За Amazon работают механизмы рекомендации, позволяющие фиксировать поведение пользователей и рекомендовать выбранные элементы на основе ваших предыдущих действий.

Facebook использует метод рекомендации, чтобы идентифицировать и рекомендовать «список людей, которых вы, возможно, знаете».

Рекомендация

классификация

Классификация, также известная как категоризация , представляет собой метод машинного обучения, который использует известные данные для определения того, как новые данные должны быть классифицированы в набор существующих категорий. Классификация является формой контролируемого обучения.

  • Поставщики почтовых услуг, такие как Yahoo! и Gmail использует эту технику, чтобы решить, следует ли классифицировать новое письмо как спам. Алгоритм категоризации обучается, анализируя привычки пользователей помечать определенные письма как спам. Исходя из этого, классификатор решает, следует ли отправлять будущие письма в папку «Входящие» или в папку «Спам».

  • Приложение iTunes использует классификацию для подготовки плейлистов.

Поставщики почтовых услуг, такие как Yahoo! и Gmail использует эту технику, чтобы решить, следует ли классифицировать новое письмо как спам. Алгоритм категоризации обучается, анализируя привычки пользователей помечать определенные письма как спам. Исходя из этого, классификатор решает, следует ли отправлять будущие письма в папку «Входящие» или в папку «Спам».

Приложение iTunes использует классификацию для подготовки плейлистов.

классификация

Кластеризация

Кластеризация используется для формирования групп или кластеров похожих данных на основе общих характеристик. Кластеризация — это форма обучения без учителя.

  • Поисковые системы, такие как Google и Yahoo! использовать методы кластеризации для группировки данных с похожими характеристиками.

  • Группы новостей используют методы кластеризации для группировки различных статей на основе связанных тем.

Поисковые системы, такие как Google и Yahoo! использовать методы кластеризации для группировки данных с похожими характеристиками.

Группы новостей используют методы кластеризации для группировки различных статей на основе связанных тем.

Механизм кластеризации полностью просматривает входные данные и, основываясь на характеристиках данных, решает, в какой кластер его следует сгруппировать. Посмотрите на следующий пример.

Кластеризация

Наша библиотека учебных пособий содержит темы на различные темы. Когда мы получаем новое учебное пособие в TutorialsPoint, оно обрабатывается механизмом кластеризации, который на основе своего содержимого решает, куда его следует сгруппировать.

Махоут — Окружающая среда

В этой главе рассказывается, как настроить mahout. Java и Hadoop являются обязательными условиями mahout. Ниже приведены шаги для загрузки и установки Java, Hadoop и Mahout.

Настройка перед установкой

Перед установкой Hadoop в среду Linux нам нужно настроить Linux с помощью ssh (Secure Shell). Выполните шаги, указанные ниже, для настройки среды Linux.

Создание пользователя

Рекомендуется создать отдельного пользователя для Hadoop, чтобы изолировать файловую систему Hadoop от файловой системы Unix. Следуйте инструкциям ниже, чтобы создать пользователя:

  • Откройте root с помощью команды «su».

  • Создайте пользователя из учетной записи root с помощью команды «useradd username» .

  • Теперь вы можете открыть существующую учетную запись пользователя с помощью команды «su username» .

  • Откройте терминал Linux и введите следующие команды, чтобы создать пользователя.

Откройте root с помощью команды «su».

Теперь вы можете открыть существующую учетную запись пользователя с помощью команды «su username» .

Откройте терминал Linux и введите следующие команды, чтобы создать пользователя.

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

Настройка SSH и генерация ключей

Настройка SSH требуется для выполнения различных операций в кластере, таких как запуск, остановка и операции распределенной оболочки демона. Для аутентификации разных пользователей Hadoop требуется предоставить пару открытого / закрытого ключа для пользователя Hadoop и поделиться ею с разными пользователями.

Следующие команды используются для генерации пары «ключ-значение» с использованием SSH, копирования открытых ключей в виде id_rsa.pub в Authorized_keys и предоставления прав владельца, чтения и записи в файл авторизованных ключей соответственно.

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

Проверка SSH

ssh localhost

Установка Java

Java является основной предпосылкой для Hadoop и HBase. Прежде всего, вы должны проверить существование Java в вашей системе, используя «java -version». Синтаксис команды версии Java приведен ниже.

$ java -version

Это должно привести к следующему выводу.

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)

Если у вас не установлена ​​Java в вашей системе, выполните следующие шаги для установки Java.

Шаг 1

Загрузите Java (JDK <последняя версия> — X64.tar.gz), перейдя по следующей ссылке: Oracle

Затем jdk-7u71-linux-x64.tar.gz загружается в вашу систему.

Шаг 2

Как правило, загруженный файл Java находится в папке «Загрузки». Проверьте его и извлеките файл jdk-7u71-linux-x64.gz, используя следующие команды.

$ 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

Шаг 3

Чтобы сделать Java доступным для всех пользователей, вам нужно переместить его в каталог «/ usr / local /». Откройте root и введите следующие команды.

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

Шаг 4

Для настройки переменных PATH и JAVA_HOME добавьте следующие команды в файл ~ / .bashrc .

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

Теперь проверьте команду java -version из терминала, как описано выше.

Загрузка Hadoop

После установки Java вам необходимо сначала установить Hadoop. Проверьте существование Hadoop с помощью команды «Hadoop version», как показано ниже.

hadoop version

Он должен произвести следующий вывод:

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

Если ваша система не может найти Hadoop, загрузите Hadoop и установите его в своей системе. Следуйте приведенным ниже командам, чтобы сделать это.

Загрузите и извлеките hadoop-2.6.0 из программного обеспечения apache с помощью следующих команд.

$ 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

Установите Hadoop в любом из необходимых режимов. Здесь мы демонстрируем функциональность HBase в псевдораспределенном режиме, поэтому установите Hadoop в псевдораспределенном режиме.

Следуйте приведенным ниже инструкциям, чтобы установить Hadoop 2.4.1 в вашей системе.

Шаг 1: Настройка Hadoop

Вы можете установить переменные среды Hadoop, добавив следующие команды в файл ~ / .bashrc .

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

Теперь примените все изменения в работающей в данный момент системе.

$ source ~/.bashrc

Шаг 2: Конфигурация Hadoop

Вы можете найти все файлы конфигурации Hadoop в папке «$ HADOOP_HOME / etc / hadoop». Необходимо внести изменения в эти файлы конфигурации в соответствии с вашей инфраструктурой Hadoop.

$ cd $HADOOP_HOME/etc/hadoop

Для разработки программ Hadoop на Java вам необходимо сбросить переменные среды Java в файле hadoop-env.sh , заменив значение JAVA_HOME расположением Java в вашей системе.

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

Ниже приведен список файлов, которые вы должны отредактировать для настройки Hadoop.

ядро-site.xml

Файл core-site.xml содержит такую ​​информацию, как номер порта, используемый для экземпляра Hadoop, память, выделенная для файловой системы, лимит памяти для хранения данных и размер буферов чтения / записи.

Откройте core-site.xml и добавьте следующее свойство между тегами <configuration>, </ configuration>:

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

HDFS-site.xm

Файл hdfs-site.xml содержит такую ​​информацию, как значение данных репликации, путь namenode и пути datanode вашей локальной файловой системы. Это место, где вы хотите хранить инфраструктуру Hadoop.

Допустим, следующие данные:

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

Откройте этот файл и добавьте следующие свойства между тегами <configuration>, </ configuration> в этом файле.

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

Примечание. В приведенном выше файле все значения свойств определены пользователем. Вы можете вносить изменения в соответствии с вашей инфраструктурой Hadoop.

mapred-site.xml

Этот файл используется для настройки пряжи в Hadoop. Откройте файл mapred-site.xml и добавьте следующее свойство между тегами <configuration>, </ configuration> в этом файле.

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

mapred-site.xml

Этот файл используется, чтобы указать, какую платформу MapReduce мы используем. По умолчанию Hadoop содержит шаблон mapred-site.xml. Прежде всего, необходимо скопировать файл из mapred-site.xml.template в файл mapred-site.xml с помощью следующей команды.

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

Откройте файл mapred-site.xml и добавьте следующие свойства между тегами <configuration>, </ configuration> в этом файле.

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

Проверка правильности установки Hadoop

Следующие шаги используются для проверки установки Hadoop.

Шаг 1: Настройка имени узла

Настройте namenode с помощью команды «hdfs namenode -format» следующим образом:

$ cd ~
$ hdfs namenode -format

Ожидаемый результат выглядит следующим образом:

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

Шаг 2: Проверка Hadoop dfs

Следующая команда используется для запуска dfs. Эта команда запускает вашу файловую систему Hadoop.

$ start-dfs.sh

Ожидаемый результат выглядит следующим образом:

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]

Шаг 3: Проверка скрипта пряжи

Следующая команда используется для запуска скрипта пряжи. Выполнение этой команды запустит вашу пряжу демонов.

$ start-yarn.sh

Ожидаемый результат выглядит следующим образом:

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

Шаг 4: Доступ к Hadoop в браузере

Номер порта по умолчанию для доступа к hadoop — 50070. Используйте следующий URL-адрес, чтобы получить службы Hadoop в своем браузере.

http://localhost:50070/

Доступ к Hadoop

Шаг 5. Проверьте все приложения для кластера.

Номер порта по умолчанию для доступа ко всем приложениям кластера — 8088. Используйте следующий URL-адрес, чтобы посетить эту службу.

http://localhost:8088/

Приложения для кластера

Скачать Mahout

Mahout доступен на веб-сайте Mahout . Скачать Mahout можно по ссылке, указанной на сайте. Вот скриншот сайта.

Скачать Mahout

Шаг 1

Загрузите Apache mahout по ссылке http://mirror.nexcess.net/apache/mahout/, используя следующую команду.

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

Тогда mahout-distribution-0.9.tar.gz будет загружен в вашу систему.

Шаг 2

Просмотрите папку, в которой хранится mahout-distribution-0.9.tar.gz, и извлеките загруженный файл JAR, как показано ниже.

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

Репозиторий Maven

Ниже приведен файл pom.xml для сборки Apache Mahout с использованием 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>

Mahout — Рекомендация

В этой главе рассматривается популярная техника машинного обучения, называемая рекомендацией, ее механизмы и способы написания приложения, реализующего рекомендацию Mahout.

Рекомендация

Когда-нибудь задумывались, как Amazon предлагает список рекомендуемых товаров, чтобы привлечь ваше внимание к конкретному продукту, который может вас заинтересовать!

Предположим, вы хотите купить книгу «Mahout в действии» у Amazon:

Mahout в действии

Наряду с выбранным продуктом Amazon также отображает список рекомендуемых элементов, как показано ниже.

Предметы

Такие списки рекомендаций составляются с помощью рекомендательных двигателей . Mahout предоставляет рекомендательные движки нескольких типов, такие как:

  • рекомендации для пользователей,
  • основанные на элементах рекомендации, и
  • несколько других алгоритмов.

Mahout Рекомендательный Двигатель

Mahout имеет нераспределенный механизм рекомендаций, не основанный на Hadoop. Вы должны передать текстовый документ с пользовательскими настройками для элементов. И на выходе этого движка будут оценочные предпочтения конкретного пользователя для других предметов.

пример

Рассмотрим сайт, который продает потребительские товары, такие как мобильные телефоны, гаджеты и их аксессуары. Если мы хотим реализовать возможности Mahout на таком сайте, мы можем создать механизм рекомендации. Этот механизм анализирует данные о прошлых покупках пользователей и рекомендует новые продукты на его основе.

Компоненты, предоставляемые Mahout для создания механизма рекомендации:

  • Модель данных
  • UserSimilarity
  • ItemSimilarity
  • UserNeighborhood
  • Recommender

Из хранилища данных модель данных подготавливается и передается в качестве входных данных в механизм рекомендации. Движок Recommender генерирует рекомендации для конкретного пользователя. Ниже приведена архитектура рекомендательного движка.

Архитектура Рекомендательного Движка

Рекомендательный Двигатель

Построение Рекомендатора с использованием Mahout

Вот шаги для разработки простого рекомендателя:

Шаг 1: Создать объект DataModel

Для конструктора класса PearsonCorrelationSimility требуется объект модели данных, в котором содержится файл, содержащий сведения о продукте «Пользователи», «Элементы» и «Предпочтения». Вот пример файла модели данных:

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

Для объекта DataModel требуется объект file, который содержит путь к входному файлу. Создайте объект DataModel, как показано ниже.

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

Шаг 2: Создайте объект подобия пользователя

Создайте объект UserSdentifity, используя класс PearsonCorrelationSimility, как показано ниже:

UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);

Шаг 3: Создать объект UserNeighborhood

Этот объект вычисляет «окрестность» пользователей, как данный пользователь. Есть два типа окрестностей:

  • NearestNUserNeighborhood — этот класс вычисляет окрестность, состоящую из ближайших n пользователей к данному пользователю. «Ближайший» определяется данным пользовательским сходством.

  • ThresholdUserNeighborhood — этот класс вычисляет окрестность, состоящую из всех пользователей, чье сходство с данным пользователем соответствует или превышает определенный порог. Сходство определяется данным пользовательским сходством.

NearestNUserNeighborhood — этот класс вычисляет окрестность, состоящую из ближайших n пользователей к данному пользователю. «Ближайший» определяется данным пользовательским сходством.

ThresholdUserNeighborhood — этот класс вычисляет окрестность, состоящую из всех пользователей, чье сходство с данным пользователем соответствует или превышает определенный порог. Сходство определяется данным пользовательским сходством.

Здесь мы используем ThresholdUserNeighborhood и устанавливаем предел предпочтения 3,0.

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

Шаг 4: Создать Рекомендатор Объект

Создайте объект UserbasedRecomender . Передайте все созданные выше объекты его конструктору, как показано ниже.

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

Шаг 5: Рекомендовать товары пользователю

Порекомендуйте продукты пользователю, используя метод require () интерфейса Recommender . Этот метод требует двух параметров. Первый представляет собой идентификатор пользователя, которому мы должны отправить рекомендации, а второй представляет количество рекомендаций, которые должны быть отправлены. Вот использование метода Recommender () :

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

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

Пример программы

Ниже приведен пример программы для установки рекомендаций. Подготовьте рекомендации для пользователя с идентификатором пользователя 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){}
      
   }
  }

Скомпилируйте программу, используя следующие команды:

javac Recommender.java
java Recommender

Он должен произвести следующий вывод:

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

Mahout — кластеризация

Кластеризация — это процедура организации элементов или элементов данной коллекции в группы на основе сходства между элементами. Например, приложения, связанные с публикацией новостей в Интернете, группируют свои новостные статьи с помощью кластеризации.

Приложения кластеризации

  • Кластеризация широко используется во многих приложениях, таких как исследование рынка, распознавание образов, анализ данных и обработка изображений.

  • Кластеризация может помочь маркетологам обнаружить отдельные группы на основе своих клиентов. И они могут охарактеризовать свои группы клиентов на основе моделей покупок.

  • В области биологии его можно использовать для выведения таксономий растений и животных, классификации генов с аналогичной функциональностью и получения информации о структурах, присущих популяциям.

  • Кластеризация помогает в идентификации областей схожего землепользования в базе данных наблюдения Земли.

  • Кластеризация также помогает в классификации документов в Интернете для обнаружения информации.

  • Кластеризация используется в таких приложениях, как обнаружение мошенничества с кредитными картами.

  • Как функция интеллектуального анализа данных, Cluster Analysis служит инструментом, позволяющим получить представление о распределении данных для наблюдения за характеристиками каждого кластера.

Кластеризация широко используется во многих приложениях, таких как исследование рынка, распознавание образов, анализ данных и обработка изображений.

Кластеризация может помочь маркетологам обнаружить отдельные группы на основе своих клиентов. И они могут охарактеризовать свои группы клиентов на основе моделей покупок.

В области биологии его можно использовать для выведения таксономий растений и животных, классификации генов с аналогичной функциональностью и получения информации о структурах, присущих популяциям.

Кластеризация помогает в идентификации областей схожего землепользования в базе данных наблюдения Земли.

Кластеризация также помогает в классификации документов в Интернете для обнаружения информации.

Кластеризация используется в таких приложениях, как обнаружение мошенничества с кредитными картами.

Как функция интеллектуального анализа данных, Cluster Analysis служит инструментом, позволяющим получить представление о распределении данных для наблюдения за характеристиками каждого кластера.

Используя Mahout, мы можем кластеризовать данный набор данных. Необходимые шаги следующие:

  • Алгоритм Вам необходимо выбрать подходящий алгоритм кластеризации для группировки элементов кластера.

  • Сходство и различие Необходимо иметь правило для проверки сходства между вновь обнаруженными элементами и элементами в группах.

  • Условие остановки Условие остановки требуется для определения точки, где кластеризация не требуется.

Алгоритм Вам необходимо выбрать подходящий алгоритм кластеризации для группировки элементов кластера.

Сходство и различие Необходимо иметь правило для проверки сходства между вновь обнаруженными элементами и элементами в группах.

Условие остановки Условие остановки требуется для определения точки, где кластеризация не требуется.

Процедура кластеризации

Для кластеризации данных вам необходимо:

  • Запустите сервер Hadoop. Создайте необходимые каталоги для хранения файлов в файловой системе Hadoop. (Создайте каталоги для входного файла, файла последовательности и кластерного вывода в случае навеса).

  • Скопируйте входной файл в файловую систему Hadoop из файловой системы Unix.

  • Подготовьте файл последовательности из входных данных.

  • Запустите любой из доступных алгоритмов кластеризации.

  • Получить кластерные данные.

Запустите сервер Hadoop. Создайте необходимые каталоги для хранения файлов в файловой системе Hadoop. (Создайте каталоги для входного файла, файла последовательности и кластерного вывода в случае навеса).

Скопируйте входной файл в файловую систему Hadoop из файловой системы Unix.

Подготовьте файл последовательности из входных данных.

Запустите любой из доступных алгоритмов кластеризации.

Получить кластерные данные.

Запуск Hadoop

Mahout работает с Hadoop, поэтому убедитесь, что сервер Hadoop запущен и работает.

$ cd HADOOP_HOME/bin
$ start-all.sh

Подготовка каталогов входных файлов

Создайте каталоги в файловой системе Hadoop для хранения входного файла, файлов последовательности и кластерных данных с помощью следующей команды:

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

Вы можете проверить, создан ли каталог, используя веб-интерфейс hadoop по следующему URL-адресу — http: // localhost: 50070 /

Это дает вам вывод, как показано ниже:

Каталоги входных файлов

Копирование входного файла в HDFS

Теперь скопируйте файл входных данных из файловой системы Linux в каталог mahout_data в файловой системе Hadoop, как показано ниже. Предположим, что ваш входной файл mydata.txt и он находится в каталоге / home / Hadoop / data /.

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

Подготовка файла последовательности

Mahout предоставляет вам утилиту для преобразования указанного входного файла в формат файла последовательности. Эта утилита требует двух параметров.

  • Каталог входного файла, в котором находятся исходные данные.
  • Каталог выходного файла, в котором должны храниться кластерные данные.

Ниже приведена подсказка для утилиты mahout seqdirectory .

Шаг 1: Перейдите в домашний каталог Mahout. Вы можете получить помощь утилиты, как показано ниже:

[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

Создайте файл последовательности с помощью утилиты, используя следующий синтаксис:

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

пример

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

Алгоритмы кластеризации

Mahout поддерживает два основных алгоритма кластеризации, а именно:

  • Кластеризация навеса
  • K-означает кластеризацию

Кластеризация навеса

Кластеризация навеса — это простая и быстрая техника, используемая Mahout для кластеризации. Объекты будут рассматриваться как точки в простом пространстве. Этот метод часто используется в качестве начального шага в других методах кластеризации, таких как кластеризация k-средних. Вы можете запустить задание Canopy, используя следующий синтаксис:

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

Для задания Canopy требуется каталог входного файла с файлом последовательности и выходной каталог, в котором должны храниться кластерные данные.

пример

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

Вы получите кластерные данные, сгенерированные в заданном выходном каталоге.

K-означает кластеризацию

Кластеризация K-средних является важным алгоритмом кластеризации. Алгоритм кластеризации k в k-средних представляет количество кластеров, на которые необходимо разделить данные. Например, значение k, указанное для этого алгоритма, выбрано равным 3, алгоритм собирается разделить данные на 3 кластера.

Каждый объект будет представлен как вектор в пространстве. Первоначально k точек будет выбираться алгоритмом случайным образом и обрабатываться как центры, каждый объект, ближайший к каждому центру, группируется. Существует несколько алгоритмов измерения расстояния, и пользователь должен выбрать нужный.

Создание векторных файлов

  • В отличие от алгоритма Canopy, алгоритм k-средних требует ввода векторных файлов, поэтому вы должны создавать векторные файлы.

  • Чтобы сгенерировать векторные файлы из формата файла последовательности, Mahout предоставляет утилиту seq2parse .

В отличие от алгоритма Canopy, алгоритм k-средних требует ввода векторных файлов, поэтому вы должны создавать векторные файлы.

Чтобы сгенерировать векторные файлы из формата файла последовательности, Mahout предоставляет утилиту seq2parse .

Ниже приведены некоторые параметры утилиты seq2parse . Создайте векторные файлы, используя эти параметры.

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

После создания векторов перейдите к алгоритму k-средних. Синтаксис для запуска задания k-means выглядит следующим образом:

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>

Для задания кластеризации K-означает, что требуется каталог входных векторов, каталог выходных кластеров, мера расстояния, максимальное количество итераций, которое необходимо выполнить, и целочисленное значение, представляющее количество кластеров, на которые следует разделить входные данные.

Mahout — классификация

Что такое классификация?

Классификация — это метод машинного обучения, который использует известные данные для определения того, как новые данные должны быть классифицированы в набор существующих категорий. Например,

  • Приложение iTunes использует классификацию для подготовки плейлистов.

  • Поставщики почтовых услуг, такие как Yahoo! и Gmail использует эту технику, чтобы решить, следует ли классифицировать новое письмо как спам. Алгоритм категоризации обучается, анализируя привычки пользователей помечать определенные письма как спам. Исходя из этого, классификатор решает, следует ли отправлять будущие письма в папку «Входящие» или в папку «Спам».

Приложение iTunes использует классификацию для подготовки плейлистов.

Поставщики почтовых услуг, такие как Yahoo! и Gmail использует эту технику, чтобы решить, следует ли классифицировать новое письмо как спам. Алгоритм категоризации обучается, анализируя привычки пользователей помечать определенные письма как спам. Исходя из этого, классификатор решает, следует ли отправлять будущие письма в папку «Входящие» или в папку «Спам».

Как работает классификация

При классификации данного набора данных система классификатора выполняет следующие действия:

  • Первоначально новая модель данных готовится с использованием любого из алгоритмов обучения.
  • Затем подготовленная модель данных проверяется.
  • После этого эта модель данных используется для оценки новых данных и определения их класса.

Классификационные работы

Приложения классификации

  • Обнаружение мошенничества с кредитными картами. Механизм классификации используется для прогнозирования мошенничества с кредитными картами. Используя историческую информацию о предыдущих мошенничествах, классификатор может предсказать, какие будущие транзакции могут превратиться в мошенничества.

  • Спам-сообщения — в зависимости от характеристик предыдущих спам-сообщений, классификатор определяет, следует ли отправлять вновь обнаруженное электронное письмо в папку спама.

Обнаружение мошенничества с кредитными картами. Механизм классификации используется для прогнозирования мошенничества с кредитными картами. Используя историческую информацию о предыдущих мошенничествах, классификатор может предсказать, какие будущие транзакции могут превратиться в мошенничества.

Спам-сообщения — в зависимости от характеристик предыдущих спам-сообщений, классификатор определяет, следует ли отправлять вновь обнаруженное электронное письмо в папку спама.

Наивный байесовский классификатор

Mahout использует алгоритм наивного байесовского классификатора. Он использует две реализации:

  • Распределенная наивная байесовская классификация
  • Дополнительная наивная байесовская классификация

Наивный байесовский метод — простая методика построения классификаторов. Это не единственный алгоритм обучения таких классификаторов, а семейство алгоритмов. Байесовский классификатор создает модели для классификации проблемных экземпляров. Эти классификации сделаны с использованием доступных данных.

Преимущество наивного Байеса заключается в том, что для оценки параметров, необходимых для классификации, требуется лишь небольшой объем обучающих данных.

Для некоторых типов вероятностных моделей наивные байесовские классификаторы можно очень эффективно обучать в условиях контролируемого обучения.

Несмотря на упрощенные предположения, наивные байесовские классификаторы довольно хорошо работали во многих сложных реальных ситуациях.

Порядок классификации

Для реализации классификации необходимо выполнить следующие шаги:

  • Создать пример данных
  • Создать файлы последовательности из данных
  • Преобразовать файлы последовательности в векторы
  • Тренировать векторы
  • Проверьте векторы

Шаг 1: Создать пример данных

Генерация или загрузка данных для классификации. Например, вы можете получить пример 20 групп новостей по следующей ссылке: http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz

Создайте каталог для хранения входных данных. Загрузите пример, как показано ниже.

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

Шаг 2. Создание файлов последовательности

Создайте файл последовательности из примера с помощью утилиты seqdirectory . Синтаксис для генерации последовательности приведен ниже:

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

Шаг 3. Преобразование файлов последовательности в векторы

Создайте векторные файлы из файлов последовательности, используя утилиту seq2parse . Опции утилиты seq2parse приведены ниже:

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

Шаг 4: тренируй векторы

Тренируйте сгенерированные векторы с помощью утилиты trainnb . Варианты использования утилиты trainnb приведены ниже:

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

Шаг 5: Проверьте векторы

Протестируйте векторы с помощью утилиты testnb . Варианты использования утилиты testnb приведены ниже: