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 | 写入配置。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
computePoolSelector |
字符串 |
|
否 |
用于运行 GraphSAGE 节点分类预测作业的计算池选择器。 |
configuration |
映射 |
|
否 |
图项目、算法计算和结果回写配置。 |
对于此算法,如果输入图较大或模型较深,我们建议使用 GPU 计算池;否则,也可以使用 CPU 计算池。
配置映射包含以下三个条目。
有关以下项目配置的更多详细信息,请参阅项目文档。 |
名称 | 类型 |
---|---|
nodeTables |
节点表列表。 |
relationshipTables |
关系类型到关系表的映射。 |
请注意,为了使 GraphSAGE 正确传播节点嵌入的更新,每种类型的节点都必须是至少一种关系类型的目标。orientation
参数可用于为仅作为关系源的节点类型添加反向关系(使用“REVERSE”或“UNDIRECTED”方向)。
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
modelname |
字符串 |
|
否 |
要使用的已训练模型的名称 |
batchSize |
整数 |
|
是 |
每个批次中要预测的目标节点数量。如果未提供,将使用训练模型时所用的评估批处理大小。 |
randomSeed |
整数 |
|
是 |
用于为所有计算随机性设定种子的数字 |
有关以下写入配置的更多详细信息,请参阅写入文档。 |
名称 | 类型 | 默认值 | 可选 | 描述 |
---|---|---|---|---|
nodeLabel |
字符串 |
|
否 |
内存图中要写入节点属性的节点标签。 |
outputTable |
字符串 |
|
否 |
Snowflake 数据库中写入节点属性的表。 |
示例
在我们的示例中,我们将使用包含演员、导演、电影和流派的 IMDB 数据集。这些实体都关联有关键词,我们将它们用作节点的特征。它们通过演员参演电影和导演执导电影的关系连接。目标是预测电影的流派。
我们有一个名为 imdb
的数据库,其中包含以下表:
-
actor
,包含列nodeid
和plot_keywords
-
movie
,包含列nodeid
、plot_keywords
和genre
-
director
,包含列nodeid
和plot_keywords
-
acted_in
,包含列sourcenodeid
和targetnodeid
,分别表示actor
和movie
节点 ID -
directed_in
,包含列sourcenodeid
和targetnodeid
,分别表示director
和movie
节点 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]