配置管道

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

此页面说明如何创建和配置节点分类管道。

创建管道

构建新管道的第一步是使用 gds.beta.pipeline.nodeClassification.create 创建一个。这会将一个可训练的管道对象存储在类型为 Node classification training pipeline 的管道目录中。这表示一个可配置的管道,稍后可以调用它进行训练,进而创建分类模型。后者也是一个模型,存储在类型为 NodeClassification 的目录中。

语法

创建管道语法
CALL gds.beta.pipeline.nodeClassification.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

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

以下将创建一个管道
CALL gds.beta.pipeline.nodeClassification.create('pipe')
表 3. 结果
name nodePropertySteps featureProperties splitConfig autoTuningConfig parameterSpace

"pipe"

[]

[]

{testFraction=0.3, validationFolds=3}

{maxTrials=10}

{LogisticRegression=[], MultilayerPerceptron=[], RandomForest=[]}

这表明新创建的管道尚未包含任何步骤,并且具有拆分和训练参数的默认值。

添加节点属性

节点分类管道可以在变异模式下执行一个或多个 GDS 算法,这些算法在内存图中创建节点属性。此类生成节点属性的步骤可以一个接一个地链接,并且以后可以将创建的属性用作 特征。此外,添加到训练管道中的节点属性步骤将在 训练 模型和分类管道 应用于分类 时执行。

要添加的过程的名称可以是完全限定的 GDS 过程名称,以 .mutate 结尾。可以省略结尾的 .mutate,也可以使用简写形式,例如 node2vec 而不是 gds.node2vec.mutate。但请注意,层级限定符仍然必须作为名称的一部分给出。

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

语法

添加节点属性语法
CALL gds.beta.pipeline.nodeClassification.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

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

以下操作将向管道添加节点属性步骤。这里我们假设输入图包含属性sizePerStory
CALL gds.beta.pipeline.nodeClassification.addNodeProperty('pipe', 'scaleProperties', {
  nodeProperties: 'sizePerStory',
  scaler: 'Mean',
  mutateProperty:'scaledSizes'
})
YIELD name, nodePropertySteps
表 7. 结果
name nodePropertySteps

"pipe"

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

scaledSizes属性稍后可用作特征。

添加特征

节点分类管道允许您选择可用节点属性的子集,将其用作机器学习模型的特征。执行管道时,所选的nodeProperties必须存在于输入图中,或者由前面的节点属性步骤创建。

语法

向管道语法添加特征
CALL gds.beta.pipeline.nodeClassification.selectFeatures(
  pipelineName: String,
  nodeProperties: List or String
)
YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: List of Map
表 8. 参数
名称 类型 描述

pipelineName

字符串

管道的名称。

nodeProperties

列表或字符串

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

表 9. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

以下操作将为管道选择特征。
CALL gds.beta.pipeline.nodeClassification.selectFeatures('pipe', ['scaledSizes', 'sizePerStory'])
YIELD name, featureProperties
表 10. 结果
name featureProperties

"pipe"

["scaledSizes", "sizePerStory"]

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

配置节点分割

节点分类管道管理将节点拆分为多个集合,这些集合用于训练、测试和验证在参数空间中定义的模型候选。配置拆分是可选的,如果省略,则将使用默认设置进行拆分。可以使用gds.model.list并产生splitConfig来检查管道的拆分配置。

节点分割在训练过程中按如下方式使用

  1. 输入图被分成两部分:训练图和测试图。请参阅下面的示例

  2. 训练图进一步细分为多个验证折叠,每个折叠包含一个训练部分和一个验证部分。请参阅下面的动画

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

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

  5. 然后,获胜模型将在整个训练图上重新训练。

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

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

下面我们以一个包含 12 个节点的图为例进行说明。首先,我们使用 0.25 的holdoutFraction将图分割成训练和测试子图。

train-test-image

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

validation-folds-image

语法

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

pipelineName

字符串

管道的名称。

configuration

Map

用于分割图的配置。

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

validationFolds

整数

3

模型选择期间使用的训练图的划分次数。

testFraction

双精度浮点数

0.3

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

表 13. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

以下操作将配置管道的分割
CALL gds.beta.pipeline.nodeClassification.configureSplit('pipe', {
 testFraction: 0.2,
  validationFolds: 5
})
YIELD splitConfig
表 14. 结果
splitConfig

{testFraction=0.2, validationFolds=5}

我们现在重新配置了管道的分割,这将在训练期间应用。

添加模型候选

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

  • gds.beta.pipeline.nodeClassification.addLogisticRegression

  • gds.beta.pipeline.nodeClassification.addRandomForest

  • gds.alpha.pipeline.nodeClassification.addMLP

有关 GDS 中可用训练方法的信息,逻辑回归、随机森林和多层感知器,请参阅训练方法

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

可以使用gds.model.list并选择性地仅产生parameterSpace来检查管道的参数空间。

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

语法

配置训练参数语法
CALL gds.beta.pipeline.nodeClassification.addLogisticRegression(
  pipelineName: String,
  config: Map
)
YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: Map
表 15. 参数
名称 类型 描述

pipelineName

字符串

管道的名称。

config

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

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

focusWeight

浮点数或映射 [1]

0.0

焦点损失因子的指数,使模型更专注于训练集中难以分类的错误分类示例。0.0的默认值表示未应用焦点并使用交叉熵。必须为正。

classWeights

浮点数列表

1.0 列表

损失函数中每个类的权重。第ith个权重用于第ith个类(按其整数值对类进行排序时)。列表的长度必须等于类的数量。

