GraphSAGE 节点分类预测

要应用 GraphSAGE 节点分类预测,必须首先使用 GraphSAGE 节点分类训练 端点训练一个 GraphSAGE 节点分类模型。

本页提供了如何使用 GraphSAGE 节点分类预测端点来预测新节点类别标签的说明。

语法

本节介绍用于执行 GraphSAGE 节点分类预测算法的语法。

运行 GraphSAGE 节点分类预测。
CALL graph.gs_nc_predict(
  'CPU_X64_XS',                    (1)
  {
    ['defaultTablePrefix': '...',] (2)
    'project': {...},              (3)
    'compute': {...},              (4)
    'write':   {...}               (5)
  }
);
1 计算池选择器。
2 表引用可选前缀。
3 项目配置。
4 计算配置。
5 写入配置。
表 1. 参数
名称 类型 默认值 可选 描述

computePoolSelector

字符串

不适用

用于运行 GraphSAGE 节点分类预测作业的计算池选择器。

configuration

映射

{}

图项目、算法计算和结果回写配置。

对于此算法,如果输入图较大或模型较深,我们建议使用 GPU 计算池;否则,也可以使用 CPU 计算池。

配置映射包含以下三个条目。

有关以下项目配置的更多详细信息,请参阅项目文档
表 2. 项目配置
名称 类型

nodeTables

节点表列表。

relationshipTables

关系类型到关系表的映射。

请注意,为了使 GraphSAGE 正确传播节点嵌入的更新,每种类型的节点都必须是至少一种关系类型的目标。orientation 参数可用于为仅作为关系源的节点类型添加反向关系(使用“REVERSE”或“UNDIRECTED”方向)。

表 3. 计算配置
名称 类型 默认值 可选 描述

modelname

字符串

不适用

要使用的已训练模型的名称

batchSize

整数

继承

每个批次中要预测的目标节点数量。如果未提供,将使用训练模型时所用的评估批处理大小。

randomSeed

整数

一个随机整数

用于为所有计算随机性设定种子的数字

有关以下写入配置的更多详细信息,请参阅写入文档
表 4. 写入配置
名称 类型 默认值 可选 描述

nodeLabel

字符串

不适用

内存图中要写入节点属性的节点标签。

outputTable

字符串

不适用

Snowflake 数据库中写入节点属性的表。

示例

在我们的示例中,我们将使用包含演员、导演、电影和流派的 IMDB 数据集。这些实体都关联有关键词,我们将它们用作节点的特征。它们通过演员参演电影和导演执导电影的关系连接。目标是预测电影的流派。

我们有一个名为 imdb 的数据库,其中包含以下表:

  • actor,包含列 nodeidplot_keywords

  • movie,包含列 nodeidplot_keywordsgenre

  • director,包含列 nodeidplot_keywords

  • acted_in,包含列 sourcenodeidtargetnodeid,分别表示 actormovie 节点 ID

  • directed_in,包含列 sourcenodeidtargetnodeid,分别表示 directormovie 节点 ID

plot_keywords 列包含与节点关联的关键词,编码为浮点向量。genre 列包含电影节点的目标类别标签,这是我们想要预测的。

您可以通过按照 GitHub 上的说明将此数据集上传到您的 Snowflake 账户:neo4j-product-examples/snowflake-graph-analytics

预测查询

我们假设已使用 GraphSAGE 节点分类训练 端点(参见示例)训练了一个名为 nc-imdb 的模型。

在下面的预测查询中,我们像训练时一样指定项目配置。我们只需在 compute 配置中指定模型名称,因为其余部分都从训练配置中继承。

另请注意,我们提供了 write 配置来指定存储计算预测的表。

要运行此查询,需要为应用程序、您的消费者角色和您的环境进行必要的授权设置。有关更多信息,请参阅入门页面。

我们还假设应用程序名称是默认的 Neo4j_Graph_Analytics。如果您在安装过程中选择了不同的应用程序名称,请将其替换。

CALL Neo4j_Graph_Analytics.graph.gs_nc_predict('GPU_NV_S', {
    'defaultTablePrefix': 'imdb.gml',
    'project': {
        'nodeTables': ['actor', 'director', 'movie'],
        'relationshipTables': {
            'acted_in': {
                'sourceTable': 'actor',
                'targetTable': 'movie',
                'orientation': 'UNDIRECTED'
            },
            'directed_in': {
                'sourceTable': 'director',
                'targetTable': 'movie',
                'orientation': 'UNDIRECTED'
            }
        }
    },
    'compute': {
        'modelname': 'nc-imdb'
    },
    'write': [{
        'nodeLabel': 'movie',
        'outputTable': 'genre_predictions'
    }]
});

上述查询应产生类似于以下结果。

作业 ID

作业开始

作业结束

作业结果

job_2223e0806c9842ddb3fe4b028335a500

2025-04-29 12:18:05.515

2025-04-29 12:18:51.723

{ "node_output_stats": { "movie": { "row_count": 4661, "table_name": "imdb.gml.genre_predictions" } } }

我们可以通过运行以下查询来检查“前”10 个节点的预测和概率:

SELECT * FROM IMDB.GML.genre_predictions LIMIT 10;

结果如下:

NODEID	PREDICTED_CLASS	       PREDICTED_PROBABILITIES
  4467	              2	  [0.006307,0.028976,0.964717]
  4571	              2   [0.003825,0.039170,0.957005]
  3865	              2   [0.006841,0.058649,0.934510]
  2382	              2   [0.007916,0.048241,0.943842]
  2071	              2   [0.007994,0.015378,0.976628]
  3239	              1   [0.019813,0.941223,0.038963]
  2975	              1   [0.006499,0.946676,0.046826]
  4075	              1   [0.004404,0.948304,0.047292]
  2765	              2   [0.024119,0.007341,0.968539]
    29                0	  [0.915931,0.006881,0.077187]
© . All rights reserved.