Лучший способ приблизиться к элементной совместной фильтрации на основе сходства с Жакаром (используя Python)? - PullRequest
0 голосов
/ 13 марта 2020

Я работаю над системой рекомендаций, которая рекомендует популярных пользователей Twitter (PTU) «нормальным» пользователям Twitter (NTU). Является ли пользователь популярным или нет, определяется количеством упоминаний, полученных им в период сбора данных. Система пытается предсказать 10 лучших PTU, которым NTU может следовать, основываясь на a) PTU, за которыми уже следует NTU, и b) сходстве Jaccard между всеми PTU.

Обзор данных:

  • Коллекция NTU и PTU, за которыми они следуют
  • Оценка сходства по Jaccard всех пар PTU

До сих пор я пробовал два метода, которые я описал ниже. Однако я не очень доволен их результатами, и мне любопытно, как бы вы подошли к такому вопросу. Их точность основана на золотом стандарте; если 10 лучших PTU, рекомендованных моей системой, содержат пользователя в золотом стандарте, это считается как рекомендовано правильно.

Метод 1 (~ 12% правильно)

  1. Для данного NTU, извлеките все PTU, за которыми он / она следует
  2. Для каждого PTU, за которым следует NTU, суммируйте оценки сходства (Jaccard) между этим PTU и каждым другим PTU в наборе данных и вычислите среднее .
  3. Из всех PTU, за которыми следует NTU, выберите PTU с наибольшим средним сходством.
  4. Сравните сходства этого PTU со всеми другими PTU в наборе данных и ранжируйте их по высокому сходству. до низкого сходства
  5. Выберите 10 лучших PTU с наибольшим сходством и порекомендуйте их для NTU.

Метод 2 (~ 23% правильно)

  1. Для данного NTU извлеките все PTU, за которыми он / она следует, и все PTU, за которыми он / она не следует
  2. Для каждого непроверенного PTU суммируйте сходства с каждым последующим PTU
  3. Позиция не-фол понизили PTU на основании их сходства с последующими PTU и рекомендуют лучшие 10 NTU.
...