В этой главе рассматривается популярная техника машинного обучения, называемая рекомендацией, ее механизмы и способы написания приложения, реализующего рекомендацию Mahout.
Рекомендация
Когда-нибудь задумывались, как Amazon предлагает список рекомендуемых товаров, чтобы привлечь ваше внимание к конкретному продукту, который может вас заинтересовать!
Предположим, вы хотите купить книгу «Mahout в действии» у Amazon:
Наряду с выбранным продуктом 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
Он должен произвести следующий вывод: