如何使用 LightFM 创建模型并进行预测?

数据挖掘 机器学习 Python 推荐系统 python-3.x 矩阵分解
2022-02-24 17:26:23

我一直在研究如何为一个简单的书籍数据集开发一个混合推荐系统,主要目标是同时使用显式数据(购买)和潜在因素(特征)来进行推荐,所以我最终选择了 LightFM 作为最佳选择。我从 Surprise 开始,但后来我意识到我无法在那里实现一个矩阵分解模型,它同时使用项目数据和用户数据进行预测。

所以我的数据框看起来像这样(简化):

    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

其中 type 是用户访问的分类:如果是订单(orderline)或者只是视图(access),在这种情况下 type = access number 表示用户访问图书的次数,和产品是这本书的唯一ID(我认为其他领域是不言自明的)。

我使用购买或未购买作为交互矩阵,因为我没有任何评级:

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 创建的稀疏矩阵作为输入吗?

我的另一个疑问(这似乎是基本知识,但我对这个机器学习/推荐系统世界相当陌生)是我在测试 Surprise 库时一直将数据集分成训练集和测试集,但我想成为能够对数据集中的所有用户进行预测,即使是那些用于训练的用户,我应该将整个数据集作为训练集吗?但是当数据集对于这种情况来说太大时会发生什么?

0个回答
没有发现任何回复~