概述
总邻居(Total Neighbors)算法计算两个节点不重复的邻居总数,作为衡量它们相似性的指标。
该算法考虑两个节点的整个邻域,相对于只关注共同邻居的算法,给出了更全面的相似性视角。它的计算公式如下:
其中,N(x)和N(y)分别是与节点x和节点y相连的节点集合。
总邻居数量较多表示节点间的相似度较大,数量为0则表示两个节点间没有相似性。
在上图中,TN(D,E) = |N(D) ∪ N(E)| = |{B, C, E, F} ∪ {B, D, F}| = |{B, C, D, E, F}| = 5。
特殊说明
- 总邻居算法忽略边的方向,按照无向边进行计算。
语法
- 命令:
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 | Total_Neighbors |
Adamic_Adar |
否 | 相似度衡量指标;计算总邻居时,保持此项为Total_Neighbors |
limit | int | ≥-1 | -1 |
是 | 返回的结果条数,-1 返回所有结果 |
示例
示例图如下:
文件回写
配置项 | 回写内容 |
---|---|
filename | node1 ,node2 ,num |
algo(topological_link_prediction).params({
uuids: [3],
uuids2: [1,5,7],
type: 'Total_Neighbors'
}).write({
file:{
filename: 'tn'
}
})
结果:文件tn
C,A,3.000000
C,E,3.000000
C,G,3.000000
直接返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
0 | []perNodePair | 点对及相似度 | node1 , node2 , num |
algo(topological_link_prediction).params({
ids: 'C',
ids2: ['A','C','E','G'],
type: 'Total_Neighbors'
}) as tn
return tn
结果:tn
node1 | node2 | num |
---|---|---|
3 | 1 | 3 |
3 | 5 | 3 |
3 | 7 | 3 |
流式返回
别名序号 |
类型 |
描述 | 列名 |
---|---|---|---|
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: 'Total_Neighbors'
}).stream() as tn
where tn.num >= 4
return tn
结果:tn
node1 | node2 | num |
---|---|---|
3 | 2 | 6 |
3 | 4 | 5 |
3 | 6 | 5 |