如何使用Python的FastFM库(分解机器)进行推荐任务?

时间:2016-04-14 08:59:08

标签: python scikit-learn

我有一个<user, item>对的数据集,其中每个条目都记录了哪个用户购买了哪个项目。

e.g。

<u1, i1>
<u1, i4>
<u2, i2>
<u3, i2>...

我使用

创建了一个编码数据集
no_of_features = no_of_users + no_of_items

并将输出变量y设置为1,因为每个条目代表用户购买了该特定项目。

注意:在这种情况下,所有y值均为1.

编码数据集如下所示:

user1 user2 user3 .... item1 item2 item3 item4 .... y
  1     0    0    ....   1     0     0     0   .... 1
  1     0    0    ....   0     0     0     1   .... 1
  0     1    0    ....   0     1     0     0   .... 1
  0     0    1    ....   0     1     0     0   .... 1

现在,我想知道如何使用fastFM为任何用户<x, y>和任何项x生成案例y的建议?

显然regression不在此处。我应该使用classification的{​​{1}}或ranking方法吗?又怎么样?例如如果我使用fastFM,是否需要使用classification生成实例?如果我使用y=0方法,我是否按排名方法的输出排列项目并推荐那些值较高的项目?

1 个答案:

答案 0 :(得分:2)

关于问题的问题的直觉是好的 - 现在,我们只存储了积极的例子。这些是用户实际购买该物品的情况。

在这种情况下,你应该去排名损失功能。特别是当fastFM实施贝叶斯个性化排名(BRP)时。此外,在大多数情况下,如果结果在有序的推荐列表中呈现给用户,我们应该考虑将推荐作为排名相关问题。我们不会像Netflix奖那样预测评级(明星)。

BPR是非常简单的方法。但要理解它有一个重要的事情 - 我们不关心估计的y值本身。什么是重要的是我们使用此输出对估算的示例进行排序时的顺序

因此,在学习阶段,必须准备好正面和负面的例子。从fastFM文档中查看fit method。为了得到你的负面例子,最简单的方法是从所有可用的项目集中获得随机的(均匀分布的)。你只能检查这个随机例子是否实际上是正面的(除了正则化之外,我们不会从这个例子中学到任何东西;-))。随机均匀采样对大多数情况都很有效,因为您准备的正输入数据通常非常稀疏(例如密度<1%)。但是您可以尝试对负面示例进行不同的抽样,例如:使用经验项目分布。它可以在某些设置中更好地工作,但更有可能的是,你的“长尾”将保持不变(这是我的经验)。或者你可能知道更多关于你的数据的信息,可以在这里提供帮助:-)

相关问题