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 (
DGLDataset
或DGLGraph
列表) – 用于引入结构性分布偏移的数据集。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