添加节点属性分割
- 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:
数据集 (
DGLDataset
或DGLGraph
的列表) – 用于诱导结构分布变化的数据集。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