配置管道
此功能处于 Beta 阶段。有关功能分层的更多信息,请参阅API 分层。
本页介绍如何创建和配置链接预测管道。
创建管道
构建新管道的第一步是使用 gds.beta.pipeline.linkPrediction.create
创建一个。这将在管道目录中存储一个类型为 Link prediction training pipeline
的可训练管道对象。这代表了一个可配置的管道,以后可以调用它进行训练,从而创建一个训练好的管道。后者也是一个模型,以 LinkPrediction
类型存储在目录中。
语法
CALL gds.beta.pipeline.linkPrediction.create(
pipelineName: String
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: List of Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
所创建管道的名称。 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
示例
CALL gds.beta.pipeline.linkPrediction.create('pipe')
名称 | nodePropertySteps | featureSteps | splitConfig | autoTuningConfig | parameterSpace |
---|---|---|---|---|---|
"pipe" |
[] |
[] |
{negativeSamplingRatio=1.0, testFraction=0.1, trainFraction=0.1, validationFolds=3} |
{maxTrials=10} |
{LogisticRegression=[], MultilayerPerceptron=[], RandomForest=[]} |
这表明新创建的管道尚不包含任何步骤,并且拆分和训练参数均采用默认值。
添加节点属性
链接预测管道可以在变异模式下执行一个或多个 GDS 算法,这些算法在投射图中创建节点属性。这些生成节点属性的步骤可以一个接一个地链接起来,创建的属性也可以用于添加特征。此外,添加到管道中的节点属性步骤将在训练管道和应用训练好的模型进行预测时执行。
要添加的过程名称可以是完全限定的 GDS 过程名称,以 .mutate
结尾。结尾的 .mutate
可以省略,也可以使用简写形式,例如 node2vec
而不是 gds.node2vec.mutate
。但请注意,仍然必须在名称中给出层级限定。
例如,预处理算法可以用作节点属性步骤。
语法
CALL gds.beta.pipeline.linkPrediction.addNodeProperty(
pipelineName: String,
procedureName: String,
procedureConfiguration: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: List of Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
procedureName |
字符串 |
要添加到管道的过程名称。 |
procedureConfiguration |
Map |
用于生成过程配置的 Map。它包含除 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
contextNodeLabels |
字符串列表 |
|
作为上下文添加的附加节点标签。 |
contextRelationshipTypes |
字符串列表 |
|
作为上下文添加的附加关系类型。 |
在训练期间,上下文配置与训练配置相结合,为每个节点属性步骤生成最终的节点标签和关系类型过滤器。
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
示例
CALL gds.beta.pipeline.linkPrediction.addNodeProperty('pipe', 'fastRP', {
mutateProperty: 'embedding',
embeddingDimension: 256,
randomSeed: 42
})
名称 | nodePropertySteps | featureSteps | splitConfig | autoTuningConfig | parameterSpace |
---|---|---|---|---|---|
"pipe" |
[{config={contextNodeLabels=[], contextRelationshipTypes=[], embeddingDimension=256, mutateProperty="embedding", randomSeed=42}, name="gds.fastRP.mutate"}] |
[] |
{negativeSamplingRatio=1.0, testFraction=0.1, trainFraction=0.1, validationFolds=3} |
{maxTrials=10} |
{LogisticRegression=[], MultilayerPerceptron=[], RandomForest=[]} |
添加链接特征
链接预测管道执行一系列步骤来计算机器学习模型使用的特征。特征步骤为给定的节点对计算特征向量。对于每个节点对,结果会被连接成一个单独的链接特征向量。链接特征向量中特征的顺序遵循特征步骤的顺序。与节点属性步骤一样,特征步骤在训练和预测时都会执行。获取特征的受支持方法在下方描述。
语法
CALL gds.beta.pipeline.linkPrediction.addFeature(
pipelineName: String,
featureType: String,
configuration: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: List of Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
featureType |
字符串 |
|
configuration |
Map |
用于添加链接特征的配置。 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
nodeProperties |
字符串列表 |
否 |
应用作输入的节点属性名称。 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
支持的特征类型
特征步骤可以使用输入图中已存在的节点属性,或者由管道添加的节点属性。对于每个潜在链接中的每个节点,nodeProperties
的值将按配置的顺序连接成一个向量 f。也就是说,对于每个潜在链接,源节点的特征向量 ,与目标节点的特征向量
组合成一个单一的特征向量 f。
支持的特征类型可描述如下:
特征类型 | 公式 / 描述 |
---|---|
L2 |
|
HADAMARD |
|
COSINE |
|
SAME_CATEGORY |
如果源和目标的类别值相同,则特征为 |
示例
CALL gds.beta.pipeline.linkPrediction.addFeature('pipe', 'hadamard', {
nodeProperties: ['embedding', 'age']
}) YIELD featureSteps
featureSteps |
---|
[{config={nodeProperties=["embedding", "age"]}, name="HADAMARD"}] |
执行管道时,nodeProperties
必须存在于输入图中,或由之前的节点属性步骤创建。例如,embedding
属性可以由之前的示例创建,并且我们期望 age
在训练和预测时已经存在于用作输入的内存图中。
配置关系拆分
链接预测训练管道负责将关系拆分为多个集合,并将采样的负面关系添加到其中一些集合中。配置拆分是可选的,如果省略,将使用默认设置进行拆分。
可以通过使用 gds.model.list
并可能只返回 splitConfig
来检查管道的拆分配置。
关系的拆分在内部按以下步骤进行:
-
图根据在训练时配置的指定
sourceNodeLabel
、targetNodeLabel
和targetRelationshipType
进行过滤。 -
过滤后剩余的关系我们称之为正向关系,它们被拆分为
test
、train
和feature-input
集合。 -
符合
sourceNodeLabel
和targetNodeLabel
过滤器的随机负向关系被添加到test
和train
集合中。-
每个集合中负向关系的数量是正向关系的数量乘以
negativeSamplingRatio
。 -
负向关系不与正向关系重合。
-
如果指定了
negativeRelationshipType
,则不进行采样,而是根据test
和train
集合的大小比例,将图中该类型的所有关系进行分区并添加为负向关系。negativeRelationshipType
的所有关系也必须符合sourceNodeLabel
和targetNodeLabel
过滤器。
-
正向和负向关系分别被赋予 1.0
和 0.0
的关系权重,以便它们可以被区分开来。
train
和 test
关系集合用于
-
确定每个训练或测试示例的标签(正向或负向)
-
识别要计算链接特征的节点对
然而,它们不被节点属性步骤中运行的算法使用。其原因在于,否则模型将把预测目标(关系的存在)用作特征。
每个节点属性步骤都使用一个特征输入图。feature-input
图具有带有 sourceNodeLabel
、targetNodeLabel
和 contextNodeLabels
的节点,以及来自 feature-input
集合的关系加上 contextRelationshipTypes
的关系。此图用于计算依赖于节点属性的节点属性和特征。在 feature-input
图中生成的节点属性用于训练和测试。
语法
CALL gds.beta.pipeline.linkPrediction.configureSplit(
pipelineName: String,
configuration: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: List of Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
configuration |
Map |
拆分关系的配置。 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
validationFolds |
整数 |
3 |
在模型选择期间使用的训练图的划分数量。 |
testFraction |
双精度浮点数 |
0.1 |
图中保留用于测试的部分比例。必须在 (0, 1) 范围内。 |
trainFraction |
双精度浮点数 |
0.1 |
测试补集中保留用于训练的部分比例。必须在 (0, 1) 范围内。 |
negativeSamplingRatio |
双精度浮点数 |
1.0 |
测试集和训练集中负样本与正样本的期望比例。更多详细信息请参见此处。它与 |
negativeRelationshipType |
字符串 |
不适用 |
指定哪些关系应被用作负向关系,并添加到 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
示例
CALL gds.beta.pipeline.linkPrediction.configureSplit('pipe', {
testFraction: 0.25,
trainFraction: 0.6,
validationFolds: 3
})
YIELD splitConfig
splitConfig |
---|
{negativeSamplingRatio=1.0, testFraction=0.25, trainFraction=0.6, validationFolds=3} |
我们现在重新配置了管道的拆分,这将在训练期间应用。
例如,考虑一个包含节点“Person”和“City”以及关系“KNOWS”、“BORN”和“LIVES”的图。请注意,这与训练管道中的示例相同。
假设我们根据 sourceNodeLabel
和 targetNodeLabel
为 Person
以及 targetRelationshipType
为 KNOWS
进行过滤。过滤后的图如下所示:

过滤后的图有 12 个关系。如果我们使用 testFraction
0.25 和 negativeSamplingRatio
1 配置拆分,它会随机选取 12 * 0.25 = 3
个正向关系,外加 1 * 3 = 3
个负向关系作为 test
集合。
接着,如果 trainFraction
为 0.6 且 negativeSamplingRatio
为 1,它会随机选取 9 * 0.6 = 5.4 ≈ 5
个正向关系,外加 1 * 5 = 5
个负向关系作为 train
集合。
黄色部分剩余的 12 * (1 - 0.25) * (1 - 0.6) = 3.6 ≈ 4
个关系是 feature-input
集合。

test
集合为蓝色,train
集合为红色,feature-input
集合为黄色。虚线表示负向关系。假设例如添加了一个节点属性步骤,其中 contextNodeLabel
为 City
且 contextRelationshipType
为 BORN
。那么该步骤的 feature-input
图将是:

feature-input
集合为黄色。添加模型候选
管道包含一组模型候选配置,该集合最初为空。此集合称为参数空间。每个模型候选配置包含训练参数的固定值或范围。当存在范围时,范围内的值由自动调优算法自动确定,参见自动调优。必须使用以下过程之一将一个或多个模型配置添加到训练管道的参数空间中:
-
gds.beta.pipeline.linkPrediction.addLogisticRegression
-
gds.beta.pipeline.linkPrediction.addRandomForest
-
gds.alpha.pipeline.linkPrediction.addMLP
有关 GDS 中可用的训练方法(逻辑回归、随机森林和多层感知器)的信息,请参阅训练方法。
在训练管道中,我们进一步解释了如何训练、评估和比较配置的模型候选。
管道的参数空间可以通过使用 gds.model.list
并选择仅返回 parameterSpace
来检查。
在训练管道之前,必须至少向其添加一个模型候选。 |
语法
CALL gds.beta.pipeline.linkPrediction.addLogisticRegression(
pipelineName: String,
config: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
config |
Map |
模型候选的逻辑回归配置。模型的允许参数在下表中定义。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
|
整数或 Map [1] |
|
是 |
每个批次中的节点数量。 |
|
整数或 Map [1] |
|
是 |
最小训练周期数。 |
|
整数或 Map [1] |
|
是 |
最大训练周期数。 |
|
浮点数或 Map [1] |
|
是 |
学习率决定了每个周期中在 Adam 优化器指定方向上移动以最小化损失的步长。 |
|
整数或 Map [1] |
|
是 |
最大无产出连续周期数。 |
|
浮点数或 Map [1] |
|
是 |
被认为有效的最小损失改进。 |
|
浮点数或 Map [1] |
|
是 |
逻辑回归使用的惩罚项。默认情况下不应用惩罚。 |
|
浮点数或 Map [1] |
|
是 |
焦点损失因子的指数,用于使模型更关注训练集中难以分类的错误分类示例。默认值为 |
|
浮点数列表 |
|
是 |
损失函数中每个类别的权重。列表长度必须为 2。第一个权重用于负面示例(缺失关系),第二个权重用于正面示例(实际关系)。 |
1. Map 应为 2. 此参数的范围在对数尺度上进行自动调优。 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
CALL gds.beta.pipeline.linkPrediction.addRandomForest(
pipelineName: String,
config: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
config |
Map |
模型候选的随机森林配置。模型的允许参数在下表中定义。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
maxFeaturesRatio |
浮点数或 Map [3] |
|
是 |
在寻找最佳拆分时考虑的特征比例 |
numberOfSamplesRatio |
浮点数或 Map [3] |
|
是 |
每个决策树要考虑的样本比例。我们使用有放回抽样。值为 |
numberOfDecisionTrees |
整数或 Map [3] |
|
是 |
决策树的数量。 |
maxDepth |
整数或 Map [3] |
|
是 |
决策树的最大深度。 |
minLeafSize |
整数或 Map [3] |
|
是 |
决策树中叶节点的最小样本数。必须严格小于 |
minSplitSize |
整数或 Map [3] |
|
是 |
决策树中拆分内部节点所需的最小样本数。必须严格大于 |
criterion |
字符串 |
|
是 |
在决策树训练期间用于评估潜在节点拆分的不纯度标准。有效选项为 |
3. Map 应为 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
CALL gds.alpha.pipeline.linkPrediction.addMLP(
pipelineName: String,
config: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
管道的名称。 |
config |
Map |
模型候选的多层感知器配置。模型的允许参数在下表中定义。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
batchSize |
整数或 Map [4] |
|
是 |
每个批次中的节点数量。 |
minEpochs |
整数或 Map [4] |
|
是 |
最小训练周期数。 |
maxEpochs |
整数或 Map [4] |
|
是 |
最大训练周期数。 |
learningRate [5] |
浮点数或 Map [4] |
|
是 |
学习率决定了每个周期中在 Adam 优化器指定方向上移动以最小化损失的步长。 |
patience |
整数或 Map [4] |
|
是 |
最大无产出连续周期数。 |
tolerance [5] |
浮点数或 Map [4] |
|
是 |
被认为有效的最小损失改进。 |
penalty [5] |
浮点数或 Map [4] |
|
是 |
逻辑回归使用的惩罚项。默认情况下不应用惩罚。 |
hiddenLayerSizes |
整数列表 |
|
是 |
表示每层神经元数量的整数列表。默认值指定了一个具有 1 个隐藏层(包含 100 个神经元)的多层感知器。 |
focusWeight |
浮点数或 Map [4] |
|
是 |
焦点损失因子的指数,用于使模型更关注训练集中难以分类的错误分类示例。默认值为 |
classWeights |
浮点数列表 |
|
是 |
交叉熵损失中每个类别的权重。列表长度必须为 2。第一个权重用于负面示例(缺失关系),第二个权重用于正面示例(实际关系)。 |
4. Map 应为 5. 此参数的范围在对数尺度上进行自动调优。 |
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
示例
我们可以向管道添加多个模型候选。
CALL gds.beta.pipeline.linkPrediction.addLogisticRegression('pipe')
YIELD parameterSpace
CALL gds.beta.pipeline.linkPrediction.addRandomForest('pipe', {numberOfDecisionTrees: 10})
YIELD parameterSpace
CALL gds.alpha.pipeline.linkPrediction.addMLP('pipe',
{hiddenLayerSizes: [4, 2], penalty: 0.5, patience: 2, classWeights: [0.55, 0.45], focusWeight: {range: [0.0, 0.1]}})
YIELD parameterSpace
CALL gds.beta.pipeline.linkPrediction.addLogisticRegression('pipe', {maxEpochs: 500, penalty: {range: [1e-4, 1e2]}})
YIELD parameterSpace
RETURN parameterSpace.RandomForest AS randomForestSpace, parameterSpace.LogisticRegression AS logisticRegressionSpace, parameterSpace.MultilayerPerceptron AS MultilayerPerceptronSpace
randomForestSpace | logisticRegressionSpace | MultilayerPerceptronSpace |
---|---|---|
[{criterion="GINI", maxDepth=2147483647, methodName="RandomForest", minLeafSize=1, minSplitSize=2, numberOfDecisionTrees=10, numberOfSamplesRatio=1.0}] |
[{batchSize=100, classWeights=[], focusWeight=0.0, learningRate=0.001, maxEpochs=100, methodName="LogisticRegression", minEpochs=1, patience=1, penalty=0.0, tolerance=0.001}, {batchSize=100, classWeights=[], focusWeight=0.0, learningRate=0.001, maxEpochs=500, methodName="LogisticRegression", minEpochs=1, patience=1, penalty={range=[0.0001, 100.0]}, tolerance=0.001}] |
[{batchSize=100, classWeights=[0.55, 0.45], focusWeight={range=[0.0, 0.1]}, hiddenLayerSizes=[4, 2], learningRate=0.001, maxEpochs=100, methodName="MultilayerPerceptron", minEpochs=1, patience=2, penalty=0.5, tolerance=0.001}] |
管道中的 parameterSpace
现在包含四个不同的模型候选,并已扩展为默认值。每个指定的模型候选都将在训练期间的模型选择中进行尝试。
这些是关于如何添加和配置模型候选的一些简单示例。有关如何调整每种方法的配置参数的更多信息,请参阅训练方法。 |
配置自动调优
为了找到好的模型,管道支持自动调优训练算法的参数。此外,可以使用下述过程来配置自动调优行为。否则,将使用默认的自动调优配置。目前,只能配置要评估的超参数设置的最大试验次数。
语法
CALL gds.alpha.pipeline.linkPrediction.configureAutoTuning(
pipelineName: String,
configuration: Map
)
YIELD
name: String,
nodePropertySteps: List of Map,
featureSteps: List of Map,
splitConfig: Map,
autoTuningConfig: Map,
parameterSpace: List of Map
名称 | 类型 | 描述 |
---|---|---|
pipelineName |
字符串 |
所创建管道的名称。 |
configuration |
Map |
自动调优的配置。 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
maxTrials |
整数 |
10 |
|
名称 | 类型 | 描述 |
---|---|---|
名称 |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
用于定义模型训练前拆分的配置。 |
autoTuningConfig |
Map |
用于定义自动调优行为的配置。 |
parameterSpace |
Map 列表 |
供训练模式用于模型选择的模型参数配置列表。 |
示例
CALL gds.alpha.pipeline.linkPrediction.configureAutoTuning('pipe', {
maxTrials: 2
}) YIELD autoTuningConfig
autoTuningConfig |
---|
{maxTrials=2} |
我们现在重新配置了自动调优,使其在训练期间最多尝试 2 个模型候选。