1

PySparks mllib 包提供了 train() 和 trainimplicit() 方法,分别用于在显式和隐式数据上训练推荐模型。

我想训练一个关于隐式数据的模型。更具体地说,项目购买数据。由于在我的情况下,用户多次购买一件商品的情况非常罕见,因此“评分”或“偏好”始终为 1。所以我的数据集如下所示:

u1, i1, 1 u1, i2, 1 u2, i2, 1 u2, i3, 1 ... un, im, 1

其中 u 代表用户,i 代表项目。

我确实有很多关于用户人口统计、位置等的特性以及项目特性。但我不能将用户或项目特征合并到pyspark.mllib.als.trainpyspark.mllib.als.trainimplicit方法中。

或者,我考虑过使用 fastFM 或 libfm。两者都是 Factorization Machines 的包,它实现了 ALS 求解器和框架推荐作为回归/分类问题。使用这些案例,我可以将训练数据中的用户、项目和更多特征包含为X. 但是,预测变量y将只是一个向量(我没有明确的评级只购买)。

我该如何解决这个问题?

4

1 回答 1

0

Spark 中的 MF 是一个基于用户项目事件(隐式)/评分(显式)的简单协同过滤实现。您可以通过预过滤或后过滤数据为 2D(用户项目)推荐器引入上下文信息。例如,您有一个人口统计信息 M/F 和 kNN 推荐器(可以是 MF,没关系),对于预过滤,您要做的第一件事就是只选择具有相同上下文的记录。比,你在他们身上运行 kNN。对于 MF,以同样的方式,必须为 F 和 M 生成两个模型。然后,在第一步生成推荐时,您选择正确的模型。这两种技术在“推荐系统手册”中都有很好的描述。

建模上下文 - FM 是一个很好的方法。想一想,这篇文章可能对你有用:如何使用 Python 的 FastFM 库(分解机器)进行推荐任务?. 您将在那里发现如何为隐式用户反馈引入负面示例。并注意排名预测 - 主要是推荐是正确的方法。

另一种选择 - 引入您自己的启发式方法,例如通过破坏最终得分。也许你有一些知识/业务目标/其他可以为你或用户带来价值的东西。

于 2017-03-18T19:21:27.737 回答