Как делать прогнозы с помощью гибридной рекомендации LightFM? - PullRequest
0 голосов
/ 15 апреля 2020

Я изучал вопрос о том, как разработать гибридную систему рекомендаций для простого набора данных книг. Основная цель - использовать явные данные (покупки) и скрытые факторы ( особенности), чтобы сделать рекомендации, поэтому я, в конце концов, выбрал LightFM в качестве лучшего варианта. Я начал с Surprise, но потом понял, что никак не могу реализовать там модель Matrix Factorization , в которой для прогнозов используются как данные элементов, так и данные пользователей.

Так что мой фрейм данных выглядит примерно так: это (упрощенно):

    number       type   username  product  price        model publishing_dt     author          genres
0        6     access   kerrigan     2345  12.99  printedbook    2020-02-01       john    fantasy,kids
1        4     access   kerrigan      897  14.95  printedbook    2019-03-05      alice         fantasy
2        1  orderline  45michael    86833   2.65        ebook    2020-02-04     joseph      action,war 
3        1  orderline   kerrigan    86833   2.65        ebook    2020-02-04     joseph      action,war
1        1  orderline  45michael      897  14.95  printedbook    2019-03-05      alice         fantasy

Где тип - это классификация доступа, сделанного пользователем: если это был заказ (строка заказа) или если это был просто просмотр (доступ), в типе дела = номер доступа указывает, сколько раз пользователь обращался к книге, а продукт - это уникальный идентификатор книги (я думаю, что другие поля не требуют пояснений).

Я использую куплено или не приобретен в качестве матрицы взаимодействия, поскольку у меня нет какой-либо оценки:

product        2345     897    86833    
username                                                                                           
45michael      0.0      1.0      1.0     
kerrigan       0.0      0.0      1.0  

Основная проблема, которую я обнаружил в Surprise, заключается в том, что он будет использовать только значения этой матрицы для сделать прогнозы, так как 45michael купил 86833 и 897, а Kerrigan также купил 86833, я предполагаю, что он предсказывает, что Kerrigan также купит 897 из-за сходства между обоими пользователями (что не является ошибочным предположением).

Но я бы хотел, чтобы система использовала скрытые факторы, заданные автором и жанрами, вот как я попал на LightFM.

Итак У меня была бы матрица характеристик элементов , объединяющая авторов и жанры:

genre        john    alice   joseph   fantasy   kids   action   war             
product                                                                                           
2345          1.0      0.0      0.0    1.0      1.0     0.0     0.0   
897           0.0      1.0      0.0    1.0      0.0     0.0     0.0     
86833         0.0      0.0      1.0    0.0      0.0     1.0     1.0

и матрица пользовательских функций :

genre        john    alice   joseph   fantasy   kids   action   war             
username                                                                                           
45michael     0.0      1.0      1.0     1.0      0.0    1.0     1.0
kerrigan      0.0      0.0      1.0     0.0      0.0    1.0     1.0

Я пытался следовать этой статье: https://towardsdatascience.com/build-a-machine-learning-recommender-72be2a8f96ed, которая, казалось, покрывала мои фундаментальные проблемы, но так как я никогда не использовал LightFM, мне трудно понять, как определить модель для использования с такого рода данные и создание матриц функций элементов и пользовательских функций кажутся довольно сложными. Могу ли я использовать разреженную матрицу, созданную с помощью scipy в качестве входных данных?

Еще одно сомнение, которое у меня есть (это может показаться основополагающим c знаниями но я значительно новичок в этом мире систем машинного обучения / рекомендаций), что при тестировании библиотеки Surprise я разбил набор данных на обучающие и тестовые наборы, но хочу быть Чтобы делать прогнозы для всех пользователей в наборе данных, даже тех, которые используются для обучения, должен ли я сделать весь набор данных обучающим набором? Но что происходит, когда набор данных становится слишком большим для этого случая?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...