【问题标题】:How to use Python's FastFM library (factorization machines) for recommendation tasks?如何使用 Python 的 FastFM 库(分解机器)进行推荐任务?
【发布时间】:2017-01-27 22:43:22
【问题描述】:

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

例如

<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 生成案例&lt;x, y&gt; 的推荐?

显然regression 不在此处。那么我应该使用fastFMclassificationranking 方法吗?又如何?例如如果我使用classification,是否需要使用y=0 生成实例?如果我使用ranking的方式,我是不是按照排名方式的输出来排列项目,推荐价值更高的?

【问题讨论】:

  • 我认为Data Science Exchange 可能是更好的地方。但我不是 stackexchange 的专业用户 :-)

标签: python scikit-learn


【解决方案1】:

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

在这种情况下,您应该使用排名损失函数。尤其是当 fastFM 实施了贝叶斯个性化排名 (BRP) 时。此外,在大多数情况下,当结果以有序的推荐列表呈现给用户时,我们应该将准备推荐视为与排名相关的问题。我们不会像 Netflix Prize 那样预测评级(星级)。

BPR 是一种非常直接的方法。但是有一件关键的事情要理解它 - 我们并不关心估计的 y 值本身重要的是我们使用此输出对估计示例进行排序时的顺序

因此,在学习阶段,必须准备正面和负面的例子。查看 fastFM 文档中的 fit method。为了得到你的反例,最简单的方法是从所有可用的项目集中获取随机的(均匀分布的)。您只能检查这个随机示例是否实际上不是正数(我们不会从这个示例中学到任何东西,除了正则化;-))。随机均匀采样在大多数情况下效果很好,因为您准备的正输入数据通常非常稀疏(例如密度

【讨论】:

  • 所以据我了解您的回答,我将创建大致相等数量的随机 &lt;u, i&gt; 对(其中用户 u未购买 项目 i)和 @ 987654326@,然后根据输出应用排名和排序?
  • 几乎 ;-) 忘记 y 值。在这种情况下,您的 y 是 。首先,正如你所说 - 用户购买/点击了这个项目。二是随机抽样。其余的都很好 - 适合并按输出排序。让我知道它是否适用于您的情况:-)
猜你喜欢
  • 2015-12-19
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多