协同过滤程序:当没有足够的数据时如何处理 Pearson 分数
Posted
技术标签:
【中文标题】协同过滤程序:当没有足够的数据时如何处理 Pearson 分数【英文标题】:Collaborative Filtering Program: What to do for a Pearson Score When There Isn't Enough Data 【发布时间】:2010-12-27 23:44:24 【问题描述】:我正在使用协同过滤构建推荐引擎。对于相似度得分,我使用 Pearson 相关性。大多数时候这很好,但有时我的用户只共享 1 或 2 个字段。例如:
User 1
a: 4
b: 2
User 2
a: 4
b: 3
由于这只有 2 个数据点,因此 Pearson 相关性始终为 1(直线或完美相关性)。这显然不是我想要的,那么我应该使用什么值呢?我可以像这样丢弃所有实例(相关性为 0),但我的数据现在非常稀疏,我不想丢失任何东西。有没有我可以使用的任何相似性分数与我的其他相似性分数(所有 Pearson)相匹配?
【问题讨论】:
想知道皮尔逊相关性是什么,所以我搜索了一下。我发现了一些可能感兴趣的东西。 bit.ly/6oBEH3 它指出 Pearson 不适合稀疏数据,并建议使用基于邻域的算法。将其作为评论,因为我对此一无所知。 @Nifle Mike 所描述的是一种基于邻域的算法,它使用 Pearson 相关性来查找邻居。幻灯片似乎暗示的是使用矩阵分解而不是传统的基于邻域的协同过滤。矩阵分解是许多推荐问题的一个很好的解决方案,但计算量更大。我在下面编辑了我的答案,以描述如何为稀疏数据集修复 Pearson。 【参考方案1】:您可能需要考虑使用余弦相似性而不是皮尔逊相关性。它没有这个问题,并且在推荐系统文献中被广泛使用。
Herlocker 等人描述的规范解决方案。在“基于邻域的协同过滤算法中设计选择的实证分析”中,是“抑制”皮尔逊相关性,以纠正具有小协同评价集的用户之间的过高相关性。基本上,您将 Pearson 相关性乘以 1 和 cc/50 中的较小者,其中 cc 是两个用户评分的项目数。效果是,如果它们至少有 50 个共同点,那么相似度就是原始 Pearson;否则,它与它们共有的评分项目的数量成线性比例。它将 1 的虚假相关性变成了 0.02 的相似性。
50 可能需要根据您的域和系统进行调整。
您也可以使用余弦相似度,它不会以同样的方式受到此限制。 但是,对于用户-用户 CF,通常首选 Pearson 相关性。
更新:在最近的工作中,我们发现余弦相似度对于基于用户的 CF 过早地被忽略了。余弦相似度,当对标准化数据执行时(在计算余弦相似度之前从每个评分中减去用户的平均值 --- 结果与 Parson 相关度非常相似,除了它具有内置的自阻尼项),优于 Pearson “标准”环境。当然,如果可能的话,您应该对自己的数据和环境进行一些测试,看看哪种效果最好。论文在这里:http://grouplens.org/node/479
免责声明:我是制作上述 Herlocker 论文的实验室的一名学生。
【讨论】:
【参考方案2】:是的,Pearson 在推荐引擎的文章中经常被提及,它的工作原理合理,但有一些类似这样的怪癖。 (顺便说一下,在您的示例中相关性是 1,而不是 0。)
余弦度量相似度确实是一个不错的选择。但是,如果您在计算之前将数据“居中”(偏移所以平均值为 0),并且有理由应该这样做,那么它会降低到与 Pearson 相关性相同。因此,您最终会遇到类似的问题,或者会遇到与不居中不同的一系列问题。
考虑一个基于欧几里德距离的相似度度量——相似度与距离成反比,其中用户评分被视为空间中的点。它不存在这种稀疏性问题,尽管它需要针对维度进行归一化,以免有利于对许多项目进行共同评分的用户,因为他们的距离沿许多维度增加。
但实际上,我建议您查看基于对数似然的相似性指标。它也没有这些问题,甚至不需要评级值。这是一个很好的默认设置。
还有更多不存在此问题的因素需要考虑:Spearman 相关性、基于 Tanimoto 距离(Jaccard 系数)。
在哪里可以了解更多信息并获得实施?瞧,Apache Mahout
【讨论】:
【参考方案3】:我认为你应该计算项目相似度而不是用户相似度,这样你就可以向评分项目很少的用户推荐新项目。
【讨论】:
【参考方案4】:一如既往地感谢肖恩的提示!我同意 LogLikelihood 是最好的“默认”指标,因为它可以处理二进制和非二进制评分集,并且返回 (0,1) 之间的相似度分数。
根据我的经验,使用将相似度分数映射到范围 (0,1) 的指标是一个重要属性,因为它避免了在估计偏好计算期间限制估计偏好。如果您不希望您的 最佳项目 在其他数百个实际上与 最佳 项目具有相同分数的低分项目中丢失,这是必不可少的,因为封顶。
【讨论】:
以上是关于协同过滤程序:当没有足够的数据时如何处理 Pearson 分数的主要内容,如果未能解决你的问题,请参考以下文章