6

我正在使用协同过滤构建推荐引擎。对于相似度得分,我使用 Pearson 相关性。大多数时候这很好,但有时我的用户只共享 1 或 2 个字段。例如:

User 1{
a: 4
b: 2
}

User 2{
a: 4
b: 3
}

由于这只有 2 个数据点,因此 Pearson 相关性始终为 1(直线或完美相关性)。这显然不是我想要的,那么我应该使用什么值呢?我可以像这样丢弃所有实例(给出 0 的相关性),但我的数据现在非常稀疏,我不想丢失任何东西。是否有任何相似性分数可以与我的其他相似性分数(所有 Pearson)相匹配?

4

4 回答 4

5

您可能需要考虑使用余弦相似性而不是 Pearson 相关性。它没有这个问题,并且在推荐系统文献中被广泛使用。

Herlocker 等人描述的规范解决方案。在“基于邻域的协同过滤算法中设计选择的实证分析”中,是“抑制”皮尔逊相关性,以纠正具有小协同评价集的用户之间过高的相关性。基本上,您将 Pearson 相关性乘以 1 和cc /50 中的较小者,其中cc是两个用户评分的项目数。效果是,如果它们至少有 50 个共同点,那么相似度就是原始 Pearson;否则,它与它们共有的评分项目的数量成线性比例。它将 1 的虚假相关性变成了 0.02 的相似性。

50 可能需要根据您的域和系统进行调整。

您还可以使用余弦相似度,它不会以同样的方式受到此限制。 然而,对于用户-用户 CF,通常首选 Pearson 相关性。

更新:在最近的工作中,我们发现余弦相似度对于基于用户的 CF 过早地被忽略了。余弦相似度,当对标准化数据执行时(在计算余弦相似度之前从每个评分中减去用户的平均值 --- 结果与 Parson 相关性非常相似,除了它具有内置的自阻尼项),优于 Pearson “标准”环境。当然,如果可能的话,你应该对自己的数据和环境进行一些测试,看看什么效果最好。论文在这里: http: //grouplens.org/node/479

免责声明:我是制作上述 Herlocker 论文的实验室的学生。

于 2010-03-08T19:16:50.673 回答
1

是的,Pearson 在推荐引擎的文章中经常被提及,而且它的工作原理合理,但也有一些类似这样的怪癖。(顺便说一下,在您的示例中相关性为 1,而不是 0。)

余弦度量相似度确实是一个不错的选择。但是,如果您在计算之前将数据“居中”(偏移所以平均值为 0),并且有理由应该这样做,那么它会降低到与 Pearson 相关性相同。因此,您最终会遇到类似的问题,或者会遇到与不居中不同的一系列问题。

考虑一个基于欧几里德距离的相似度度量——相似度与距离成反比,其中用户评分被视为空间中的点。它不存在这种稀疏性问题,尽管它需要针对维度进行归一化,以免有利于共同评价许多项目的用户,因为他们的距离沿许多维度增加。

但实际上,我建议您查看基于对数似然的相似性度量。它也没有这些问题,甚至不需要评级值。这是一个很好的默认值。

还有更多需要考虑的不会有这个问题:Spearman 相关,基于 Tanimoto 距离(Jaccard 系数)。

您可以在哪里了解更多信息并获得实施?瞧,Apache Mahout

于 2010-05-08T23:18:55.963 回答
0

一如既往地感谢肖恩的提示!我同意 LogLikelihood 是最好的“默认”指标,因为它可以与二进制和非二进制评分集一起使用,并且它返回 (0,1) 之间的相似度分数。

根据我的经验,使用将相似度分数映射到范围 (0,1) 的度量是一个重要属性,因为它避免了在估计偏好计算期间限制估计偏好。如果您不希望您的最佳项目在数百个其他得分较低的项目中丢失,这些项目实际上由于封顶而与最佳项目具有相同的分数,那么这是必不可少的。

于 2011-08-15T17:56:24.667 回答
0

我认为您应该计算项目相似度而不是用户相似度,这样您就可以向评分项目很少的用户推荐新项目。

于 2010-01-02T16:02:38.367 回答