Привет.
Моя первая статья на Хабре показала, что не многие знают о библиотеке Mahout. (Может быть, конечно, я в этом ошибаюсь.) Да и ознакомительного материала по этой теме здесь нет. Поэтому я решил написать пост, рассказывающий о возможностях библиотеки. Пара проб пера показали, что лучшим введением в тему будут небольшие выдержки из книги “Mahout in Action” Owen, Anil, Dunning, Friedman. Поэтому я сделал вольный перевод некоторых мест, которые, как мне кажется, хорошо рассказывают об области применения Mahout.
* Здесь и далее в скобках указана глава из книги.
…
Mahout содержит ряд моделей и алгоритмов, многие все еще в разработке или экспериментальной фазе (алгоритмы). На этом раннем этапе жизни проекта, три ключевые темы наиболее заметны: рекомендательные системы (коллаборативная фильтрация), кластеризация и классификация. Это далеко не все что есть в Mahout, но эти темы наиболее заметные и зрелые.
…
В теории Mahout — это проект, открытый для реализации любого вида моделей машинного обучения. На практике в настоящий момент реализованны три ключевых области машинного обучения.
…
Рекомендательные системы – это наиболее узнаваемая модель машинного обучения из используемых сегодня. Вы видите сервисы или сайты которые пытаются рекомендовать книги или фильмы, или статьи, базируясь на ваших предыдущих действиях. Они пытаются выводить вкусы и предпочтения, и идентифицировать неизвестные предметы, которые представляют интерес.
Кластеризация менее очевидна, но оказывается в не менее известных упоминаниях. Как следует из названия, методы кластеризации пытаются группировать большие числа предметов вместе в кластеры, которые имеют общее сходство. Таким образом устанавливают иерархию и порядок в больших или трудных для понимания множествах данных, и таким способом устанавливают интересные закономерности или делают набор данных более легким для понимания.
Кластеризация помогает определять структуру и даже иерархию, в большой коллекции вещей, которую, может быть, даже сложно осмыслить. Предприятия могут использовать эту технику для определения скрытых групп среди пользователей, или разумной организации большой коллекции документов, или определения общих паттернов использования для сайтов используя их логи.
Модели классификации решают является или нет предмет частью определенной категории или есть ли у нее некоторый атрибут. …
Классификация помогает решить соответствует ли новый кусок вводных данных или предмет предыдущим рассмотренным шаблонам; и она часто используется для классификации поведения или шаблона. Это может быть использовано для обнаружения подозрительной сетевой активности или мошенничества. А также для выяснения того, указывает на разочарование или удовлетворение сообщение пользователя.
Каждая из этих моделей работает лучше, когда снабжена большим количеством хороших входных данных. В некоторых случаях, эти методы должны не только работать на больших объемах данных, но должны получать результат быстро, и эти факторы делают масштабируемость главной задачей. Одна из основных причин использовать Mahout это именно масштабируемость.
Как неоднократно отмечается в книге, нет готового рецепта который можно взять и применить к типовой ситуации. Для каждого случая нужно пробовать различные алгоритмы и входные данные. Только поняв суть алгоритмов можно успешно применять библиотеку.
… сейчас мы исследуем простую пользователе-ориентированную рекомендательную систему.
…
Рекомендательная система нуждается во входных данных на которых будут основываться рекомендации. Эти данные принимают форму предпочтений на языке Mahout. Т.к. рекомендательные системы более понятны в ключе рекомандации предметов (items) пользователям, то будем говорить о предпочтении как об ассоциации пользователь – предмет. … Предпочтение состоит из ID пользователя и ID предмета, и обычно числа, выражающего степень предпочтения этого пользователя этому предмету (оценку). ID в Mahout это всегда целые числа. Значение предпочтения может быть любым, главное что большее значение выражает большую положительную привязанность. Например, эти значения могут быть рейтингом по шкале от 1 до 5, где 1 показывает что предмет пользователю не нравится, 5 показывает, что предмет очень нравится.
Создаем файл intro.csv, содержащий информацию userID, itemID, value.
…
Теперь, запустим следующий код.
DataModel хранит и предоставляет доступ ко всем предпочтениям, пользователям и предметам, нужным для вычислений. Реализация UserSimilarity обеспечивает некоторое представление о том, как похожи вкусы пользователей; она может быть основана на одной из множества метрик или вычислений. (метрики описаны в первом посте) Реализация UserNeighborhood определяет понятие группы пользователей, которые наиболее близки к данному пользователю. (Первый параметр 2 – это количество пользователей в этой группе.) Наконец, реализация Recommender связывает предыдущие три компонента вместе, чтобы сделать рекомендации пользователям. Метод recommend(int userId, int number) принимает два параметра: пользователь и количество рекомендаций которые нужно сделать этому пользователю.
Вывод: RecommendedItem [item:XXX, value:Y]. Где Y – прогнозируемая оценка, выставленная пользователем 1 предмету XXX. Именно этот предмет порекомендован польозвателю, т.к. у него самая высокая прогнозируемая оценка.
Моя первая статья на Хабре показала, что не многие знают о библиотеке Mahout. (Может быть, конечно, я в этом ошибаюсь.) Да и ознакомительного материала по этой теме здесь нет. Поэтому я решил написать пост, рассказывающий о возможностях библиотеки. Пара проб пера показали, что лучшим введением в тему будут небольшие выдержки из книги “Mahout in Action” Owen, Anil, Dunning, Friedman. Поэтому я сделал вольный перевод некоторых мест, которые, как мне кажется, хорошо рассказывают об области применения Mahout.
Встречаем Apache Mahout (1)
* Здесь и далее в скобках указана глава из книги.
- Mahout это opensource библиотека для машинного обучения от Apache. Алгоритмы, которые библиотека реализует в совокупности можно назвать машинным обучением или коллективным интеллектом. Это может означать многое, но в настоящий момент это означает в первую очередь рекомендательные системы (коллаборативная фильтрация), кластеризацию и классификацию.
- Mahout масштабируем. Mahout стремиться стать инструментом машинного обучения с возможностью обработки данных на одной или нескольких машинах. В текущей версии Mahout масштабируемые реализации машинного обучения написаны на java, а некоторые части построены на проекте распределенных вычислений Apache Hadoop.
- Mahout это java библиотека. Она не предоставляет пользовательского интерфейса, предупакованного сервера или установщика. Это фреймворк инструментов, предназначенных для использования и адаптации разработчиками.
…
Mahout содержит ряд моделей и алгоритмов, многие все еще в разработке или экспериментальной фазе (алгоритмы). На этом раннем этапе жизни проекта, три ключевые темы наиболее заметны: рекомендательные системы (коллаборативная фильтрация), кластеризация и классификация. Это далеко не все что есть в Mahout, но эти темы наиболее заметные и зрелые.
…
В теории Mahout — это проект, открытый для реализации любого вида моделей машинного обучения. На практике в настоящий момент реализованны три ключевых области машинного обучения.
…
Рекомендательные системы. (1.2.1)
Рекомендательные системы – это наиболее узнаваемая модель машинного обучения из используемых сегодня. Вы видите сервисы или сайты которые пытаются рекомендовать книги или фильмы, или статьи, базируясь на ваших предыдущих действиях. Они пытаются выводить вкусы и предпочтения, и идентифицировать неизвестные предметы, которые представляют интерес.
- Amazon.com это, возможно, наиболее известный сайт в электронной комерции применивший рекомандации. Основываясь на покупках и активности на сайте, амазон рекомендует книги и другие вещи которые могут вызвать интерес.
- Netflix также рекомендует DVD, которые могут быть интересны и предлагают приз в 1М$ для исследователей, которые могут улучшить качество их рекомендаций.
- Социальные сети, такие как Фейсбук, используют варианты рекомендетельных техник для выявления людей, наиболее вероятно подходящих под определение “еще не связанных друзей”.
Кластеризация (1.2.2)
Кластеризация менее очевидна, но оказывается в не менее известных упоминаниях. Как следует из названия, методы кластеризации пытаются группировать большие числа предметов вместе в кластеры, которые имеют общее сходство. Таким образом устанавливают иерархию и порядок в больших или трудных для понимания множествах данных, и таким способом устанавливают интересные закономерности или делают набор данных более легким для понимания.
- Google News группирует новостные статьи по названию, используя технику кластеризации.
- Поисковые механизмы такие как Clusty так же группируют свои поисковые результаты.
- Заказчики могут быть сгруппированы в сегменты (кластера) при помощи техники кластеризации, основанные на атрибутах: доход, местоположение, покупательские привычки.
Кластеризация помогает определять структуру и даже иерархию, в большой коллекции вещей, которую, может быть, даже сложно осмыслить. Предприятия могут использовать эту технику для определения скрытых групп среди пользователей, или разумной организации большой коллекции документов, или определения общих паттернов использования для сайтов используя их логи.
Классификация (1.2.3)
Модели классификации решают является или нет предмет частью определенной категории или есть ли у нее некоторый атрибут. …
- Yahoo! Mail решает является или нет входящее сообщение спамом, основываясь на предшествующих письмах и сообщений на спам от пользователей, а также характеристиках самих писем.
- Google's Picasa и другие приложения для управления фотографиями могут определять область изображения содержащую человеческое лицо.
- Программа оптического распознавания символов классифицирует малые области отсканированного текста на отдельные символы.
Классификация помогает решить соответствует ли новый кусок вводных данных или предмет предыдущим рассмотренным шаблонам; и она часто используется для классификации поведения или шаблона. Это может быть использовано для обнаружения подозрительной сетевой активности или мошенничества. А также для выяснения того, указывает на разочарование или удовлетворение сообщение пользователя.
Каждая из этих моделей работает лучше, когда снабжена большим количеством хороших входных данных. В некоторых случаях, эти методы должны не только работать на больших объемах данных, но должны получать результат быстро, и эти факторы делают масштабируемость главной задачей. Одна из основных причин использовать Mahout это именно масштабируемость.
Как неоднократно отмечается в книге, нет готового рецепта который можно взять и применить к типовой ситуации. Для каждого случая нужно пробовать различные алгоритмы и входные данные. Только поняв суть алгоритмов можно успешно применять библиотеку.
Запуск первой рекомендательной системы (2.2)
… сейчас мы исследуем простую пользователе-ориентированную рекомендательную систему.
Создание входных данных (2.2.1)
…
Рекомендательная система нуждается во входных данных на которых будут основываться рекомендации. Эти данные принимают форму предпочтений на языке Mahout. Т.к. рекомендательные системы более понятны в ключе рекомандации предметов (items) пользователям, то будем говорить о предпочтении как об ассоциации пользователь – предмет. … Предпочтение состоит из ID пользователя и ID предмета, и обычно числа, выражающего степень предпочтения этого пользователя этому предмету (оценку). ID в Mahout это всегда целые числа. Значение предпочтения может быть любым, главное что большее значение выражает большую положительную привязанность. Например, эти значения могут быть рейтингом по шкале от 1 до 5, где 1 показывает что предмет пользователю не нравится, 5 показывает, что предмет очень нравится.
Создаем файл intro.csv, содержащий информацию userID, itemID, value.
…
Теперь, запустим следующий код.
class RecommenderIntro {
public static void main(String[] args) throws Exception {
DataModel model = new FileDataModel (new File("intro.csv"));
UserSimilarity similarity = new PearsonCorrelationSimilarity (model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood (2, similarity, model);
Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity);
List<RecommendedItem> recommendations = recommender.recommend(1, 1);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
}
DataModel хранит и предоставляет доступ ко всем предпочтениям, пользователям и предметам, нужным для вычислений. Реализация UserSimilarity обеспечивает некоторое представление о том, как похожи вкусы пользователей; она может быть основана на одной из множества метрик или вычислений. (метрики описаны в первом посте) Реализация UserNeighborhood определяет понятие группы пользователей, которые наиболее близки к данному пользователю. (Первый параметр 2 – это количество пользователей в этой группе.) Наконец, реализация Recommender связывает предыдущие три компонента вместе, чтобы сделать рекомендации пользователям. Метод recommend(int userId, int number) принимает два параметра: пользователь и количество рекомендаций которые нужно сделать этому пользователю.
Вывод: RecommendedItem [item:XXX, value:Y]. Где Y – прогнозируемая оценка, выставленная пользователем 1 предмету XXX. Именно этот предмет порекомендован польозвателю, т.к. у него самая высокая прогнозируемая оценка.