PageRank

术语表

有向

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

有向

有向特征。该算法忽略图的方向。

有向

有向特征。该算法不能在有向图上运行。

无向

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

无向

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

异构节点

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

异构节点

异构节点允许。该算法平等对待所有选定的节点,无论其标签如何。

异构关系

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

异构关系

异构关系允许。该算法平等对待所有选定的关系,无论其类型如何。

加权关系

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

加权关系

加权特征。该算法将每个关系视为同等重要,忽略任何关系权重值。

节点属性

节点属性特征。该算法使用节点属性。

简介

PageRank 算法基于入站关系的數量以及相应源节点的重要性,来衡量图中每个节点的重要性。简单来说,其基本假设是:一个页面的重要性取决于指向它的页面的重要性。

PageRank 在 Google 的原始论文中被介绍为求解以下方程的函数:

page rank formula

其中,

  • 我们假设页面 A 有指向它的页面 T1Tn

  • d 是阻尼系数 (damping factor),取值范围在 0(包含)到 1(不包含)之间。通常设为 0.85。

  • C(A) 定义为从页面 A 指出的链接数。

该方程用于迭代更新候选解,并最终收敛于该方程的近似解。

有关此算法的更多信息,请参阅

运行此算法需要足够的可用内存。在运行之前,建议您阅读 内存估计 (Memory Estimation)

注意事项

使用 PageRank 算法时,有一些事项需要注意:

  • 如果一组页面内部没有指向该组外部的关系,则该组被视为“蜘蛛陷阱”(spider trap)。

  • 当页面网络形成无限循环时,可能会出现排名汇聚 (rank sink)。

  • 当页面没有任何出口关系时,会出现死胡同 (dead-ends)。

改变阻尼系数可以帮助解决上述所有问题。它可被解释为网络冲浪者有时会跳到一个随机页面的概率,从而避免陷入汇聚点。

语法

本节涵盖了在每种执行模式下执行 PageRank 算法所使用的语法。我们描述的是命名图变体语法。要了解有关通用语法变体的更多信息,请参阅 语法概述

各模式下的 PageRank 语法
在命名图上以流模式 (stream mode) 运行 PageRank。
CALL gds.pageRank.stream(
  graphName: String,
  configuration: Map
)
YIELD
  nodeId: Integer,
  score: Float
表 1. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

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

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

nodeLabels

字符串列表

['*']

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

relationshipTypes

字符串列表

['*']

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

concurrency

整数

4 [1]

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

jobId

字符串

内部生成

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

logProgress

布尔值

true

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

dampingFactor(阻尼系数)

浮点数

0.85

PageRank 计算的阻尼系数。必须在 [0, 1) 范围内。

maxIterations

整数

20

运行 PageRank 的最大迭代次数。

tolerance

浮点数

0.0000001

迭代间得分的最小变化量。如果所有得分的变化均小于该容差值,则结果被视为稳定,算法随即返回。

relationshipWeightProperty

字符串

null

用作权重的关系属性名称。如果未指定,算法将作为无权重运行。

sourceNodes

节点/数字或列表,或作为列表的对列表

[]

用于计算个性化 PageRank 的节点、节点 ID 或节点偏好对。要为不同的源节点使用不同的偏好值,请使用以下语法:[[nodeId1, bias1], [nodeId2, bias2], …​]

scaler

字符串或映射

None

应用于最终得分的缩放器名称。支持的值包括 NoneMinMaxMaxMeanLogStdScore。如需应用特定的缩放器配置,请使用映射语法:{scaler: 'name', …​}

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

表 3. 结果
名称 类型 描述

nodeId

整数

节点 ID。

score

浮点数

PageRank 分数。

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

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

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

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

nodeLabels

字符串列表

['*']

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

relationshipTypes

字符串列表

['*']

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

concurrency

整数

4 [2]

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

jobId

字符串

内部生成

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

logProgress

布尔值

true

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

dampingFactor(阻尼系数)

浮点数

0.85

PageRank 计算的阻尼系数。必须在 [0, 1) 范围内。

maxIterations

整数

20

运行 PageRank 的最大迭代次数。

tolerance

浮点数

0.0000001

迭代间得分的最小变化量。如果所有得分的变化均小于该容差值,则结果被视为稳定,算法随即返回。

