8

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

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

Я просмотрел несколько публикаций по адресу Grouplens.org, в частности «Towards a Scalable kNN CF Algorithm: Exploring Effective Applications of Clustering». (pdf) Я очень хорошо понимаю все, пока страница 5 «Генерация прогноза»

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

ответ

8

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

+0

Спасибо за предложение книги! – John

5

Algorithm of the Intelligent Web (H Марманис, Д. Бабенко, Публикация Мэннинга) - вводный текст в подзаголовке. Он также охватывает поисковые концепции, но основное внимание уделяется классификации, рекомендательным системам и тому подобному. Это должно быть хорошим праймером для вашего проекта, позволяющим задавать правильные вопросы и копать глубже, когда вещи кажутся более перспективными или практичными в вашей ситуации.

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

Приятный способ узнать или вернуться в Линейная алгебра должна следовать за Prof. Gilbert Strand's 18.06 lecture series на MIT OpenCourseWare.

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

+1

Спасибо, я посмотрю на книгу. И спасибо за лекционную серию. – John

10

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

Вход:

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

Выход:

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

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

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

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

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

Первая формула на странице 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 

Надеется, что это проясняет вещи немного :)

+1

Спасибо, это все еще греческий для меня. Однажды я вернусь, и все это будет иметь смысл. :) – John

0

Возможно, вы должны знать:

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

Приятно иметь:

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

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

Примерами могут служить:

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

Из the official documentation в Abracadabra Recommender API, вы начинаете различать:

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

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

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

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

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

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

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

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