Я изучал вопрос о том, как разработать гибридную систему рекомендаций для простого набора данных книг. Основная цель - использовать явные данные (покупки) и скрытые факторы ( особенности), чтобы сделать рекомендации, поэтому я, в конце концов, выбрал 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 я разбил набор данных на обучающие и тестовые наборы, но хочу быть Чтобы делать прогнозы для всех пользователей в наборе данных, даже тех, которые используются для обучения, должен ли я сделать весь набор данных обучающим набором? Но что происходит, когда набор данных становится слишком большим для этого случая?