概述
与经典的随机游走不同,Node2Vec游走是一种有偏的随机游走(Biased Random Walk),可以以广度优先(BFS)或深度优先(DFS)的方式探索节点邻域。详情请参考 Node2Vec 算法。
特殊说明
- 节点可以沿自环边游走。
- Node2Vec游走的结果与边的方向无关。
语法
- 命令:
algo(random_walk_node2vec)
- 参数:
名称 |
类型 |
规范 |
默认 |
可选 |
描述 |
---|---|---|---|---|---|
ids / uuids | []_id / []_uuid |
/ | / | 是 | 指定游走起点的ID/UUID;忽略表示指定全部点 |
walk_length | int | ≥1 | 1 |
是 | 每次游走的深度,即访问的节点数量 |
walk_num | int | ≥1 | 1 |
是 | 从每个指定节点开始的游走次数 |
edge_schema_property | []@<schema>?.<property> |
数值类型,需LTE | / | 是 | 用作边权重的边属性,权重值为所有指定属性值的和;只沿着带有这些属性的边游走 |
p | float | >0 | 1 |
是 | 返回参数;值越大,向回走的概率越小 |
q | float | >0 | 1 |
是 | 远近参数;值大于1时倾向于在同级游走,否则倾向于向远处游走 |
limit | int | ≥-1 | -1 |
是 | 返回的结果条数,-1 返回所有结果 |
示例
示例图如下,边上的数值是边属性score的值:
文件回写
配置项 |
回写内容 |
描述 |
---|---|---|
filename | _id ,_id ,... |
访问的节点的ID |
algo(random_walk_node2vec).params({
walk_length: 6,
walk_num: 2,
p: 10000,
q: 0.0001
}).write({
file:{
filename: 'walks'
}})
结果:文件walks
J,G,H,I,H,G,
I,H,G,F,E,C,
H,G,H,G,F,E,
G,H,G,H,I,H,
F,G,E,C,D,F,
E,F,E,F,G,H,
D,C,D,C,E,F,
C,D,A,B,A,C,
B,A,C,D,F,E,
A,B,A,B,A,C,
J,G,F,D,C,A,
I,H,G,F,E,C,
H,I,H,I,H,G,
G,F,D,C,E,F,
F,E,C,A,B,A,
E,F,E,F,D,C,
D,F,D,F,E,C,
C,D,A,B,A,C,
B,A,C,E,F,G,
A,C,A,C,E,F,
直接返回
别名序号 | 类型 | 描述 |
列名 |
---|---|---|---|
0 | []perWalk | 访问的节点的UUID列表 | [_uuid, _uuid, ...] |
algo(random_walk_node2vec).params({
ids: ['J'],
walk_length: 6,
walk_num: 3,
p: 2000,
q: 0.001
}) as walks
return walks
结果:walks
[10, 7, 6, 5, 3, 1] |
[10, 7, 6, 5, 3, 1] |
[10, 7, 8, 9, 8, 7] |
流式返回
别名序号 | 类型 | 描述 |
列名 |
---|---|---|---|
0 | []perWalk | 访问的节点的UUID列表 | [_uuid, _uuid, ...] |
algo(random_walk_node2vec).params({
ids: ['A'],
walk_length: 5,
walk_num: 10,
p: 1000,
q: 1,
edge_schema_property: 'score'
}).stream() as walks
return walks
结果:walks
[1, 3, 4, 6, 5] |
[1, 2, 1, 3, 5] |
[1, 2, 1, 3, 4] |
[1, 3, 4, 6, 7] |
[1, 3, 4, 6, 7] |
[1, 3, 5, 6, 7] |
[1, 3, 5, 6, 4] |
[1, 2, 1, 3, 5] |
[1, 3, 4, 6, 7] |
[1, 3, 4, 6, 5] |