Учебники

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

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