relationshipWeightProperty

字符串

null

用作权重的关系属性名称。如果未指定,算法将作为无权重运行。

sourceNodes

节点/数字或列表,或作为列表的对列表

[]

用于计算个性化 PageRank 的节点、节点 ID 或节点偏好对。要为不同的源节点使用不同的偏好值,请使用以下语法:[[nodeId1, bias1], [nodeId2, bias2], …​]

scaler

字符串或映射

None

应用于最终得分的缩放器名称。支持的值包括 NoneMinMaxMaxMeanLogStdScore。如需应用特定的缩放器配置,请使用映射语法:{scaler: 'name', …​}

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

表 6. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

postProcessingMillis

整数

计算 centralityDistribution 所需的毫秒数。

centralityDistribution

Map

包含中心性分数的最小值、最大值、平均值以及 p50、p75、p90、p95、p99 和 p999 百分位值的映射。

配置

Map

用于运行算法的配置。

在命名图上以变异模式 (mutate mode) 运行 PageRank。
CALL gds.pageRank.mutate(
  graphName: String,
  configuration: Map
)
YIELD
  nodePropertiesWritten: Integer,
  ranIterations: Integer,
  didConverge: Boolean,
  preProcessingMillis: Integer,
  computeMillis: Integer,
  postProcessingMillis: Integer,
  mutateMillis: Integer,
  centralityDistribution: Map,
  configuration: Map
表 7. 参数
名称 类型 默认 可选 描述

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

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

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

mutateProperty

字符串

不适用

GDS 图中写入得分的节点属性。

nodeLabels

字符串列表

['*']

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

relationshipTypes

字符串列表

['*']

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

concurrency

整数

4

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

logProgress

布尔值

true

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

jobId

字符串

内部生成

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

dampingFactor(阻尼系数)

浮点数

0.85

PageRank 计算的阻尼系数。必须在 [0, 1) 范围内。

maxIterations

整数

20

运行 PageRank 的最大迭代次数。

tolerance

浮点数

0.0000001

迭代间得分的最小变化量。如果所有得分的变化均小于该容差值,则结果被视为稳定,算法随即返回。

relationshipWeightProperty

字符串

null

用作权重的关系属性名称。如果未指定,算法将作为无权重运行。

sourceNodes

节点/数字或列表,或作为列表的对列表

[]

用于计算个性化 PageRank 的节点、节点 ID 或节点偏好对。要为不同的源节点使用不同的偏好值,请使用以下语法:[[nodeId1, bias1], [nodeId2, bias2], …​]

scaler

字符串或映射

None

应用于最终得分的缩放器名称。支持的值包括 NoneMinMaxMaxMeanLogStdScore。如需应用特定的缩放器配置,请使用映射语法:{scaler: 'name', …​}

表 9. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

postProcessingMillis

整数

计算 centralityDistribution 所需的毫秒数。

mutateMillis

整数

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

nodePropertiesWritten

整数

写入投影图的属性数量。

centralityDistribution

Map

包含中心性分数的最小值、最大值、平均值以及 p50、p75、p90、p95、p99 和 p999 百分位值的映射。

配置

Map

用于运行算法的配置。

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

graphName

字符串

不适用

存储在目录中的图的名称。

配置

Map

{}

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

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

nodeLabels

字符串列表

['*']

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

relationshipTypes

字符串列表

['*']

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

concurrency

整数

4 [3]

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

jobId

字符串

内部生成

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

logProgress

布尔值

true

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

writeConcurrency

整数

'concurrency' 的值

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

writeProperty

字符串

不适用

Neo4j 数据库中写入得分的节点属性。

dampingFactor(阻尼系数)

浮点数

0.85

PageRank 计算的阻尼系数。必须在 [0, 1) 范围内。

maxIterations

整数

20

运行 PageRank 的最大迭代次数。

tolerance

浮点数

0.0000001

迭代间得分的最小变化量。如果所有得分的变化均小于该容差值,则结果被视为稳定,算法随即返回。

relationshipWeightProperty

字符串

null

用作权重的关系属性名称。如果未指定,算法将作为无权重运行。

sourceNodes

节点/数字或列表,或作为列表的对列表

[]

用于计算个性化 PageRank 的节点、节点 ID 或节点偏好对。要为不同的源节点使用不同的偏好值,请使用以下语法:[[nodeId1, bias1], [nodeId2, bias2], …​]

