配置管道
此功能处于测试阶段。有关功能阶段的更多信息,请参阅 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 |
字符串 |
创建的管道的名称。 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
定义模型训练前的拆分的配置。 |
autoTuningConfig |
Map |
定义自动调整行为的配置。 |
parameterSpace |
Map 列表 |
模型的参数配置列表,训练模式使用这些配置进行模型选择。 |
示例
CALL gds.beta.pipeline.linkPrediction.create('pipe')
name | 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 |
用于生成过程配置的映射。它包含特定于过程的配置,除了 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
contextNodeLabels |
字符串列表 |
|
作为上下文添加的其他节点标签。 |
contextRelationshipTypes |
字符串列表 |
|
作为上下文添加的其他关系类型。 |
在训练期间,上下文配置与训练配置相结合,为每个节点属性步骤生成最终的节点标签和关系类型过滤器。
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
nodePropertySteps |
Map 列表 |
节点属性步骤的配置列表。 |
featureSteps |
Map 列表 |
特征步骤的配置列表。 |
splitConfig |
Map |
定义模型训练前的拆分的配置。 |
autoTuningConfig |
Map |
定义自动调整行为的配置。 |
parameterSpace |
Map 列表 |
模型的参数配置列表,训练模式使用这些配置进行模型选择。 |
示例
CALL gds.beta.pipeline.linkPrediction.addNodeProperty('pipe', 'fastRP', {
mutateProperty: 'embedding',
embeddingDimension: 256,
randomSeed: 42
})
name | 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=[]} |
现在,管道将在模型训练前和训练后的模型应用于预测时,都以变异模式执行fastRP 算法。这确保了embedding
属性可用作链接特征的输入。
添加链接特征
链接预测管道执行一系列步骤来计算机器学习模型使用的特征。特征步骤为给定的节点对计算特征向量。对于每个节点对,结果会被连接成单个的链接特征向量。链接特征向量中特征的顺序遵循特征步骤的顺序。与节点属性步骤类似,特征步骤在训练和预测时也会执行。下面描述了获取特征的支持方法。。
语法
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 |
字符串 |
featureType 确定用于计算链接特征的方法。请参阅支持的类型。 |
configuration |
Map |
添加链接特征的配置。 |
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
nodeProperties |
字符串列表 |
否 |
应作为输入使用的节点属性的名称。 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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 |
字符串 |
n/a |
指定应使用哪些关系作为负关系,添加到 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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 |
模型候选的逻辑回归配置。模型允许的参数在下一张表中定义。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
|
整数或映射 [1] |
|
是 |
每个批次的节点数。 |
|
整数或映射 [1] |
|
是 |
最小训练轮数。 |
|
整数或映射 [1] |
|
是 |
最大训练轮数。 |
|
浮点数或映射 [1] |
|
是 |
学习率决定了在每个轮次中沿 Adam 优化器指示的方向移动以最小化损失时的步长。 |
|
整数或映射 [1] |
|
是 |
连续无生产性轮次的最多次数。 |
|
浮点数或映射 [1] |
|
是 |
要视为有生产性的损失的最小改进。 |
|
浮点数或映射 [1] |
|
是 |
用于逻辑回归的惩罚。默认情况下,不应用任何惩罚。 |
|
浮点数或映射 [1] |
|
是 |
焦点损失因子的指数,用于使模型在训练集中更多地关注困难的、错误分类的示例。默认值为 |
|
浮点数列表 |
|
是 |
损失函数中每个类别的权重。列表长度必须为2。第一个权重用于负样本(缺失关系),第二个权重用于正样本(实际关系)。 |
1. 映射应采用 2. 此参数的范围在对数尺度上自动调整。 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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 |
浮点数或映射 [3] |
|
是 |
寻找最佳分割时要考虑的特征比例 |
numberOfSamplesRatio |
浮点数或映射 [3] |
|
是 |
每个决策树要考虑的样本比例。我们使用有放回抽样。值为 |
numberOfDecisionTrees |
整数或映射 [3] |
|
是 |
决策树的数量。 |
maxDepth |
整数或映射 [3] |
|
是 |
决策树的最大深度。 |
minLeafSize |
整数或映射 [3] |
|
是 |
决策树中叶子节点的最小样本数。必须严格小于 |
minSplitSize |
整数或映射 [3] |
|
是 |
决策树中分割内部节点所需的最小样本数。必须严格大于 |
criterion |
字符串 |
|
是 |
用于在决策树训练期间评估潜在节点分割的杂质标准。有效选项为 |
3. 映射应采用 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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 |
整数或映射 [4] |
|
是 |
每个批次的节点数。 |
minEpochs |
整数或映射 [4] |
|
是 |
最小训练轮数。 |
maxEpochs |
整数或映射 [4] |
|
是 |
最大训练轮数。 |
learningRate [5] |
浮点数或映射 [4] |
|
是 |
学习率决定了在每个轮次中沿 Adam 优化器指示的方向移动以最小化损失时的步长。 |
patience |
整数或映射 [4] |
|
是 |
连续无生产性轮次的最多次数。 |
tolerance [5] |
浮点数或映射 [4] |
|
是 |
要视为有生产性的损失的最小改进。 |
penalty [5] |
浮点数或映射 [4] |
|
是 |
用于逻辑回归的惩罚。默认情况下,不应用任何惩罚。 |
hiddenLayerSizes |
整数列表 |
|
是 |
表示每一层神经元数量的整数列表。默认值指定一个具有1个隐藏层(100个神经元)的MLP。 |
focusWeight |
浮点数或映射 [4] |
|
是 |
焦点损失因子的指数,用于使模型在训练集中更多地关注困难的、错误分类的示例。默认值为 |
classWeights |
浮点数列表 |
|
是 |
交叉熵损失中每个类别的权重。列表长度必须为2。第一个权重用于负样本(缺失关系),第二个权重用于正样本(实际关系)。 |
4. 映射应采用 5. 此参数的范围在对数尺度上自动调整。 |
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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 |
|
名称 | 类型 | 描述 |
---|---|---|
name |
字符串 |
管道的名称。 |
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个模型候选。