应用训练好的模型进行预测

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

在前面的章节中,我们已经了解了如何构建节点回归训练管道并对其进行训练以生成回归模型。在 训练 后,生成的、可运行的模型类型为 NodeRegression,并驻留在 模型目录 中。回归模型可以应用于图目录中的图,以预测以前未见节点的属性值。

由于模型已在使用特征管道创建的特征上进行训练,因此相同的特征管道存储在模型中并在预测时执行。与训练期间一样,特征管道中节点属性步骤创建的中间节点属性是临时的,在执行后不可见。

预测图必须包含管道所需的属性,并且使用的数组属性必须与训练图中的维度相同。如果预测图和训练图不同,那么它们具有相似的来源和语义也很有益,以便模型能够很好地泛化。

语法

每个模式的节点回归预测语法
以流模式运行节点回归
CALL gds.alpha.pipeline.nodeRegression.predict.stream(
  graphName: String,
  configuration: Map
) YIELD
  nodeId: Integer,
  predictedValue: Float
表 1. 参数
名称 类型 默认值 可选 描述

graphName

字符串

n/a

存储在目录中的图的名称。

configuration

映射

{}

算法特定和/或图过滤的配置。

表 2. 配置
名称 类型 默认值 可选 描述

modelName

字符串

n/a

模型目录中 NodeRegression 模型的名称。

targetNodeLabels

字符串列表

来自 trainConfig

使用给定的 targetNodeLabels 过滤命名图。

relationshipTypes

字符串列表

来自 trainConfig

使用给定的关系类型过滤命名图。

concurrency

整数

4

用于运行算法的并发线程数。

jobId

字符串

内部生成

一个 ID,可以提供它来更轻松地跟踪算法的进度。

表 3. 结果
名称 类型 描述

nodeId

整数

节点 ID。

predictedValue

浮点数

此节点的预测属性值。

以变异模式运行节点回归
CALL gds.alpha.pipeline.nodeRegression.predict.mutate(
  graphName: String,
  configuration: Map
) YIELD
  preProcessingMillis: Integer,
  computeMillis: Integer,
  postProcessingMillis: Integer,
  mutateMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 4. 参数
名称 类型 默认值 可选 描述

graphName

字符串

n/a

存储在目录中的图的名称。

configuration

映射

{}

算法特定和/或图过滤的配置。

表 5. 配置
名称 类型 默认值 可选 描述

modelName

字符串

n/a

模型目录中 NodeRegression 模型的名称。

mutateProperty

字符串

n/a

GDS 图中写入预测属性的节点属性。

targetNodeLabels

字符串列表

来自 trainConfig

使用给定的 targetNodeLabels 过滤命名图。

relationshipTypes

字符串列表

来自 trainConfig

使用给定的关系类型过滤命名图。

concurrency

整数

4

用于运行算法的并发线程数。

jobId

字符串

内部生成

一个 ID,可以提供它来更轻松地跟踪算法的进度。

表 6. 结果

名称 类型 描述

preProcessingMillis

整数

图预处理所耗费的毫秒数。

computeMillis

整数

运行算法所耗费的毫秒数。

postProcessingMillis

整数

计算全局指标所耗费的毫秒数。

mutateMillis

整数

向内存图添加属性所耗费的毫秒数。

nodePropertiesWritten

整数

写入的节点属性数量。

configuration

映射

运行算法所使用的配置。

示例

在以下示例中,我们将展示如何使用回归模型来预测内存图中节点的属性值。为此,我们必须首先在模型目录中注册一个已训练的模型。我们将使用在训练示例中训练的模型,其名称为'nr-pipeline-model'

CALL gds.alpha.pipeline.nodeRegression.predict.stream('myGraph', {
  modelName: 'nr-pipeline-model',
  targetNodeLabels: ['UnknownHouse']
}) YIELD nodeId, predictedValue
WITH gds.util.asNode(nodeId) AS houseNode, predictedValue AS predictedPrice
RETURN
  houseNode.color AS houseColor, predictedPrice
  ORDER BY predictedPrice
表 7. 结果
houseColor predictedPrice

"Tan"

87.26599999999999

"Yellow"

107.572

"Pink"

124.43800000000002

如我们所见,模型预测“Tan”房屋比“Yellow”房屋更便宜。考虑到“Yellow”房屋只有一层,这可能看起来不准确。为了获得更符合我们预期的预测,可能需要调整模型候选参数。

修改

mutate执行模式使用包含每个节点预测值的新节点属性更新命名图。新属性的名称使用必填配置参数mutateProperty指定。结果是一行汇总行,其中包含有关时间和写入属性数量的信息。当多个算法结合使用时,mutate模式尤其有用。

有关mutate模式的更多详细信息,请参阅修改

CALL gds.alpha.pipeline.nodeRegression.predict.mutate('myGraph', {
  targetNodeLabels: ['UnknownHouse'],
  modelName: 'nr-pipeline-model',
  mutateProperty: 'predictedPrice'
}) YIELD nodePropertiesWritten
表 8. 结果
nodePropertiesWritten

3

输出告诉我们,我们为每个UnknownHouse节点添加了一个属性。要使用此属性,我们可以使用predictedPrice属性运行另一个算法,或者使用gds.graph.nodeProperty.stream检查它。