配置管道

此功能处于 Alpha 阶段。有关功能分级的更多信息,请参阅 API 分级

本页面介绍了如何创建和配置节点回归流水线。

创建流水线

构建新流水线的第一步是使用 gds.alpha.pipeline.nodeRegression.create 进行创建。这会在流水线目录中存储一个类型为 Node regression training pipeline(节点回归训练流水线)的可训练流水线对象。它代表了一个可配置的流水线,稍后可被调用以进行训练,从而创建一个回归模型。后者是一个存储在目录中、类型为 NodeRegression 的模型。

语法

创建流水线语法
CALL gds.alpha.pipeline.nodeRegression.create(
  pipelineName: String
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 1. 参数
名称 类型 描述

pipelineName

字符串

所创建流水线的名称。

表 2. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

以下代码将创建一个流水线
CALL gds.alpha.pipeline.nodeRegression.create('pipe')
表 3. 结果
名称 (name) nodePropertySteps featureProperties splitConfig autoTuningConfig parameterSpace

"pipe"

[]

[]

{testFraction=0.3, validationFolds=3}

{maxTrials=10}

{LinearRegression=[], RandomForest=[]}

这表明新创建的流水线尚不包含任何步骤,并且对拆分和训练参数使用了默认值。

添加节点属性

节点回归流水线可以以变异(mutate)模式执行一个或多个 GDS 算法,在内存图(in-memory graph)中创建节点属性。这些生成节点属性的步骤可以一个接一个地链接,创建的属性随后可以用作特征。此外,添加到训练流水线的节点属性步骤不仅会在训练模型时执行,也会在回归流水线应用于回归时执行。

应添加的过程名称可以是完整的 GDS 过程名称,以 .mutate 结尾。末尾的 .mutate 可以省略,也可以使用简写形式,例如使用 node2vec 代替 gds.node2vec.mutate。但请注意,作为名称的一部分,必须提供层级限定。

例如,预处理算法可以用作节点属性步骤。

语法

添加节点属性语法
CALL gds.alpha.pipeline.nodeRegression.addNodeProperty(
  pipelineName: String,
  procedureName: String,
  procedureConfiguration: Map
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 4. 参数
名称 类型 描述

pipelineName

字符串

流水线的名称。

procedureName

字符串

要添加到流水线中的过程名称。

procedureConfiguration

Map

用于生成节点属性过程配置的映射。它支持所有过程特定的配置,但不包括 nodeLabelsrelationshipTypes 参数。此外,它还支持下表中列出的上下文参数。

表 5. 节点属性步骤上下文配置
名称 类型 默认 描述

contextNodeLabels

字符串列表

[]

作为上下文添加的附加节点标签。

contextRelationshipTypes

字符串列表

[]

作为上下文添加的附加关系类型。

在训练期间,上下文配置与训练配置相结合,为每个节点属性步骤生成最终的节点标签和关系类型过滤器。

表 6. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

以下代码将向流水线添加一个节点属性步骤。此处我们假设输入图包含属性 sizePerStory
CALL gds.alpha.pipeline.nodeRegression.addNodeProperty('pipe', 'scaleProperties', {
  nodeProperties: 'sizePerStory',
  scaler: 'MinMax',
  mutateProperty:'scaledSizes'
}) YIELD name, nodePropertySteps
表 7. 结果
名称 (name) nodePropertySteps

"pipe"

[{config={contextNodeLabels=[], contextRelationshipTypes=[], mutateProperty="scaledSizes", nodeProperties="sizePerStory", scaler="MinMax"}, name="gds.scaleProperties.mutate"}]

scaledSizes 属性稍后可用作特征。

添加特征

节点回归流水线允许您选择可用节点属性的子集,用作机器学习模型的特征。执行流水线时,所选的 nodeProperties 必须已存在于输入图中,或由之前的节点属性步骤创建。

语法

向流水线添加特征的语法
CALL gds.alpha.pipeline.nodeRegression.selectFeatures(
  pipelineName: String,
  featureProperties: List or String
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 8. 参数
名称 类型 描述

pipelineName

字符串

流水线的名称。

featureProperties

列表或字符串

用作模型特征的节点属性。

表 9. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

以下代码将为流水线选择两个特征属性。
CALL gds.alpha.pipeline.nodeRegression.selectFeatures('pipe', ['scaledSizes', 'sizePerStory'])
YIELD name, featureProperties
表 10. 结果
名称 (name) featureProperties

"pipe"

["scaledSizes", "sizePerStory"]

此处我们假设输入图包含属性 sizePerStory,且 scaledSizes 是在 nodePropertyStep 中创建的。

配置节点拆分

节点回归流水线管理将节点拆分为多个集合,用于训练、测试和验证参数空间中定义的候选模型。配置拆分是可选的,如果省略,将使用默认设置进行拆分。可以通过使用 gds.model.list 并输出 splitConfig 来检查流水线的拆分配置。

节点拆分在训练过程中的使用方式如下:

  1. 输入图被拆分为两部分:训练图和测试图。参见下方的示例

  2. 训练图进一步划分为多个验证折(validation folds),每个折包含一个训练部分和一个验证部分。参见下方的动画

  3. 每个候选模型在每个训练部分上进行训练,并在相应的验证部分上进行评估。

  4. 根据主要指标平均得分最高的模型将赢得训练。

  5. 获胜模型随后将在整个训练图上进行重训练。

  6. 获胜模型将在训练图和测试图上进行评估。

  7. 获胜模型将在整个原始图上进行重训练。

下面我们以一个 12 个节点的图为例。首先,我们使用 0.25 的 holdoutFraction 将其拆分为训练和测试子图。

train-test-image

然后,我们进行三次验证折,首先将训练子图拆分为 3 个不相交的子集(s1、s2 和 s3),然后轮流使用其中一个子集进行验证。对于每一折,所有候选模型都使用红色节点进行训练,并使用绿色节点进行验证。

validation-folds-image

语法

配置节点拆分语法
CALL gds.alpha.pipeline.nodeRegression.configureSplit(
  pipelineName: String,
  configuration: Map
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 11. 参数
名称 类型 描述

pipelineName

字符串

流水线的名称。

配置

Map

用于拆分图的配置。

表 12. 配置
名称 类型 默认 描述

validationFolds

整数

3

模型选择期间用于训练图的划分数量。

testFraction

双精度浮点数

0.3

保留用于测试的图的比例。必须在 (0, 1) 范围内。用于训练的比例为 1 - testFraction

表 13. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

以下代码将配置流水线的图拆分
CALL gds.alpha.pipeline.nodeRegression.configureSplit('pipe', {
  testFraction: 0.2,
  validationFolds: 5
}) YIELD splitConfig
表 14. 结果
splitConfig

{testFraction=0.2, validationFolds=5}

我们现在重新配置了流水线的图拆分,这将用于训练过程中。

添加候选模型

流水线包含一个候选模型配置集合,该集合最初为空。此集合称为参数空间。每个候选模型配置都包含训练参数的固定值或范围。当存在范围时,范围内的值由自动调优算法自动确定,请参阅自动调优。必须使用以下过程之一将一个或多个模型配置添加到训练流水线的参数空间中:

  • gds.alpha.pipeline.nodeRegression.addLinearRegression

  • gds.alpha.pipeline.nodeRegression.addRandomForest

有关 GDS 中可用训练方法的详细信息,请参阅训练方法

训练流水线中,我们将进一步解释如何训练、评估和比较配置的候选模型。

流水线的参数空间可以通过使用 gds.model.list 并输出 parameterSpace 来检查。

在训练之前,必须至少向流水线添加一个候选模型。

语法

添加线性回归候选模型
CALL gds.alpha.pipeline.nodeRegression.addLinearRegression(
  pipelineName: String,
  configuration: Map
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: Map
表 15. 参数
名称 类型 描述

pipelineName

字符串

流水线的名称。

配置

Map

候选模型的线性回归配置。模型候选支持的参数定义在下表中。

表 16. 线性回归配置
名称 类型 默认 可选 描述

batchSize

整数或映射 [1]

100

每批次的节点数。

minEpochs

整数或映射 [1]

1

最小训练轮数。

maxEpochs

整数或映射 [1]

100

最大训练轮数。

learningRate [2]

浮点数或映射 [1]

0.001

学习率决定了每一轮在 Adam 优化器指定的方向上移动以最小化损失时的步长。

patience

整数或映射 [1]

1

无提升的最大连续轮数。

tolerance [2]

浮点数或映射 [1]

0.001

被视为有效的损失最小改进值。

penalty [2]

浮点数或映射 [1]

0.0

用于逻辑回归的惩罚项。默认情况下,不应用惩罚。

1. 映射应为 {range: [minValue, maxValue]} 格式。它由自动调优使用。

2. 该参数的范围在对数刻度上自动调优。

表 17. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

添加随机森林候选模型
CALL gds.alpha.pipeline.nodeRegression.addRandomForest(
  pipelineName: String,
  configuration: Map
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: Map
表 18. 参数
名称 类型 描述

pipelineName

字符串

流水线的名称。

配置

Map

候选模型的随机森林配置。模型候选支持的参数定义在下表中。

表 19. 随机森林回归配置
名称 类型 默认 可选 描述

maxFeaturesRatio

浮点数或映射 [3]

1 / sqrt(|features|)

寻找最佳拆分时要考虑的特征比例。

numberOfSamplesRatio

浮点数或映射 [3]

1.0

每个决策树考虑的样本比例。我们使用有放回采样。值为 0 表示使用每个训练样本(不采样)。

numberOfDecisionTrees

整数或映射 [3]

100

决策树的数量。

maxDepth

整数或映射 [3]

无最大深度

决策树的最大深度。

minLeafSize

整数或映射 [3]

1

决策树叶节点所需的最小样本数。必须严格小于 minSplitSize

minSplitSize

整数或映射 [3]

2

决策树中拆分内部节点所需的最小样本数。必须严格大于 minLeafSize

3. 映射应为 {range: [minValue, maxValue]} 格式。它由自动调优使用。

表 20. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

我们可以向流水线添加多个模型候选者。

以下代码将添加一个具有默认配置的线性回归候选模型
CALL gds.alpha.pipeline.nodeRegression.addLinearRegression('pipe')
YIELD parameterSpace
以下代码将添加一个随机森林候选模型
CALL gds.alpha.pipeline.nodeRegression.addRandomForest('pipe', {numberOfDecisionTrees: 5})
YIELD parameterSpace
以下代码将添加一个带有范围参数的线性回归候选模型
CALL gds.alpha.pipeline.nodeRegression.addLinearRegression('pipe', {maxEpochs: 500, penalty: {range: [1e-4, 1e2]}})
YIELD parameterSpace
RETURN parameterSpace.RandomForest AS randomForestSpace, parameterSpace.LinearRegression AS linearRegressionSpace
表 21. 结果
randomForestSpace linearRegressionSpace

[{maxDepth=2147483647, methodName="RandomForest", minLeafSize=1, minSplitSize=2, numberOfDecisionTrees=5, numberOfSamplesRatio=1.0}]

[{batchSize=100, learningRate=0.001, maxEpochs=100, methodName="LinearRegression", minEpochs=1, patience=1, penalty=0.0, tolerance=0.001}, {batchSize=100, learningRate=0.001, maxEpochs=500, methodName="LinearRegression", minEpochs=1, patience=1, penalty={range=[0.0001, 100.0]}, tolerance=0.001}]

流水线中的 parameterSpace 现在包含三个不同的候选模型,并扩展了默认值。在训练期间的模型选择过程中,将尝试每个指定的候选模型。

这些关于如何添加和配置候选模型的示例比较简单。请参阅训练方法,了解有关如何调整每种方法的配置参数的更多信息。

配置自动调优

为了找到合适的模型,流水线支持自动调优训练算法的参数。可以选择使用下面描述的过程来配置自动调优行为。否则,将使用默认的自动调优配置。目前,只能配置评估超参数设置的最大试验次数。

语法

配置自动调优语法
CALL gds.alpha.pipeline.nodeRegression.configureAutoTuning(
  pipelineName: String,
  configuration: Map
) YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 22. 参数
名称 类型 描述

pipelineName

字符串

所创建流水线的名称。

配置

Map

自动调优的配置。

表 23. 配置
名称 类型 默认 描述

maxTrials

整数

10

maxTrials 的值决定了在训练流水线时应评估和比较的最大允许模型候选者数量。如果参数空间中不存在范围,则 maxTrials 被忽略,并且参数空间中的每个模型候选者都会被评估。

表 24. 结果
名称 类型 描述

名称 (name)

字符串

流水线的名称。

nodePropertySteps

映射列表

节点属性步骤的配置列表。

featureProperties

字符串列表

用作特征的节点属性列表。

splitConfig

Map

用于定义模型训练前数据拆分的配置。

autoTuningConfig

Map

用于定义自动调优行为的配置。

parameterSpace

映射列表

模型参数配置列表,训练模式使用这些配置进行模型选择。

示例

以下代码将配置自动调优的最大试验次数
CALL gds.alpha.pipeline.nodeRegression.configureAutoTuning('pipe', {
  maxTrials: 100
}) YIELD autoTuningConfig
表 25. 结果
autoTuningConfig

{maxTrials=100}

我们明确配置了自动调优,在训练期间最多尝试 100 个候选模型。