1. 映射应采用{range: [minValue, maxValue]}的形式。它由自动调整使用。

2. 此参数的范围在对数尺度上进行自动调整。

表 17. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

配置训练参数语法
CALL gds.beta.pipeline.nodeClassification.addRandomForest(
  pipelineName: String,
  config: Map
)
YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: Map
表 18. 参数
名称 类型 描述

pipelineName

字符串

管道的名称。

config

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

criterion

字符串

"GINI"

用于在决策树训练期间评估潜在节点分割的杂质标准。有效选项为"GINI""ENTROPY"(均不区分大小写)。

3. 映射应采用{range: [minValue, maxValue]}的形式。它由自动调整使用。

表 20. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

配置训练参数语法
CALL gds.alpha.pipeline.nodeClassification.addMLP(
  pipelineName: String,
  config: Map
)
YIELD
  name: String,
  nodePropertySteps: List of Map,
  featureProperties: List of String,
  splitConfig: Map,
  autoTuningConfig: Map,
  parameterSpace: Map
表 21. 参数
名称 类型 描述

pipelineName

字符串

管道的名称。

config

Map

潜在模型的多层感知器配置。模型允许的参数在下表中定义。

表 22. 多层感知器分类配置
名称 类型 默认值 可选 描述

batchSize

整数或映射 [4]

100

每个批次的节点数。

minEpochs

整数或映射 [4]

1

最小训练轮数。

maxEpochs

整数或映射 [4]

100

最大训练轮数。

learningRate [5]

浮点数或映射 [4]

0.001

学习率决定了在每个轮次中沿 Adam 优化器指示的方向移动时的步长,以最小化损失。

patience

整数或映射 [4]

1

无生产力的连续轮次的最大数量。

tolerance [5]

浮点数或映射 [4]

0.001

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

penalty [5]

浮点数或映射 [4]

0.0

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

hiddenLayerSizes

整数列表

[100]

表示每层神经元数量的整数列表。默认值指定一个具有 1 个隐藏层和 100 个神经元的多层感知器。

focusWeight

浮点数或映射 [4]

0.0

焦点损失因子的指数,使模型更专注于训练集中难以分类的错误分类示例。0.0的默认值表示未应用焦点并使用交叉熵。必须为正。

classWeights

浮点数列表

1.0 列表

交叉熵损失中每个类的权重。第ith个权重用于第ith个类(按其整数值对类进行排序时)。列表的长度必须等于类的数量。

4. 映射应采用{range: [minValue, maxValue]}的形式。它由自动调整使用。

5. 此参数的范围在对数尺度上进行自动调整。

表 23. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

我们可以向管道添加多个模型候选。

以下操作将添加一个具有默认配置的逻辑回归模型
CALL gds.beta.pipeline.nodeClassification.addLogisticRegression('pipe')
YIELD parameterSpace
以下操作将添加一个随机森林模型
CALL gds.beta.pipeline.nodeClassification.addRandomForest('pipe', {numberOfDecisionTrees: 5})
YIELD parameterSpace
以下操作将添加一个具有类加权焦点损失的多层感知器模型
CALL gds.alpha.pipeline.nodeClassification.addMLP('pipe', {classWeights: [0.4,0.3,0.3], focusWeight: 0.5})
YIELD parameterSpace
以下操作将添加一个具有范围参数的逻辑回归模型
CALL gds.beta.pipeline.nodeClassification.addLogisticRegression('pipe', {maxEpochs: 500, penalty: {range: [1e-4, 1e2]}})
YIELD parameterSpace
RETURN parameterSpace.RandomForest AS randomForestSpace, parameterSpace.LogisticRegression AS logisticRegressionSpace, parameterSpace.MultilayerPerceptron AS MultilayerPerceptronSpace
表 24. 结果
randomForestSpace logisticRegressionSpace MultilayerPerceptronSpace

[{criterion="GINI", maxDepth=2147483647, methodName="RandomForest", minLeafSize=1, minSplitSize=2, numberOfDecisionTrees=5, 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.4, 0.3, 0.3], focusWeight=0.5, hiddenLayerSizes=[100], learningRate=0.001, maxEpochs=100, methodName="MultilayerPerceptron", minEpochs=1, patience=1, penalty=0.0, tolerance=0.001}]

管道中的parameterSpace现在包含了四个不同的模型候选,并扩展了默认值。在训练中的模型选择过程中,将尝试每个指定的模型候选。

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

配置自动调优

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

语法

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

pipelineName

字符串

创建的管道的名称。

configuration

Map

自动调优的配置。

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

maxTrials

整数

10

maxTrials的值决定了在训练管道时应评估和比较的最大允许模型候选数。如果参数空间中不存在范围,则忽略maxTrials,并评估参数空间中的每个模型候选。

表 27. 结果
名称 类型 描述

name

字符串

管道的名称。

nodePropertySteps

Map 列表

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

featureProperties

字符串列表

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

splitConfig

Map

定义模型训练前拆分的配置。

autoTuningConfig

Map

定义自动调整行为的配置。

parameterSpace

Map 列表

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

示例

以下将配置自动调优的最大尝试次数
CALL gds.alpha.pipeline.nodeClassification.configureAutoTuning('pipe', {
  maxTrials: 2
}) YIELD autoTuningConfig
表 28. 结果
autoTuningConfig

{maxTrials=2}

我们现在重新配置了自动调优,以便在训练期间最多尝试 100 个模型候选。