HITS

此功能在 Aura Graph Analytics Serverless 中不可用。

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

词汇表

有向

有向特性。算法在有向图上定义良好。

有向

有向特性。算法忽略图的方向。

有向

有向特性。算法不在有向图上运行。

无向

无向特性。算法在无向图上定义良好。

无向

无向特性。算法忽略图的无向性。

异构节点

异构节点完全支持。算法能够区分不同类型的节点。

异构节点

异构节点允许。算法无论标签如何,都以相似方式处理所有选定的节点。

异构关系

异构关系完全支持。算法能够区分不同类型的关系。

异构关系

异构关系允许。算法无论类型如何,都以相似方式处理所有选定的关系。

加权关系

加权特性。算法支持使用关系属性作为权重,通过 relationshipWeightProperty 配置参数指定。

加权关系

加权特性。算法将每个关系视为同等重要,丢弃任何关系权重的值。

简介

超链接诱导主题搜索 (HITS) 是一种链接分析算法,它根据两个分数对节点进行评级:hub 分数和 authority 分数。authority 分数估计节点在网络中的重要性。hub 分数估计其与其他节点关系的价值。GDS 实现基于 Jon M. Kleinberg 的出版物《超链接环境中的权威来源》。

HITS 算法需要每种关系类型的逆向索引。

语法

本节介绍在每种执行模式下执行 HITS 算法所使用的语法。我们正在描述具名图语法的变体。要了解更多关于通用语法变体,请参阅语法概览

HITS 每种模式的语法
在具名图上以流模式运行 HITS。
CALL gds.hits.stream(
  graphName: String,
  configuration: Map
)
YIELD
  nodeId: Integer,
  values: Map
表 1. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

目录中存储的图的名称。

configuration

映射

{}

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

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

nodeLabels

字符串列表

['*']

使用给定节点标签过滤具名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定关系类型过滤具名图。将包含具有任何给定类型的关系。

concurrency

整数

4 [1]

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

jobId

字符串

内部生成

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

logProgress

布尔

true

如果禁用,将不记录进度百分比。

hitsIterations

整数

20

要运行的 HITS 迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程之间划分工作的分区方案。可用选项有 AUTORANGEDEGREE

1. 在 GDS 会话中,默认值为可用处理器数量

表 3. 结果
名称 类型 描述

nodeId

整数

节点 ID。

values

映射

包含 authhub 键的映射。

