应用训练好的模型进行预测
此功能处于 alpha 阶段。有关功能阶段的更多信息,请参阅 API 阶段。
在前面的章节中,我们已经了解了如何构建节点回归训练管道并对其进行训练以生成回归模型。在 训练 后,生成的、可运行的模型类型为 NodeRegression
,并驻留在 模型目录 中。回归模型可以应用于图目录中的图,以预测以前未见节点的属性值。
由于模型已在使用特征管道创建的特征上进行训练,因此相同的特征管道存储在模型中并在预测时执行。与训练期间一样,特征管道中节点属性步骤创建的中间节点属性是临时的,在执行后不可见。
预测图必须包含管道所需的属性,并且使用的数组属性必须与训练图中的维度相同。如果预测图和训练图不同,那么它们具有相似的来源和语义也很有益,以便模型能够很好地泛化。
语法
CALL gds.alpha.pipeline.nodeRegression.predict.stream(
graphName: String,
configuration: Map
) YIELD
nodeId: Integer,
predictedValue: Float
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
modelName |
字符串 |
|
否 |
模型目录中 NodeRegression 模型的名称。 |
targetNodeLabels |
字符串列表 |
|
是 |
使用给定的 targetNodeLabels 过滤命名图。 |
relationshipTypes |
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 |
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供它来更轻松地跟踪算法的进度。 |
名称 | 类型 | 描述 |
---|---|---|
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
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
configuration |
映射 |
|
是 |
算法特定和/或图过滤的配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
modelName |
字符串 |
|
否 |
模型目录中 NodeRegression 模型的名称。 |
mutateProperty |
字符串 |
|
否 |
GDS 图中写入预测属性的节点属性。 |
targetNodeLabels |
字符串列表 |
|
是 |
使用给定的 targetNodeLabels 过滤命名图。 |
relationshipTypes |
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 |
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
一个 ID,可以提供它来更轻松地跟踪算法的进度。 |
名称 | 类型 | 描述 |
---|---|---|
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
houseColor | predictedPrice |
---|---|
|
|
|
|
|
|
如我们所见,模型预测“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
nodePropertiesWritten |
---|
3 |
输出告诉我们,我们为每个UnknownHouse
节点添加了一个属性。要使用此属性,我们可以使用predictedPrice
属性运行另一个算法,或者使用gds.graph.nodeProperty.stream
检查它。