scaler

字符串或映射

None

应用于最终得分的缩放器名称。支持的值包括 NoneMinMaxMaxMeanLogStdScore。如需应用特定的缩放器配置,请使用映射语法:{scaler: 'name', …​}

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

表 12. 结果
名称 类型 描述

ranIterations

整数

运行的迭代次数。

didConverge

布尔值

指示算法是否收敛。

preProcessingMillis

整数

预处理图的毫秒数。

computeMillis

整数

运行算法的毫秒数。

postProcessingMillis

整数

计算 centralityDistribution 所需的毫秒数。

writeMillis

整数

将结果数据写回的毫秒数。

nodePropertiesWritten

整数

写入 Neo4j 的属性数量。

centralityDistribution

Map

包含中心性分数的最小值、最大值、平均值以及 p50、p75、p90、p95、p99 和 p999 百分位值的映射。

配置

Map

用于运行算法的配置。

示例

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

这些示例将 Cypher 投影作为规范。原生投影将在未来版本中弃用。

在本节中,我们将展示在具体图表上运行 PageRank 算法的示例。其目的是说明结果的样子,并为在实际环境中使用该算法提供指导。我们将对一个由少量节点以特定模式连接的小型网络图进行操作。示例图如下所示:

Visualization of the example graph
以下 Cypher 语句将在 Neo4j 数据库中创建示例图:
CREATE
  (home:Page {name:'Home'}),
  (about:Page {name:'About'}),
  (product:Page {name:'Product'}),
  (links:Page {name:'Links'}),
  (a:Page {name:'Site A'}),
  (b:Page {name:'Site B'}),
  (c:Page {name:'Site C'}),
  (d:Page {name:'Site D'}),

  (home)-[:LINKS {weight: 0.2}]->(about),
  (home)-[:LINKS {weight: 0.2}]->(links),
  (home)-[:LINKS {weight: 0.6}]->(product),
  (about)-[:LINKS {weight: 1.0}]->(home),
  (product)-[:LINKS {weight: 1.0}]->(home),
  (a)-[:LINKS {weight: 1.0}]->(home),
  (b)-[:LINKS {weight: 1.0}]->(home),
  (c)-[:LINKS {weight: 1.0}]->(home),
  (d)-[:LINKS {weight: 1.0}]->(home),
  (links)-[:LINKS {weight: 0.8}]->(home),
  (links)-[:LINKS {weight: 0.05}]->(a),
  (links)-[:LINKS {weight: 0.05}]->(b),
  (links)-[:LINKS {weight: 0.05}]->(c),
  (links)-[:LINKS {weight: 0.05}]->(d);

此图表示八个页面,它们相互链接。每个关系都有一个名为 weight 的属性,用于描述关系的重要性。

以下语句将使用 Cypher 投影来投影一个图,并将其以“myGraph”的名称存储在图目录中。
MATCH (source:Page)-[r:LINKS]->(target:Page)
RETURN gds.graph.project(
  'myGraph',
  source,
  target,
  { relationshipProperties: r { .weight } }
)

内存估算

首先,我们将使用 estimate 过程估算运行算法的成本。这可以在任何执行模式下完成。在这个例子中我们将使用 write 模式。估算算法有助于了解在您的图上运行该算法将产生的内存影响。当您随后在其中一种执行模式下真正运行算法时,系统将执行一次估算。如果估算显示执行超出其内存限制的可能性非常高,则禁止执行。要阅读更多关于此的内容,请参阅 自动估算和执行阻塞

有关 estimate 的更多详细信息,请参阅 内存估算

以下内容将估算运行算法所需的内存
CALL gds.pageRank.write.estimate('myGraph', {
  writeProperty: 'pageRank',
  maxIterations: 20,
  dampingFactor: 0.85
})
YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory
表 13. 结果
nodeCount relationshipCount bytesMin bytesMax requiredMemory

8

14

696

696

"696 字节"

流模式 (Stream)

stream 执行模式下,算法返回每个节点的分数。这使我们能够直接检查结果或在 Cypher 中进行后处理,而不会产生任何副作用。例如,我们可以对结果进行排序,以找到 PageRank 分数最高的节点。

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

