首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark中的协同过滤

Spark中的协同过滤
EN

Stack Overflow用户
提问于 2017-05-22 07:18:28
回答 1查看 275关注 0票数 1

我在SparkML中为隐式反馈数据集运行协同过滤。

假设我的数据集如下所示。

代码语言:javascript
复制
  User  Item    viewed
1   A   1
1   B   2
2   A   3
2   C   4
3   A   3
3   B   2
3   D   6

所以我有大约56K的独立用户和8.5K的独立项目。然而,在这种情况下,每个用户并没有每个项目的行,而只有他们评分/查看的项目的行。这是一个隐式反馈数据集,其中已查看的列是no。用户查看项目的次数。

现在,这也是SparkML期望的格式(userid,itemid,rating)。

然而,我的问题是,我是否可以像SparkML算法那样输入这个数据集,或者我需要创建所有用户和项目的笛卡尔连接?原因是,由于此数据集中并不存在用户和项目的所有组合,因此ALS算法将不会看到用户和项目的所有组合,因此在预测这些组合时将给出空值。

因此,对于用户还没有看到的项目,我们应该为每个用户也创建一行,并将view设为0?如下图所示?

代码语言:javascript
复制
User    Item    Viewed
1   A   1
1   B   2
1   C   0
1   D   0
2   A   3
2   C   4
2   B   0
2   D   0
3   A   3
3   B   2
3   D   6
3   C   0

如果这是正确的,那么我有56K的唯一用户和8.5K的唯一项目。这将使56*8.5K=的行数为400 make。

想象一下,如果用户是数百万,项目是数百万。在这种情况下,它将是一个巨大的数据集。

我做了笛卡尔的事情,它似乎给出了正确的预测,没有空值,就像之前一样。但我想确认这是否是Spark Collaborative filtering需要准备数据集的方式?

我说的对吗?

编辑:

另一个问题是如何创建笛卡尔联接,而不是笛卡尔联接是否是Spark ML的正确数据集格式。所以这是一个不同的问题。请不要关门。

EN

回答 1

Stack Overflow用户

发布于 2017-05-22 19:32:57

这个假设显然是错误的:

的原因是,由于在此数据集中没有用户和项目的所有组合,因此ALS算法不会看到用户和项目的所有组合,因此在预测这些组合时会给出空值。

并使这个问题无效。不需要用户和项目的所有组合。您所需要的只是每个项目和每个用户的一些数据。直观地说,如果您没有看到用户或答案,它将不会出现在计算的因子中,并且您无法对其进行推理。就这样。

关于这一点:

对于用户还没有看过的项目,我们也应该为每个用户创建一行,并将

设为0?如下图所示?

这可能在某种程度上适用于隐式反馈,但对于显式的,这显然是错误的。无评级与可能的最低评级不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44102711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档