添加节点属性分割

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',

  • 对于OOD节点,有2个:'out_valid_mask', 'out_test_mask'.

此函数实现了三种特定的策略,用于在图中引入分布变化——基于流行度局部性密度

Parameters:
  • 数据集 (DGLDatasetDGLGraph 的列表) – 用于诱导结构分布变化的数据集。

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

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

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

  • random_seed (int, optional) – 用于固定节点初始排列的随机种子。它用于为具有相同属性值或属于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