我有一个<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生成案例建议( <x, y> )。
显然,regression不在这里。那么,我应该使用classification或ranking的fastFM方法吗?还有怎么做的?例如,如果我使用classification,是否需要使用y=0生成实例?如果我使用ranking方法,我是否按照排序方法的输出来排列项目,并推荐那些价值更高的项目?
发布于 2016-04-15 10:09:26
关于这个问题的问题的直觉是好的-现在,我们只有积极的例子存储。这些是用户实际购买物品的情况。
在这种情况下,您应该去排名损失函数。特别是当fastFM实现了贝叶斯个性化排名时。此外,在大多数情况下,当结果以有序的建议列表形式呈现给用户时,我们应该将准备建议视为与排名相关的问题。我们不会像Netflix奖那样预测评级(明星)。
BPR是一种非常简单的方法。但要理解它有一件关键的事情--我们不关心估计的y、、值本身--。的重要之处在于,当我们使用此输出对估计的示例进行排序时,顺序如何。
因此,在学习阶段,必须准备积极和消极的例子。查看拟合法文档中的fastFM文档。为了得到负面的例子,最简单的方法是从所有可用的项目集中得到随机的(均匀分布的)示例。您只能检查这个随机示例是否实际上不是正的(除了正则化之外,我们不会从这个示例中学到任何东西;-))。随机抽样在大多数情况下都是很有效的,因为您准备的正输入数据通常非常稀疏(例如密度< 1%)。但是你可以尝试不同的样本,例如:使用经验项目分布。它可以更好地在某些情况下工作,但更有可能的是,你的“长尾”将保持不变(这是我的经验)。或者您可能知道更多关于您的数据可以在这里提供帮助的信息:-)
https://stackoverflow.com/questions/36618259
复制相似问题