最佳推荐方案

Best Solution for Recommendation

我打算找一个合适的函数,根据两个人的喜好,得到准确的相似度。

例如人与标签相关联,他们对每个标签的期望将作为数值保存在标签节点的边缘。我想给每个人推荐相似的人。

我找到了两个解决方案:

  1. 余弦相似度

Neo4j 中有一个余弦函数,它只接受一个输入,而在上面的函数中,我需要将向量传递给这个公式。如:

for "a": a=[10, 20, 45] 每个数字表示人对每个标签的渴望。 对于 "b": b=[20, 50, 70]

  1. 皮尔逊相关系数

当我在网上冲浪和您的文档时,我发现: http://neo4j.com/docs/stable/cypher-cookbook-similarity-calc.html#cookbook-calculate-similarities-by-complex-calculations

我的问题是这个公式背后的逻辑是什么? r 和 H 有什么区别?

因为乍一看我觉得H1 或H2 总是相等的。除非我应该考虑图表的其余部分。

在此先感谢您的帮助。

这个例子让人有点难以理解发生了什么。在这个例子中,H1 和 H2 都是 1。一个更好的例子是显示每个人吃不同类型的食物,这样你就可以看到 H 值的变化。如果 "me" 也吃了 "vegetables"、"pizza" 和 "hotdogs",他们的 H 将为 4。

我认为 H1H2 的目的是标准化 times 属性(用户吃食物的次数)的结果食物种类。您可以在此 Neo4j console

中试验此示例

既然您提到了其他相似性度量,您可能会对这个 GraphGist 感兴趣,Similarity Measures For Collaborative Filtering With Cypher。它有一些使用 Cypher 计算 Pearson 相关性和 Jaccard 相似度的简单示例。

无法帮助您了解 Neo4J,只是想指出余弦相似度和 Pearsons 相关系数本质上是同一回事。如果你解码不同的符号,你会发现唯一的区别是 Pearsons 首先将向量归零。所以你可以这样定义Pearsons:

Pearsons(a, b) = Cosine(a - mean(a), b - mean(b))