0

我正在尝试使用 Neo4j 的 algo.beta.louvain()。我注意到如果我以不同的方式对节点进行排序,它会返回完全不同的结果(每个社区中的社区数和节点数)label。以下 3 个调用返回不同的结果。我正在使用 {concurrency: 1}。有什么我没有得到的吗?

CALL algo.louvain.stream('MATCH (n:Node) WHERE <some-condition> RETURN id(n) as id order by n.id desc', <relationship>, <config>)
CALL algo.louvain.stream('MATCH (n:Node) WHERE <some-condition> RETURN id(n) as id order by n.id asc', <relationship>, <config>)
CALL algo.louvain.stream('MATCH (n:Node) WHERE <some-condition> RETURN id(n) as id order by id(n) desc', <relationship>, <config>)

在同一个 Neo4j 实例中,以上是我注意到的与我的实际问题有关的内容。我真正想做的是为具有相同数据的不同 Neo4j 实例获得一致的结果。在调试不同情况下结果不同的原因时,我注意到我可以通过以不同顺序给出相同的集合节点来重现相关问题。我在原始代码中没有“排序依据”,但我打赌在 Neo4j 的不同实例中,自然排序不同导致结果不同。

4

1 回答 1

1

算法本身是不确定的,这意味着不能保证在相同的数据上具有相同的结果。

如果您需要增量运行算法(例如,在添加新节点并重新计算集群之后,但不会丢失算法已经处理的节点上的集群 ID),您可以提供种子属性。

neo4j 图形数据科学库文档中的更多信息:https ://neo4j.com/docs/graph-data-science/current/algorithms/louvain/#algorithms-louvain-examples-stream-seed

于 2020-12-22T07:33:46.780 回答