在mahout中,实现了基于项目的协作过滤方法,称为itemsimilarity
。
在理论中,项目之间的相似性应仅针对对两个项目进行排名的用户进行计算。在测试期间,我意识到在mahout中它的工作方式不同。
在下面的例子中,第11项和第12项之间的相似性应该等于1,但是mahout输出是0.36。
示例1。项目为11-12
项目之间的相似性:
101 102 0.36602540378443865
带偏好的矩阵:
11 12
1 1
2 1
3 1 1
4 1
看起来mahout将null视为0。
示例2。项目为101-103。
项目之间的相似性:
101 102 0.2612038749637414
101 103 0.4340578302732228
102 103 0.2600070276638468
带偏好的矩阵:
101 102 103
1 1 0.1
2 1 0.1
3 1 0.1
4 1 1 0.1
5 1 1 0.1
6 1 0.1
7 1 0.1
8 1 0.1
9 1 0.1
10 1 0.1
项目101和102之间的相似性应该仅使用用户4和5的等级来计算,而对于项目101和103(应该基于理论)则相同。这里(101,103)比(101,102)更相似,它不应该是。
两个示例都在没有任何其他参数的情况下运行。
这个问题在某种程度上解决了吗?有什么想法吗?
答案 0 :(得分:0)
那些用户并不完全相同。协作过滤需要具有同时发生的度量,并且相同的项目不会在这些用户之间共存。同样,这些项目并不相同,它们各自都有不同的用户。
数据变成“稀疏矩阵”,其中仅记录非零值。其余的被视为0值,这是预期和正确的。算法将0视为无偏好,而不是否定偏好。
这是正确的事情。