以下语句将以 stream 模式运行该算法:
CALL gds.pageRank.stream('myGraph')
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 14. 结果
名称 (name) score

"Home"

3.215681999884452

"About"

1.0542700552146722

"Links"

1.0542700552146722

"Product"

1.0542700552146722

"Site A"

0.3278578964488539

"Site B"

0.3278578964488539

"Site C"

0.3278578964488539

"Site D"

0.3278578964488539

上面的查询以 unweighted(未加权)的 stream 模式运行算法,返回的分数未经过归一化处理。在下面,您可以找到 加权图 的示例。另一个 示例 展示了应用缩放器 (scaler) 来归一化最终分数。

虽然我们使用 stream 模式来说明如何以 weightedunweighted 方式运行算法,但所有算法模式都支持此配置参数。

统计模式 (Stats)

stats 执行模式下,算法返回包含算法结果摘要的单行数据。例如,PageRank 统计信息返回中心性直方图,可用于监控所有计算节点上 PageRank 分值的分布情况。此执行模式没有任何副作用。通过检查 computeMillis 返回项来评估算法性能非常有用。在下面的示例中,我们将省略返回时间。过程的完整签名可以在 语法部分 中找到。

有关 stats 模式的更多详细信息,请参阅 统计

以下命令将运行算法并以统计和测量值的形式返回结果
CALL gds.pageRank.stats('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85
})
YIELD centralityDistribution
RETURN centralityDistribution.max AS max
表 15. 结果
最大值

3.2156829834

中心性直方图对于检查计算出的分数或执行归一化非常有用。

变异模式 (Mutate)

mutate 执行模式扩展了 stats 模式,并产生一个重要的副作用:使用包含该节点得分的新节点属性来更新命名图。新属性的名称通过强制配置参数 mutateProperty 指定。结果是一行总结信息,类似于 stats,但包含一些额外的指标。当结合使用多种算法时,mutate 模式特别有用。

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

以下语句将以 mutate 模式运行该算法:
CALL gds.pageRank.mutate('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  mutateProperty: 'pagerank'
})
YIELD nodePropertiesWritten, ranIterations
表 16. 结果
nodePropertiesWritten ranIterations

8

20

写入模式 (Write)

write 执行模式扩展了 stats 模式,并产生一个重要的副作用:将每个节点的得分作为属性写入 Neo4j 数据库。新属性的名称通过强制配置参数 writeProperty 指定。结果是一行总结信息,类似于 stats,但包含一些额外的指标。write 模式支持将结果直接持久化到数据库中。

有关 write 模式的更多详细信息,请参阅 写入

以下语句将以 write 模式运行该算法:
CALL gds.pageRank.write('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  writeProperty: 'pagerank'
})
YIELD nodePropertiesWritten, ranIterations
表 17. 结果
nodePropertiesWritten ranIterations

8

20

加权 (Weighted)

默认情况下,该算法将图的关系视为 unweighted(未加权)。要更改此行为,我们可以使用名为 relationshipWeightProperty 的配置参数。在 weighted 情况下,节点发送给其邻居的前一个分数会乘以关系权重,然后除以其传出关系权重的总和。如果关系属性的值为负,则在计算过程中会被忽略。以下是使用关系属性运行算法的示例。

