概述
共同邻居(Common Neighbors)算法计算两个节点之间共同邻居的数量,作为衡量它们相似性的指标。
该算法背后的逻辑是,如果两个节点有大量的共同邻居,它们很可能在某种意义上相似或产生连接。它的计算公式如下:
![](https://img.ultipa.cn/2022-08-09-18-06-06-CN.jpg)
其中,N(x)和N(y)分别是与节点x和节点y相连的节点集合。
共同邻居数量较多表示节点间的相似度较大,数量为0则表示两个节点间没有相似性。
![](https://img.ultipa.cn/draw/draw_bb7c3956ecc64222863a9995d462f049.jpg?v='1691981900636')
在上图中,CN(D,E) = |N(D) ∩ N(E)| = |{B, F}| = 2。
特殊说明
- 共同邻居算法忽略边的方向,按照无向边进行计算。
语法
- 命令:
algo(topological_link_prediction)
- 参数:
名称 |
类型 |
规范 |
默认 |
可选 |
描述 |
---|---|---|---|---|---|
ids / uuids | []_id / []_uuid |
/ | / | 否 | 待计算的第一组节点的ID/UUID;算法将ids /uuids 中的每个节点与ids2 /uuids2 中的每个节点配对进行计算 |
ids2 / uuids2 | []_id / []_uuid |
/ | / | 否 | 待计算的第二组节点的ID/UUID;算法将ids /uuids 中的每个节点与ids2 /uuids2 中的每个节点配对进行计算 |
type | string | Common_Neighbors |
Adamic_Adar |
否 | 相似度衡量指标;计算共同邻居时,保持此项为Common_Neighbors |
limit | int | ≥-1 | -1 |
是 | 返回的结果条数,-1 返回所有结果 |
示例
示例图如下:
![](https://img.ultipa.cn/draw/draw_f0371ee6a9cf4adf94a2a46ad69b3869.jpg?v='1691982146945')
文件回写
配置项 | 回写内容 |
---|---|
filename | node1 ,node2 ,num |
algo(topological_link_prediction).params({
uuids: [3],
uuids2: [1,5,7],
type: 'Common_Neighbors'
}).write({
file:{
filename: 'cn'
}
})
结果:文件cn
C,A,1.000000
C,E,2.000000
C,G,1.000000
直接返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
0 | []perNodePair | 点对及相似度 | node1 , node2 , num |
algo(topological_link_prediction).params({
ids: 'C',
ids2: ['A','C','E','G'],
type: 'Common_Neighbors'
}) as cn
return cn
结果:cn
node1 | node2 | num |
---|---|---|
3 | 1 | 1 |
3 | 5 | 2 |
3 | 7 | 1 |
流式返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
0 | []perNodePair | 点对及相似度 | node1 , node2 , num |
find().nodes() as n
with collect(n._id) as nID
algo(topological_link_prediction).params({
ids: 'C',
ids2: nID,
type: 'Common_Neighbors'
}).stream() as cn
where cn.num >= 2
return cn
结果:cn
node1 | node2 | num |
---|---|---|
3 | 4 | 2 |
3 | 5 | 2 |