dgl.sampling.node2vec_random_walk

dgl.sampling.node2vec_random_walk(g, nodes, p, q, walk_length, prob=None, return_eids=False)[source]

基于 node2vec 模型,从起始节点数组生成随机游走轨迹。论文:node2vec: 可扩展的网络特征学习

返回的轨迹长度均为 walk_length + 1,其中第一个节点是起始节点本身。

注意,如果随机游走提前停止,DGL 会用 -1 填充轨迹以保持相同长度。

参数:
  • g (DGLGraph) –

    图。必须在 CPU 上。

    注意 node2vec 只支持同质图。

  • nodes (Tensor) –

    随机游走轨迹开始的节点 ID 张量。

    张量必须在 CPU 上,并且必须与图的 ID 类型具有相同的数据类型。

  • p (float) – 在游走中立即重新访问节点的可能性。

  • q (float) – 用于在广度优先策略和深度优先策略之间进行插值的控制参数。

  • walk_length (int) – 随机游走的长度。

  • prob (str, 可选) –

    图上存储与每条边关联的(未归一化的)选择下一个节点的概率的边特征张量的名称。

    特征张量必须是非负的,并且所有节点的出边概率之和必须为正(尽管它们不必总和为一)。否则结果将是未定义的。

    如果省略,DGL 假定邻居是均匀选择的。

  • return_eids (bool, 可选) –

    如果为 True,则额外返回遍历的边 ID。

    默认值:False。

返回值:

  • traces (Tensor) – 一个二维节点 ID 张量,形状为 (num_seeds, walk_length + 1)

  • eids (Tensor, 可选) – 一个二维边 ID 张量,形状为 (num_seeds, length)。仅当 return_eids 为 True 时返回。

示例

>>> g1 = dgl.graph(([0, 1, 1, 2, 3], [1, 2, 3, 0, 0]))
>>> dgl.sampling.node2vec_random_walk(g1, [0, 1, 2, 0], 1, 1, walk_length=4)
tensor([[0, 1, 3, 0, 1],
        [1, 2, 0, 1, 3],
        [2, 0, 1, 3, 0],
        [0, 1, 2, 0, 1]])
>>> dgl.sampling.node2vec_random_walk(g1, [0, 1, 2, 0], 1, 1, walk_length=4, return_eids=True)
(tensor([[0, 1, 3, 0, 1],
         [1, 2, 0, 1, 2],
         [2, 0, 1, 2, 0],
         [0, 1, 2, 0, 1]]),
 tensor([[0, 2, 4, 0],
         [1, 3, 0, 1],
         [3, 0, 1, 3],
         [0, 1, 3, 0]]))