我一直在研究如何为一个简单的书籍数据集开发一个混合推荐系统,主要目标是同时使用显式数据(购买)和潜在因素(特征)来进行推荐,所以我最终选择了 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 库时一直将数据集分成训练集和测试集,但我想成为能够对数据集中的所有用户进行预测,即使是那些用于训练的用户,我应该将整个数据集作为训练集吗?但是当数据集对于这种情况来说太大时会发生什么?