协作过滤程序:当没有足够的数据时如何处理Pearson分数

6 recommendation-engine sparse-matrix collaborative-filtering pearson

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

User 1{
a: 4
b: 2
}

User 2{
a: 4
b: 3
}
Run Code Online (Sandbox Code Playgroud)

由于这只是2个数据点,因此Pearson相关性总是1(直线或完美相关).这显然不是我想要的,那么我应该使用什么价值呢?我可以扔掉所有这样的实例(给出0的相关性),但我的数据现在非常稀疏,我不想丢失任何东西.我可以使用哪些相似度得分与其他相似度得分(所有Pearson)相符合?

Mic*_*and 5

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

Herlocker等人描述的典型解决方案.在"基于邻域的协同过滤算法中的设计选择的实证分析"中,"抑制"Pearson相关性以校正具有小的共同评级集的用户之间的过高相关性.基本上,您将Pearson相关性乘以1和cc/50中的较小者,其中cc是用户评定的项目数.其结果是,如果他们至少有50个共同的项目,那么相似之处就是原始的Pearson; 否则,它与它们共有的额定项目的数量成线性比例.它将1的虚假相关转化为0.02的相似性.

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

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

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

免责声明:我是实验室的学生,生产上述Herlocker纸.


jbo*_*chi 0

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