torch_geometric.transforms.NodePropertySplit
- class NodePropertySplit(property_name: str, ratios: List[float], ascending: bool = True)[source]
Bases:
BaseTransform
Creates a node-level split with distributional shift based on a given node property, as proposed in the “Evaluating Robustness and Uncertainty of Graph Models Under Structural Distributional Shifts” paper (functional name:
node_property_split
).It splits the nodes in a given graph into five non-intersecting parts based on their structural properties. This can be used for transductive node prediction tasks with distributional shifts. It considers the in-distribution (ID) and out-of-distribution (OOD) subsets of nodes. The ID subset includes training, validation and testing parts, while the OOD subset includes validation and testing parts. As a result, it creates five associated node mask vectors for each graph, three which are for the ID nodes (
id_train_mask
,id_val_mask
,id_test_mask
), and two which are for the OOD nodes (ood_val_mask
,ood_test_mask
).This class implements three particular strategies for inducing distributional shifts in a graph — based on popularity, locality or density.
- Parameters:
property_name (str) – The name of the node property to be used (
"popularity"
,"locality"
,"density"
).ratios ([float]) – A list of five ratio values for ID training, ID validation, ID test, OOD validation and OOD test parts. The values must sum to
1.0
.ascending (bool, optional) – Whether to sort nodes in ascending order of the node property, so that nodes with greater values of the property are considered to be OOD (default:
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)