Как я могу использовать SVD, чтобы он учитывал скрытые факторы? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь создать простую систему рекомендаций для книг , где у меня нет никаких оценок (нет комментариев, нет лайков, нет 1-5 звездочек, ...).

У меня есть DataFrame, который выглядит примерно так:

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

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

Поскольку у меня нет никакой оценки, я ' я пытаюсь использовать купленный или не купленный в качестве основной информации для алгоритма, поэтому у меня будет матрица, которая выглядит следующим образом:

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

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

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

Одна, представляющая особенности книги -

genre        fantasy   kids   action   war             
product                                                                                           
2345          1.0      1.0     0.0     0.0     
897           1.0      0.0     0.0     0.0   
86833         0.0      0.0     0.0     0.0  

И другая, представляющая отношение между пользователями и функциями книги (принимая во внимание только те книги, которые пользователь купил) -

genre        fantasy   kids   action   war             
username                                                                                           
45michael      1.0      0.0    1.0     1.0
kerrigan       0.0      0.0    1.0     1.0

Как реализовать SVD, чтобы он учитывал эти две матрицы для прогнозирования окончательных результатов?

...