add_node_property_split

class dgl.data.utils.add_node_property_split(dataset, part_ratios, property_name, ascending=True, random_seed=None)[source]

基类

根据给定节点属性创建带有分布偏移的节点划分,如论文 在结构性分布偏移下评估图模型的鲁棒性和不确定性 中所提出的

它根据每个图的节点结构属性,将给定数据集中的节点划分为 5 个不相交的部分。这可以用于处理具有分布偏移的直推式节点预测任务。

它考虑了节点集的分布内 (ID) 和分布外 (OOD) 子集。ID 子集包含训练、验证和测试部分,而 OOD 子集包含验证和测试部分。因此,它为每个图创建了 5 个关联的节点掩码数组

  • 3 个用于 ID 节点: 'in_train_mask', 'in_valid_mask', 'in_test_mask',

  • 以及 2 个用于 OOD 节点: 'out_valid_mask', 'out_test_mask'

此函数实现了 3 种特定的用于在图中引入分布偏移的策略 — 基于流行度 (popularity)局部性 (locality)密度 (density)

参数:
  • dataset (DGLDatasetDGLGraph 列表) – 用于引入结构性分布偏移的数据集。

  • part_ratios (list) – 一个包含 5 个比率值的列表,分别对应训练集、ID 验证集、ID 测试集、OOD 验证集和 OOD 测试集。这些值的总和必须为 1.0。

  • property_name (str) – 要使用的节点属性名称,必须是 'popularity''locality''density' 之一。

  • ascending (bool, 可选) – 是否按节点属性的升序对节点进行排序,以便将属性值较大的节点视为 OOD (默认为 True)。

  • random_seed (int, 可选) – 用于固定节点初始排列的随机种子。它用于为属性值相同或属于 ID 子集的节点创建随机顺序。(默认为 None)。

示例

>>> dataset = dgl.data.AmazonCoBuyComputerDataset()
>>> print('in_valid_mask' in dataset[0].ndata)
False
>>> part_ratios = [0.3, 0.1, 0.1, 0.3, 0.2]
>>> property_name = 'popularity'
>>> dgl.data.utils.add_node_property_split(dataset, part_ratios, property_name)
>>> print('in_valid_mask' in dataset[0].ndata)
True