优先连接 (Preferential Attachment)

此功能在 Aura Graph Analytics 中不可用。

优先连接是一种用于计算节点之间紧密程度的指标,其依据是节点所共享的邻居数量。

历史与解释

优先连接意味着一个节点的连接数越多,它获得新链接的可能性就越大。该算法由 Albert-László Barabási 和 Réka Albert 通过他们在无标度网络方面的研究推广开来。其计算公式如下

preferential attachment

其中 N(u) 是与 u 相邻的节点集合。

值为 0 表示两个节点之间不紧密,而较高的值则表示节点之间更加紧密。

该库包含一个用于计算两个节点之间接近度的函数。

语法

以下内容将运行算法并返回结果
RETURN gds.linkprediction.preferentialAttachment(node1:Node, node2:Node, {
    relationshipQuery:String,
    direction:String
})
表 1. 参数
名称 类型 默认 可选 描述

node1

节点

null

一个节点

node2

节点

null

另一个节点

relationshipQuery

字符串

null

用于计算 node1node2 之间相似度的关系类型

方向

字符串

BOTH (双向)

用于计算 node1node2 之间相似度的关系方向。可能的值为 OUTGOING(出站)、INCOMING(入站)和 BOTH(双向)。

优先连接算法示例

以下代码将创建一个示例图
CREATE
 (zhen:Person {name: 'Zhen'}),
 (praveena:Person {name: 'Praveena'}),
 (michael:Person {name: 'Michael'}),
 (arya:Person {name: 'Arya'}),
 (karin:Person {name: 'Karin'}),

 (zhen)-[:FRIENDS]->(arya),
 (zhen)-[:FRIENDS]->(praveena),
 (praveena)-[:WORKS_WITH]->(karin),
 (praveena)-[:FRIENDS]->(michael),
 (michael)-[:WORKS_WITH]->(karin),
 (arya)-[:FRIENDS]->(karin)
以下代码将返回 Michael 和 Karin 的优先连接得分
 MATCH (p1:Person {name: 'Michael'})
 MATCH (p2:Person {name: 'Karin'})
 RETURN gds.linkprediction.preferentialAttachment(p1, p2) AS score
表 2. 结果
score

6.0

我们还可以基于特定的关系类型计算一对节点的得分。

以下代码将仅基于 FRIENDS 关系返回 Michael 和 Karin 的优先连接得分
 MATCH (p1:Person {name: 'Michael'})
 MATCH (p2:Person {name: 'Karin'})
 RETURN gds.linkprediction.preferentialAttachment(p1, p2, {relationshipQuery: "FRIENDS"}) AS score
表 3. 结果
score

1.0