dgl.sampling.node2vec_random_walk

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

基于node2vec模型从起始节点数组中生成随机游走轨迹。 论文: node2vec: Scalable Feature Learning for Networks.

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

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

Parameters:
  • g (DGLGraph) –

    图。必须在CPU上。

    请注意,node2vec仅支持同构图。

  • nodes (Tensor) –

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

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

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

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

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

  • prob (str, optional) –

    图中存储的边特征张量的名称,该张量包含与每条边相关的(未归一化的)概率,用于选择下一个节点。

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

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

  • return_eids (bool, optional) –

    If True, additionally return the edge IDs traversed.

    Default: False.

Returns:

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

  • eids (Tensor, optional) – 一个2维的边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]]))