【问题标题】:Best Solution for Recommendation推荐的最佳解决方案
【发布时间】:2015-12-11 10:23:59
【问题描述】:

我将找到一个合适的函数,以便根据他们的喜好获得两个人之间的准确相似度。

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

我找到了两个解决方案:

  1. 余弦相似度

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

对于“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 总是等于一个。除非我应该考虑图表的其余部分。

在此先感谢您的帮助。

【问题讨论】:

    标签: neo4j cypher recommendation-engine facebook-recommendations


    【解决方案1】:

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

    中试验此示例

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

    【讨论】:

    • 谢谢@william 这些链接似乎正是我想要的
    【解决方案2】:

    这个例子让人有点难以理解发生了什么。在这个例子中,H1 和 H2 都是 1。一个更好的例子是显示每个人吃不同类型的食物,这样你就可以看到 H 的值在变化。如果“我”也吃了“蔬菜”、“披萨”和“热狗”,那么他们的 H 就是 4。

    【讨论】:

      【解决方案3】:

      对 Neo4J 帮不上忙,只想指出余弦相似度和皮尔逊相关系数本质上是一回事。如果您对不同的符号进行解码,您会发现唯一的区别是 Pearsons 首先将向量归零。因此,您可以如下定义 Pearsons:

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

      【讨论】:

      • 这两个函数是相同的,只是它们的结果的准确性有细微的差别。 Cosine 的 RMSE 小于 Pearson,因此 Cosine 的结果准确。
      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多