应用训练好的模型进行预测
此功能处于 Alpha 阶段。有关功能分级的更多信息,请参阅 API 分级。
在之前的章节中,我们已经了解了如何构建节点回归(Node Regression)训练流水线并对其进行训练以生成回归模型。经过训练后,生成的、可运行的模型类型为 NodeRegression,并存储在模型目录中。该回归模型可应用于图目录中的图,以预测未知节点的属性值。
由于模型是基于使用特征流水线创建的特征进行训练的,因此相同的特征流水线会被存储在模型中,并在预测时执行。与训练期间一样,特征流水线中节点属性步骤所创建的中间节点属性是瞬态的,在执行后不可见。
预测图必须包含流水线所需的属性,且所使用的数组属性必须与训练图中的维度相同。如果预测图和训练图不同,它们最好具有相似的来源和语义,以便模型能够实现良好的泛化。
语法
CALL gds.alpha.pipeline.nodeRegression.predict.stream(
graphName: String,
configuration: Map
) YIELD
nodeId: Integer,
predictedValue: Float
| 名称 | 类型 | 默认 | 可选 | 描述 |
|---|---|---|---|---|
graphName |
字符串 |
|
否 |
存储在目录中的图的名称。 |
配置 |
Map |
|
是 |
算法特定配置和/或图过滤配置。 |
| 名称 | 类型 | 默认 | 可选 | 描述 |
|---|---|---|---|---|
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 |
字符串 |
|
否 |
存储在目录中的图的名称。 |
配置 |
Map |
|
是 |
算法特定配置和/或图过滤配置。 |
| 名称 | 类型 | 默认 | 可选 | 描述 |
|---|---|---|---|---|
modelName |
字符串 |
|
否 |
模型目录中 NodeRegression 模型的名称。 |
mutateProperty |
字符串 |
|
否 |
GDS 图中写入预测属性的节点属性名称。 |
targetNodeLabels(目标节点标签) |
字符串列表 |
|
是 |
使用给定的 targetNodeLabels 过滤命名图。 |
relationshipTypes |
字符串列表 |
|
是 |
使用给定的关系类型过滤命名图。 |
整数 |
|
是 |
用于运行算法的并发线程数。 |
|
字符串 |
|
是 |
可以提供一个 ID 以更轻松地跟踪算法的进度。 |
|
布尔值 |
|
是 |
如果禁用,进度百分比将不会被记录。 |
|
| 名称 | 类型 | 描述 |
|---|---|---|
preProcessingMillis |
整数 |
预处理图的毫秒数。 |
computeMillis |
整数 |
运行算法的毫秒数。 |
postProcessingMillis |
整数 |
计算全局指标所耗费的毫秒数。 |
mutateMillis |
整数 |
向内存中图添加属性的毫秒数。 |
nodePropertiesWritten |
整数 |
已写入的节点属性数量。 |
配置 |
Map |
运行算法所使用的配置。 |
示例
在以下示例中,我们将展示如何使用回归模型来预测内存图中节点的属性值。为此,我们首先必须在模型目录中注册一个已经训练好的模型。我们将使用在训练示例中训练过的模型,并将其命名为 'nr-pipeline-model'。
流式传输 (Stream)
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 |
|---|---|
|
|
|
|
|
|
正如我们所见,模型预测“棕褐色”房子的价格比“黄色”房子便宜。考虑到“黄色”房子只有一层,这看起来可能不太准确。为了获得更符合我们预期的预测结果,我们可能需要调整模型候选参数。
变异 (Mutate)
mutate 执行模式会更新命名图,为每个节点添加包含预测值的新节点属性。新属性的名称通过强制配置参数 mutateProperty 指定。结果是一行汇总数据,包含有关计时和写入属性数量的信息。当多个算法结合使用时,mutate 模式特别有用。
有关 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 对其进行检查。