理论考量
本页面详细介绍了 GDS 中链接预测相关的理论概念。这并非强制性阅读,但有助于加深理解。
指标
Neo4j GDS 库中的链接预测管道支持以下指标:
-
AUCPR
-
OUT_OF_BAG_ERROR
(仅适用于随机森林,且仅提供验证分数)
AUCPR 指标是“精确率-召回率曲线下面积”(Area Under the Precision-Recall Curve)的缩写。对于随机森林模型,也支持 OUT_OF_BAG_ERROR
指标。为了计算精确率和召回率,我们需要一组示例,每个示例都带有正标签或负标签。对于每个示例,我们还有一个预测标签。给出真实标签和预测标签,我们可以计算精确率和召回率(参考,例如 维基百科)。
接着,为了计算 AUCPR,我们构建精确率-召回率曲线,具体如下:
-
每个预测都关联一个预测强度。我们将示例按预测强度降序排序。
-
对于所有出现的预测强度,我们将其用作阈值,并将所有强度达到或高于该阈值的示例视为正标签。
-
现在我们计算精确率
p
和召回率r
,并将元组(r, p)
视为曲线上的一个点,即精确率-召回率曲线。 -
最后,曲线进行线性插值,面积计算为以这些点为顶点的梯形集合的并集。
这条曲线将呈现类似以下形状:

请注意,此处的蓝色区域显示了曲线下的一个梯形。
精确率-召回率曲线下的面积也可以解释为平均精确率,其中平均值是针对不同的分类阈值计算的。
OUT_OF_BAG_ERROR
仅针对随机森林模型计算,其评估方式为多数投票的准确性,其中对于每个示例,仅考虑在训练期间未使用该示例的树。每棵树使用的训练集比例由配置参数 numberOfSamplesRatio
控制。OUT_OF_BAG_ERROR
在交叉验证阶段评估时报告为验证分数。如果随机森林模型胜出,则根据在整个训练集上重新训练模型的结果报告为测试分数。
类不平衡
大多数图的非相邻节点对数量远多于相邻节点对(例如稀疏图)。因此,我们通常面临类不平衡问题。有多种策略可以解决不平衡数据问题。在管道训练过程中,使用了 AUCPR 指标。对于不平衡数据,它被认为比常用的 AUROC(受试者工作特征曲线下面积)指标更适用。为了使该指标能够适当反映正例(相邻节点对)和负例(非相邻节点对),我们提供了控制类别之间采样比率以及通过 negativeClassWeight
控制类别相对权重的功能。前者在使用 configureSplits 过程生成训练集和测试集时,由配置参数 negativeSamplingRatio
进行配置。调整 negativeClassWeight
(如下文所述)意味着在计算精确率时,对假正例进行加权或降权。
negativeSamplingRatio
的推荐值是图的真实类别比率,换句话说,不应用欠采样。然而,该值越高,测试集就越大,从而评估时间也会越长。测试集中负例与正例的总概率质量比率大约为 negativeSamplingRatio * negativeClassWeight
。因此,这两个参数可以同时调整,以权衡评估准确性和速度。
真实类别比率计算为 (q - r) / r
,其中 q = n(n-1)/2
是可能的无向关系数量,r
是实际无向关系数量。请注意,graph list 过程报告的 relationshipCount
是所有现有关系类型上有向关系数量的总和。因此,我们建议使用 Cypher 在源 Neo4j 图上获取 r
。例如,此查询将统计类型为 T
或 R
的关系数量:
MATCH (a)-[rel:T | R]-(b)
WHERE a < b
RETURN count(rel) AS r
在为 negativeClassWeight
选择值时,应考虑两个因素。首先,测试集中负例与正例的总概率质量的期望比率。其次,测试集中采样到的负例与正例的比率。为了与传统评估保持一致,应选择参数使得 negativeSamplingRatio * negativeClassWeight = 1.0
,例如将值设置为真实类别比率及其倒数,或将两个值都设置为 1.0
。
另一种方法是,使类别间的总概率权重比率接近真实类别比率。也就是说,确保 negativeSamplingRatio * negativeClassWeight
接近真实类别比率。报告的指标 (AUCPR) 能够更好地反映在未见的严重不平衡数据上的预期精确率。在这种评估类型下,由于指标值会变得小得多,因此必须调整预期。