我有一个<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
方法,我是否按排名方法的输出排列项目并推荐那些值较高的项目?
答案 0 :(得分:2)
关于问题的问题的直觉是好的 - 现在,我们只存储了积极的例子。这些是用户实际购买该物品的情况。
在这种情况下,你应该去排名损失功能。特别是当fastFM实施贝叶斯个性化排名(BRP)时。此外,在大多数情况下,如果结果在有序的推荐列表中呈现给用户,我们应该考虑将推荐作为排名相关问题。我们不会像Netflix奖那样预测评级(明星)。
BPR是非常简单的方法。但要理解它有一个重要的事情 - 我们不关心估计的y
值本身。什么是重要的是我们使用此输出对估算的示例进行排序时的顺序。
因此,在学习阶段,必须准备好正面和负面的例子。从fastFM文档中查看fit method。为了得到你的负面例子,最简单的方法是从所有可用的项目集中获得随机的(均匀分布的)。你只能检查这个随机例子是否实际上是正面的(除了正则化之外,我们不会从这个例子中学到任何东西;-))。随机均匀采样对大多数情况都很有效,因为您准备的正输入数据通常非常稀疏(例如密度<1%)。但是您可以尝试对负面示例进行不同的抽样,例如:使用经验项目分布。它可以在某些设置中更好地工作,但更有可能的是,你的“长尾”将保持不变(这是我的经验)。或者你可能知道更多关于你的数据的信息,可以在这里提供帮助:-)