Создание коллаборативной системы фильтрации / рекомендаций

Я в процессе разработки веб-сайта, который построен вокруг концепции рекомендации различных предметов пользователям на основе их вкусов. (т. е. элементы, которые они оценили, элементы, добавленные в список избранного и т. д.) Некоторые примеры этого-Amazon, Movielens и Netflix.

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

Я просмотрел несколько публикаций в Grouplens.org, а именно "к масштабируемому алгоритму kNN CF: изучение эффективных приложений кластеризации."(pdf) я довольно хорошо понимаю все, пока страница 5 "генерация предсказаний"

p.s. Я не ищу объяснений тому, что происходит, хотя это может быть полезно, но меня больше интересует математика, которую мне нужно знать. Так я могу ... понять, что происходит.

5 ответов


позвольте мне объяснить процедуру, которую ввели авторы (как я понял):

вход:

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

выход:

  • прогнозирование целевого элемента целевым пользователем

Это можно повторить для группы элементов, а затем мы возвращаем N-верхние элементы (самые высокие прогнозируемые рейтинги)

процедура:
Алгоритм очень похож на наивный KNN метод (поиск всех данных обучения, чтобы найти пользователей с аналогичными рейтингами целевого пользователя, а затем объединить их рейтинги дать прогноз [голосование]).
Этот простой метод не очень хорошо масштабируется, так как количество пользователей/элементов увеличивается.

предлагаемый алгоритм для первой группы пользователей, обучение в K группы (группы людей, которые оценили предметы аналогично), где K N (N - общее количество пользователей).
Затем мы сканируем эти кластеры, чтобы найти, какой из них ближе всего к целевому пользователю (вместо того, чтобы смотреть на все обучение пользователи.)
Наконец мы выбираем l из них, и мы делаем наш прогноз как среднее взвешенное расстояние до тех l кластеры.

обратите внимание, что мера сходства используется соотношение коэффициент, а алгоритм кластеризации является алгоритмом bisecting K-Means. Мы можем просто использовать стандарт kmeans, и мы можем использовать другие показатели сходства, такие как Евклидово расстояние или Косинус расстояние.

первая формула на странице 5-это определение корреляции:

corr(x,y) = (x-mean(x))(y-mean(y)) / std(x)*std(y)

вторая формула-это фактически средневзвешенная:

predRating = sum_i(rating_i * corr(target,user_i)) / sum(corr(target,user_i))
               where i loops over the selected top-l clusters

надеюсь, это немного проясняет ситуацию:)


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


алгоритм интеллектуальной сети (H Marmanis, D Babenko, Manning publishing) - вводный текст по теме. Он также охватывает Поиск концепций, но его основное внимание при классификации, рекомендательных систем и таких. Это должен быть хороший праймер для вашего проекта, позволяющий задавать правильные вопросы и копать глубже, где вещи кажутся более перспективными или практичными в вашей ситуации.

книга включает "обновление" соответствующих математических тем (в основном линейной алгебры), но это обновление минимально; вы будете делать лучше в интернете.

приятный способ обнаружить или вернуться в линейная алгебра это следовать серия лекций профессора Гилберта Стрэнда 18.06 доступно на MIT OpenCourseWare.

линейная алгебра-не единственный способ спасения ;-) вы можете найти полезным освежить Основные понятия статистики, такие как распределение, ковариация, Байесовский вывод...


вы, вероятно, должны знать:

  • линейная алгебра
  • искусственный интеллект / машинное обучение / статистика

идеальный кандидат:

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

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

примерами могут быть:

  • никогда не делайте" плохую " рекомендацию
  • оценка монотонно увеличивается в нескольких параметрах
  • держите дверь открытой для X,Y, Z идея улучшения мы имеем для вниз по линии.

с официальная документация на Abracadabra рекомендательный API, вы начинаете различать:

  • темы: это объекты, которые вы хотите рекомендовать пользователю. Фильм или статья-это, например, тема. Субъекты характеризуются тем, что они имеют определенные атрибуты или содержание, которые различают их между различными предметы.

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

  • пользователи: как следует из названия, это человек, который хочет получить рекомендации определенных предметов. Пользователь создает профиль пользователя по вкусу атрибутов или субъектов (а затем прикрепленных атрибутов).

  • поток Существует общий поток (порядок, в котором все делается), который актуален для любого типа рекомендательной системы, и это также интуитивно легко понимать.

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

вторым шагом является ввод предпочтений пользователя. Вместе с уникальным id пользователя, вы может тренировать рекомендательную систему, любя или не любя определенные предметы или атрибуты. Например, пользователю может быть показан список фильмов, и ему / ей предоставляется возможность дать каждому фильму рейтинг. Кроме того, пользователь может создать профиль, введя атрибуты, которые он предпочитает (например, жанры, ключевые слова, дату выпуска и т. д.). Эта часть действительно зависит от вас, чтобы решить и логику вашего проекта.

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

обратите внимание, что с Abracadabra рекомендательный API вам нужно только отправить HTTP-вызовы API для обучения вашей модели и получения рекомендации. К API можно получить доступ на любом языке, таким образом, с вашего сайта или приложения (Angular, React, Javascript...) или ваш сервер (NodeJS, Curl, Java, Python, Objective-C, Ruby, .NET...).