PageRank для системы рекомендаций (взвешенный двудольный график) - PullRequest
0 голосов
/ 27 июня 2019

У меня есть пользователи, и у них есть связанные навыки, которые оцениваются от 0 до 10 (0 - ужасно, 10 - потрясающе), например:

Desc

Есть пользователь UA (вверху слева), и у него есть два соответствующих навыка SA (вверху справа) и SC (внизу справа). Аналогично, в UB есть SB, а в UC - SC.

Каждый навык для пользователя имеет рейтинг (например, UA SA равен 9/10, UA SC 8/10 и UC SC 7/10).

Я хочу реализовать поиск на этом графике - например, , учитывая, что я ищу людей с навыком SC, я хочу найти, кто из существующих пользователей лучше всего подходит.

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

  1. Исходя из навыка, к которому относится запрос, оставьте только тех пользователей, у которых есть связанные навыки (в нашем примере мы ищем SC , поэтому мы оставляем только UA и UC и удалите UB и его ребер к навыкам из графика)
  2. Каким-то образом ранжировать пользователей с помощью PageRank.

Я также нашел эту библиотеку python под названием networkX. Кто-нибудь знает, возможно ли решить эту проблему с помощью этой библиотеки?

1 Ответ

0 голосов
/ 27 июня 2019

Я думаю, что вам, возможно, придется привести более сложный пример или объяснить, какова ваша цель.PageRank кажется более сложным, чем необходимо.Похоже, что вам просто нужно найти пользователя лучше всего с навыком в вопросе:

users = {
    'userA': {'skillA': 8, 'skillC': 7},
    'userB': {'skillB': 9},
    'userC': {'skillC': 8}
}

def find_best(skill):
    return sorted([(skills[skill], name) for name, skills in users.items() if skill in skills])[-1]

Пример:

>>> find_best('skillC')
(8, 'userC')
...