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 |
二、算法实现原理与参数设置
-
Jaccard Similarity
- 原理:基于集合交并比,公式:
J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A,B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=∣A∪B∣∣A∩B∣
适用于二分图结构(如用户-商品关系),比较节点邻居的重合度。 - 参数:
topK
(限制每个节点的相似对数量)、similarityCutoff
(过滤低分结果)、relationshipWeightProperty
(加权计算)。
- 原理:基于集合交并比,公式:
-
Cosine Similarity
- 原理:计算向量夹角的余弦值,公式:
Cosine ( A , B ) = A ⋅ B ∥ A ∥ ∥ B ∥ \text{Cosine}(A,B) = \frac{A \cdot B}{\|A\| \|B\|} Cosine(A,B)=∥A∥∥B∥A⋅B
适用于高维稀疏数据(如文本TF-IDF向量)。 - 参数:需指定向量属性(如浮点列表),支持
skipValue
(处理缺失值)。
- 原理:计算向量夹角的余弦值,公式:
-
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=∑(xi−xˉ)2∑(yi−yˉ)2∑(xi−xˉ)(yi−yˉ)
适用于评分预测(如电影推荐)。 - 参数:需处理非空维度,支持
listName
(指定属性字段)。
- 原理:衡量线性相关性,修正用户评分尺度差异,公式:
-
Euclidean Similarity
- 原理:计算向量间欧氏距离的倒数,公式:
Similarity = 1 1 + ∑ ( x i − y i ) 2 \text{Similarity} = \frac{1}{1 + \sqrt{\sum (x_i - y_i)^2}} Similarity=1+∑(xi−yi)21
对向量幅值敏感,适用于空间距离相关的场景(如地理位置推荐)。
- 原理:计算向量间欧氏距离的倒数,公式:
-
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∣)∣A∩B∣
适用于小集合快速匹配(如短文本标签)。
- 原理:计算重叠比例,公式:
-
K-Nearest Neighbors (KNN)
- 原理:基于属性向量寻找每个节点的最近邻,支持多种相似度度量(如Cosine、Jaccard)。
- 参数:
k
(近邻数量)、sampler
(采样方法)、randomSelection
(随机连接数)。
-
Approximate Nearest Neighbors (ANN)
- 原理:高效构建KNN图,支持Jaccard、Cosine等度量,适用于大规模数据。
- 参数:
k
、similarityThreshold
(近似阈值)。
-
Alpha Similarity
- 原理:实验级算法,允许通过参数(如 α \alpha α)动态调整权重,适用于需自定义权重的场景(如特征对齐)。
- 参数:
alpha
(权重系数,需实验调优)。
三、入门示例代码
-
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;
引用中的示例,计算用户间基于共同喜好的相似度。
-
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;
引用,适用于用户评分向量分析。
-
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 | 动态权重调整(如多特征融合) | 灵活性高 | 实验级,需大量调参 |