PyTorch Geometric中RandomLinkSplit切分后边数不符问题咨询
链接预测任务中Cora数据集边数拆分不符的原因解析
核心原因:无向边的存储与拆分逻辑差异
Cora数据集的边存储特性
原Cora数据集显示的10556条边是双向存储的有向边数——因为无向图会把每条无向边以(u,v)和(v,u)两种形式各存一次,实际唯一无向边的数量是10556 / 2 = 5278条。RandomLinkSplit的无向边拆分逻辑
当设置is_undirected=True时,工具会以无向边为基本单位进行拆分,而非按有向边拆分:- 先对所有边去重,得到5278条唯一无向边
- 按
num_val=0.05、num_test=0.1的比例拆分无向边:- 验证集预测目标:
5278 × 0.05 ≈ 263条无向边 → 对应双向存储的526条有向边(即val_data.edge_label的数量) - 测试集预测目标:
5278 × 0.1 ≈ 527条无向边 → 对应双向存储的1054条有向边(即test_data.edge_label的数量) - 训练集预测目标:
5278 - 263 - 527 = 4488条无向边 → 由于设置了add_negative_train_samples=False,训练集仅保留无向边的单方向存储,因此train_data.edge_label的数量等于无向边数4488
- 验证集预测目标:
各数据集edge_index的含义
train_data.edge_index是训练图的结构边,即原无向边中去掉验证、测试预测边后的剩余部分:4488条无向边 ×2 = 8976条有向边,与数据显示一致val_data.edge_index复用训练图的结构边(验证时基于训练图做预测),因此同样是8976条test_data.edge_index是训练图+验证预测边的结构边:(4488+263)条无向边 ×2 = 9502条有向边,与数据显示一致
边数核对验证
所有预测目标的无向边总数为4488+263+527=5278,对应双向有向边总数为5278×2=10556,与原数据集边数完全匹配。你之前的计算是把单方向存储的训练集预测边和双向存储的验证/测试预测边直接相加,才出现了数值不符的情况。
内容的提问来源于stack exchange,提问作者lenhhoxung
相关产品推荐
相关产品推荐

