Neo4j GDS-11-neo4j GDS 库中相似度算法实现

发布于:2025-04-15 ⋅ 阅读:(112) ⋅ 点赞:(0)

neo4j GDS 系列

Neo4j APOC-01-图数据库 apoc 插件介绍

Neo4j GDS-01-graph-data-science 图数据科学插件库概览

Neo4j GDS-02-graph-data-science 插件库安装实战笔记

Neo4j GDS-03-graph-data-science 简单聊一聊图数据科学插件库

Neo4j GDS-04-图的中心性分析介绍

Neo4j GDS-05-neo4j中的中心性分析算法

Neo4j GDS-06-neo4j GDS 库中社区检测算法介绍

Neo4j GDS-07-neo4j GDS 库中社区检测算法实现

Neo4j GDS-08-neo4j GDS 库中路径搜索算法介绍

Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现

Neo4j GDS-10-neo4j GDS 库中相似度算法介绍

Neo4j GDS-11-neo4j GDS 库中相似度算法实现

Neo4j GDS-12-neo4j GDS 库中节点插入(Node Embedding)算法介绍

Neo4j GDS-13-neo4j GDS 库中节点插入算法实现

Neo4j GDS-14-neo4j GDS 库中链接预测算法介绍

Neo4j GDS-15-neo4j GDS 库中链接预测算法实现

Neo4j GDS-16-neo4j GDS 库创建 graph 图投影

Neo4j GDS-17-neo4j GDS 库创建 graph 图投影更复杂的场景

相似度算法 neo4j gds 库的各种实现

Neo4j GDS库相似度算法实现与入门指南

Neo4j Graph Data Science (GDS) 库提供了丰富的相似度算法,覆盖从生产级到实验级的多种场景。以下是详细的算法分类、实现原理、参数配置、示例代码及适用场景分析。


一、支持的相似度算法列表(截至v1.6版本)

根据资料,GDS库的相似度算法按质量层级分类如下:

层级 算法
生产级 Node Similarity
Beta/Alpha级 K-Nearest Neighbors (KNN)、Approximate Nearest Neighbors (ANN)、Cosine、Jaccard、Euclidean、Pearson、Overlap、Alpha Similarity

二、算法实现原理与参数设置
  1. Jaccard Similarity

    • 原理:基于集合交并比,公式:
      J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB
      适用于二分图结构(如用户-商品关系),比较节点邻居的重合度。
    • 参数:topK(限制每个节点的相似对数量)、similarityCutoff(过滤低分结果)、relationshipWeightProperty(加权计算)。
  2. Cosine Similarity

    • 原理:计算向量夹角的余弦值,公式:
      Cosine ( A , B ) = A ⋅ B ∥ A ∥ ∥ B ∥ \text{Cosine}(A,B) = \frac{A \cdot B}{\|A\| \|B\|} Cosine(A,B)=A∥∥BAB
      适用于高维稀疏数据(如文本TF-IDF向量)。
    • 参数:需指定向量属性(如浮点列表),支持skipValue(处理缺失值)。
  3. Pearson Similarity

    • 原理:衡量线性相关性,修正用户评分尺度差异,公式:
      r = ∑ ( x i − x ˉ ) ( y i − y ˉ ) ∑ ( x i − x ˉ ) 2 ∑ ( y i − y ˉ ) 2 r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2} \sqrt{\sum (y_i - \bar{y})^2}} r=(xixˉ)2 (yiyˉ)2 (xixˉ)(yiyˉ)
      适用于评分预测(如电影推荐)。
    • 参数:需处理非空维度,支持listName(指定属性字段)。
  4. Euclidean Similarity

    • 原理:计算向量间欧氏距离的倒数,公式:
      Similarity = 1 1 + ∑ ( x i − y i ) 2 \text{Similarity} = \frac{1}{1 + \sqrt{\sum (x_i - y_i)^2}} Similarity=1+(xiyi)2 1
      对向量幅值敏感,适用于空间距离相关的场景(如地理位置推荐)。
  5. Overlap Similarity

    • 原理:计算重叠比例,公式:
      O ( A , B ) = ∣ A ∩ B ∣ min ⁡ ( ∣ A ∣ , ∣ B ∣ ) O(A,B) = \frac{|A \cap B|}{\min(|A|, |B|)} O(A,B)=min(A,B)AB
      适用于小集合快速匹配(如短文本标签)。
  6. K-Nearest Neighbors (KNN)

    • 原理:基于属性向量寻找每个节点的最近邻,支持多种相似度度量(如Cosine、Jaccard)。
    • 参数:k(近邻数量)、sampler(采样方法)、randomSelection(随机连接数)。
  7. Approximate Nearest Neighbors (ANN)

    • 原理:高效构建KNN图,支持Jaccard、Cosine等度量,适用于大规模数据。
    • 参数:ksimilarityThreshold(近似阈值)。
  8. Alpha Similarity

    • 原理:实验级算法,允许通过参数(如 α \alpha α)动态调整权重,适用于需自定义权重的场景(如特征对齐)。
    • 参数:alpha(权重系数,需实验调优)。

三、入门示例代码
  1. Jaccard Similarity

    // 创建图投影
    CALL gds.graph.project('myGraph', ['Person', 'Cuisine'], 'LIKES');
    
    // 计算Jaccard相似度
    CALL gds.nodeSimilarity.stream('myGraph', {similarityCutoff: 0.5})
    YIELD node1, node2, similarity
    RETURN gds.util.asNode(node1).name AS Person1, 
           gds.util.asNode(node2).name AS Person2, 
           similarity
    ORDER BY similarity DESC;
    

    引用中的示例,计算用户间基于共同喜好的相似度。

  2. Cosine Similarity

    // 使用向量属性计算
    MATCH (p:Person)
    WITH p, [p.rating1, p.rating2, p.rating3] AS vector
    CALL gds.alpha.similarity.cosine.stream({
      collect({item: id(p), weights: vector}),
      topK: 5
    })
    YIELD item1, item2, similarity
    RETURN gds.util.asNode(item1).name AS Person1, 
           gds.util.asNode(item2).name AS Person2, 
           similarity;
    

    引用,适用于用户评分向量分析。

  3. Pearson Similarity

    // 构建评分向量
    MATCH (u:User)-[r:RATED]->(m:Movie)
    WITH u, collect({item: m.id, value: r.rating}) AS ratings
    CALL gds.alpha.similarity.pearson({
      ratings,
      topK: 3
    })
    YIELD item1, item2, similarity
    RETURN u.name AS User, 
           gds.util.asNode(item2).name AS SimilarUser, 
           similarity;
    

    引用,用于电影推荐系统中的用户相似度计算。


四、适用场景对比分析
算法 最佳场景 优势 局限性
Jaccard 用户兴趣匹配、社交网络共同好友分析 计算高效,适合二分图 对稀疏数据敏感
Cosine 文本相似度、高维稀疏数据(如TF-IDF) 方向敏感,不受向量长度影响 不适用于幅值重要的场景
Pearson 评分预测(如电影、商品评分) 修正用户评分偏差 仅适用于线性相关数据
Euclidean 地理位置推荐、物理空间数据分析 直观的距离度量 对数据尺度敏感
KNN/ANN 大规模推荐系统、实时搜索 支持近似计算,适合高吞吐量 参数调优复杂
Alpha 动态权重调整(如多特征融合) 灵活性高 实验级,需大量调参


网站公告

今日签到

点亮在社区的每一天
去签到