当前位置: 首页 > news >正文

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

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动态权重调整(如多特征融合)灵活性高实验级,需大量调参

相关文章:

  • 鸿蒙开发-ArkUi控件使用
  • 重学Redis:Redis常用数据类型+存储结构(源码篇)
  • 5.5 GitHub数据秒级分析核心揭秘:三层提示工程架构设计解析
  • 日志文件爆满_配置使用logback_只保留3天日志文件_每天定时生成一个日志文件---SpringCloud工作笔记206
  • 如何制定有效的风险应对计划
  • C++ std::string_view介绍及性能提升分析
  • android面试情景题详解:android如何处理断网、网络切换或低速网络情况下的业务连续性
  • 关于SENSOR 720P/1080P 静电保护方案
  • Python静态方法和类方法详解
  • 在断网的时候,websocket 一直在CLOSING 状态
  • 如何制定合理的项目预算
  • Docker详细使用
  • Windows 系统如何使用Redis 服务
  • 什么是分布式声波传感
  • 性能炸裂的数据可视化分析工具:DataEase!
  • npm 常用命令及示例和解析
  • 位运算题目:连接连续二进制数字
  • python asyncio 的基本使用
  • HTTP 和 HTTPS 协议的区别及使用场景
  • Java微服务流量控制与保护技术全解析:负载均衡、线程隔离与三大限流算法
  • 钱理群|直面衰老与死亡
  • 官方披露:WinRAR安全漏洞可绕过安全警告,执行恶意软件
  • 延安市委副书记马月逢已任榆林市委副书记、市政府党组书记
  • 南部战区海军新闻发言人发表谈话
  • “云南舞蹈大家跳”暨牟定“三月会”下周举行,城际公交免票
  • 新消费观察 | 重点深耕,外资科技企业继续看好中国发展