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

Существует DBUnit. Это не позволит Вам тестировать свой код jdbc без базы данных, но кажется, что Вы могли представить различный набор покупок путем эмуляции базы данных.

8
задан Charles 8 December 2013 в 18:13
поделиться

3 ответа

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

Входные данные:

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

Вывод:

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

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

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

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

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

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

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

11
ответ дан 3 November 2019 в 14:38
поделиться

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

8
ответ дан 3 November 2019 в 14:38
поделиться

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

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

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

Линейная алгебра - не единственный путь к спасению;

5
ответ дан 3 November 2019 в 14:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: