torch_geometric.transforms.NodePropertySplit

class NodePropertySplit(property_name: str, ratios: List[float], ascending: bool = True)[source]

Bases: BaseTransform

根据给定的节点属性创建一个具有分布偏移的节点级分割,如“评估图模型在结构分布偏移下的鲁棒性和不确定性”论文中所提出的(函数名称:node_property_split)。

它将给定图中的节点根据其结构属性分成五个不相交的部分。 这可以用于具有分布变化的传导节点预测任务。 它考虑了节点的分布内(ID)和分布外(OOD)子集。 ID子集包括训练、验证和测试部分,而OOD子集包括验证和测试部分。 因此,它为每个图创建了五个相关的节点掩码向量,其中三个用于ID节点(id_train_mask, id_val_mask, id_test_mask),两个用于OOD节点(ood_val_mask, ood_test_mask)。

这个类实现了三种特定的策略,用于在图中引发分布变化——基于流行度局部性密度

Parameters:
  • property_name (str) – 要使用的节点属性的名称 ("popularity", "locality", "density").

  • ratios ([float]) – 用于ID训练、ID验证、ID测试、OOD验证和OOD测试部分的五个比例值的列表。这些值的总和必须为1.0

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

from torch_geometric.transforms import NodePropertySplit
from torch_geometric.datasets.graph_generator import ERGraph

data = ERGraph(num_nodes=1000, edge_prob=0.4)()

property_name = 'popularity'
ratios = [0.3, 0.1, 0.1, 0.3, 0.2]
transform = NodePropertySplit(property_name, ratios)

data = transform(data)