在具名图上以统计模式运行 HITS。
CALL gds.hits.stats(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  configuration: Map
表 4. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

目录中存储的图的名称。

configuration

映射

{}

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

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

nodeLabels

字符串列表

['*']

使用给定节点标签过滤具名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定关系类型过滤具名图。将包含具有任何给定类型的关系。

concurrency

整数

4 [2]

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

jobId

字符串

内部生成

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

logProgress

布尔

true

如果禁用,将不记录进度百分比。

hitsIterations

整数

20

要运行的 HITS 迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程之间划分工作的分区方案。可用选项有 AUTORANGEDEGREE

2. 在 GDS 会话中,默认值为可用处理器数量

表 6. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

configuration

映射

用于运行算法的配置。

在具名图上以修改模式运行 HITS。
CALL gds.hits.mutate(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  mutateMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 7. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

目录中存储的图的名称。

configuration

映射

{}

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

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

nodeLabels

字符串列表

['*']

使用给定节点标签过滤具名图。

relationshipTypes

字符串列表

['*']

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

concurrency

整数

4

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

mutateProperty

字符串

""

PregelSchema 中所有公共属性使用的前缀。

jobId

字符串

内部生成

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

hitsIterations

整数

20

要运行的 HITS 迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程之间划分工作的分区方案。可用选项有 AUTORANGEDEGREE

表 9. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

mutateMillis

整数

向投影图添加属性的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

configuration

映射

用于运行算法的配置。

在具名图上以写入模式运行 HITS。
CALL gds.hits.write(
  graphName: String,
  configuration: Map
)
YIELD
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  writeMillis: Integer,
  nodePropertiesWritten: Integer,
  configuration: Map
表 10. 参数
名称 类型 默认值 可选 描述

graphName

字符串

不适用

目录中存储的图的名称。

configuration

映射

{}

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

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

nodeLabels

字符串列表

['*']

使用给定节点标签过滤具名图。将包含具有任何给定标签的节点。

relationshipTypes

字符串列表

['*']

使用给定关系类型过滤具名图。将包含具有任何给定类型的关系。

concurrency

整数

4 [3]

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

jobId

字符串

内部生成

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

logProgress

布尔

true

如果禁用,将不记录进度百分比。

writeConcurrency

整数

'concurrency' 的值

用于将结果写入 Neo4j 的并发线程数。

writeProperty

字符串

""

PregelSchema 中所有公共属性使用的前缀。

hitsIterations

整数

20

要运行的 HITS 迭代次数。Pregel 迭代次数将等于 hitsIterations * 4

authProperty

字符串

"auth"

在使用 STREAMMUTATEWRITE 模式时,用于 auth 属性的名称。

hubProperty

字符串

"hub"

在使用 STREAMMUTATEWRITE 模式时,用于 hub 属性的名称。

partitioning

字符串

"AUTO"

用于在线程之间划分工作的分区方案。可用选项有 AUTORANGEDEGREE

3. 在 GDS 会话中,默认值为可用处理器数量

表 12. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔

指示算法是否收敛。

preProcessingMillis

整数

图预处理的毫秒数。

computeMillis

整数

运行算法的毫秒数。

writeMillis

整数

写回结果数据的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

configuration

映射

用于运行算法的配置。

示例

以下所有示例都应在空数据库中运行。

示例通常使用Cypher 投影。原生投影将在未来的版本中弃用。

在本节中,我们将演示在具体图上运行 HITS 算法的示例。目的是说明结果如何,并提供如何在实际设置中使用算法的指南。我们将在一个小型社交网络图上执行此操作,该图包含以特定模式连接的少量节点。示例图如下所示:

Visualization of the example graph
以下 Cypher 语句将在 Neo4j 数据库中创建示例图
CREATE
  (a:Website {name: 'A'}),
  (b:Website {name: 'B'}),
  (c:Website {name: 'C'}),
  (d:Website {name: 'D'}),
  (e:Website {name: 'E'}),
  (f:Website {name: 'F'}),
  (g:Website {name: 'G'}),
  (h:Website {name: 'H'}),
  (i:Website {name: 'I'}),

  (a)-[:LINK]->(b),
  (a)-[:LINK]->(c),
  (a)-[:LINK]->(d),
  (b)-[:LINK]->(c),
  (b)-[:LINK]->(d),
  (c)-[:LINK]->(d),

  (e)-[:LINK]->(b),
  (e)-[:LINK]->(d),
  (e)-[:LINK]->(f),
  (e)-[:LINK]->(h),

  (f)-[:LINK]->(g),
  (f)-[:LINK]->(i),
  (f)-[:LINK]->(h),
  (g)-[:LINK]->(h),
  (g)-[:LINK]->(i),
  (h)-[:LINK]->(i);

在示例中,我们将使用 HITS 算法计算权威和枢纽分数。

以下语句将投影图并将其存储在图目录中。
MATCH (source:Website)-[r:LINK]->(target:Website)
RETURN gds.graph.project(
  'myGraph',
  source,
  target,
  {},
  { inverseIndexedRelationshipTypes: ['*'] }
)

在以下示例中,我们将演示在此图上使用 HITS 算法。

stream 执行模式下,算法返回每个节点的权威和枢纽分数。这使我们能够直接检查结果或在 Cypher 中对其进行后处理,而不会产生任何副作用。

有关 stream 模式的更多详细信息,请参阅

以下将运行算法,并流式传输结果
CALL gds.hits.stream('myGraph', {hitsIterations: 20})
YIELD nodeId, values
RETURN gds.util.asNode(nodeId).name AS Name, values.auth AS auth, values.hub as hub
ORDER BY Name ASC
表 13. 结果
名称 auth hub

"A"

0.0

0.5147630377521207

"B"

0.42644630743935796

0.3573686670593437

"C"

0.3218729455718005

0.23857061715828276

"D"

0.6463862608483191

0.0

"E"

0.0

0.640681017095129

"F"

0.23646490227616518

0.2763222153580397

"G"

0.10200264424057169

0.23867470447760597

"H"

0.426571816146601

0.0812340105698113

"I"

0.22009646020698218

0.0

© . All rights reserved.