以下内容将使用关系权重以 stream 模式运行算法
CALL gds.pageRank.stream('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  relationshipWeightProperty: 'weight'
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 18. 结果
名称 (name) score

"Home"

3.53751028396339

"Product"

1.9357838291651097

"About"

0.7452612763883698

"Links"

0.7452612763883698

"Site A"

0.18152677135466103

"Site B"

0.18152677135466103

"Site C"

0.18152677135466103

"Site D"

0.18152677135466103

我们使用 stream 模式来说明以 weightedunweighted 方式运行算法,所有算法模式均支持此配置参数。

容差 (Tolerance)

tolerance 配置参数表示迭代之间分数变化的最小值。如果所有分数的变化都小于配置的 tolerance 值,则结果趋于稳定,算法返回。

以下代码将使用更大的 tolerance 值以 stream 模式运行算法:
CALL gds.pageRank.stream('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  tolerance: 0.1
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 19. 结果
名称 (name) score

"Home"

1.5812450669583336

"About"

0.5980194356381945

"Links"

0.5980194356381945

"Product"

0.5980194356381945

"Site A"

0.23374955154166668

"Site B"

0.23374955154166668

"Site C"

0.23374955154166668

"Site D"

0.23374955154166668

在此示例中,我们使用 tolerance: 0.1,因此结果与使用默认 tolerance 值的 流模式示例 相比略有不同。

阻尼系数 (Damping Factor)

阻尼系数配置参数接受 0(包含)到 1(不包含)之间的值。如果其值过高,则可能会出现汇聚点和蜘蛛陷阱问题,分值可能会震荡,导致算法无法收敛。如果其值过低,所有分数都会被推向 1,结果将无法充分反映图的结构。

以下代码将使用较小的 dampingFactor 值以 stream 模式运行算法:
CALL gds.pageRank.stream('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.05
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 20. 结果
名称 (name) score

"Home"

1.2487309425844906

"About"

0.9708121818724536

"Links"

0.9708121818724536

"Product"

0.9708121818724536

"Site A"

0.9597081216238426

"Site B"

0.9597081216238426

"Site C"

0.9597081216238426

"Site D"

0.9597081216238426

与使用默认 dampingFactor 值的 流模式示例 相比,使用 dampingFactor: 0.05 时,分值彼此更为接近。

个性化 PageRank

个性化 PageRank 是 PageRank 的一种变体,它偏向于一组 sourceNodes(源节点)。这种 PageRank 变体常用于 推荐系统

以下示例展示了如何运行以“站点 A”为中心的 PageRank。

以下命令将运行算法并流式传输结果
MATCH (siteA:Page {name: 'Site A'})
CALL gds.pageRank.stream('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  sourceNodes: [siteA]
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 21. 结果
名称 (name) score

"Home"

0.39902290442518784

"Site A"

0.16890325301726694

"About"

0.11220151747374331

"Links"

0.11220151747374331

"Product"

0.11220151747374331

"Site B"

0.01890325301726691

"Site C"

0.01890325301726691

"Site D"

0.01890325301726691

将这些结果与 流模式示例(未使用 sourceNodes 配置参数)的结果进行比较,可以看到我们在 sourceNodes 列表中使用的“站点 A”节点现在排名第二,而不是第四。

带偏好的个性化 PageRank

在 GDS 中,个性化 PageRank 也可以在源节点之间采用不同的偏好值。与常规个性化 PageRank 一样,这模拟了一个在特定源节点集重启的随机游走。在带偏好的情况下,重启的可能性 (1-dampingFactor) 保持不变,但重启的目的地将根据设置进行偏向。

以下示例展示了如何运行以“站点 A”和“站点 B”为中心,且“站点 B”的偏好值是“站点 A”两倍的 PageRank。偏好源节点作为节点-值对列表输入。

以下命令将运行算法并流式传输结果
MATCH (siteA:Page {name: 'Site A'}), (siteB:Page {name: 'Site B'})
CALL gds.pageRank.stream('myGraph', {
  maxIterations: 20,
  dampingFactor: 0.85,
  sourceNodes: [[siteA, 1], [siteB, 2]]
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 22. 结果
名称 (name) score

"Home"

1.1970687132755635

"Site B"

0.3567097590518008

"About"

0.33660455242122994

"Links"

0.33660455242122994

"Product"

0.33660455242122994

"Site A"

0.20670975905180075

"Site C"

0.05670975905180073

"Site D"

0.05670975905180073

缩放中心度得分

要将最终分数的归一化作为算法执行的一部分,可以使用 scaler 配置参数。所有可用缩放器的描述可以在 scaleProperties 过程的文档中找到。

以下内容将以 stream 模式运行算法并返回归一化结果
CALL gds.pageRank.stream('myGraph', {
  scaler: "MEAN"
})
YIELD nodeId, score
RETURN gds.util.asNode(nodeId).name AS name, score
ORDER BY score DESC, name ASC
表 23. 结果
名称 (name) score

"Home"

0.780671346390832

"About"

0.032214422681946

"Links"

0.032214422681946

"Product"

0.032214422681946

"Site A"

-0.219328653609168

"Site B"

-0.219328653609168

"Site C"

-0.219328653609168

"Site D"

-0.219328653609168

将结果与 流模式示例 进行比较,我们可以看到分数的相对顺序是相同的。