algo.louvain.stream 对相同的数据返回不同的结果

时间:2020-12-21 21:36:22

标签: neo4j neo4j-apoc graph-data-science

我正在尝试使用 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 实例获得一致的结果。在调试为什么结果在不同情况下不同时,我注意到我可以通过以不同的顺序提供相同的集合节点来重现相关问题。我在原始代码中没有“order by”,但我打赌在 Neo4j 的不同实例中,自然顺序不同导致不同的结果。

1 个答案:

答案 0 :(得分:1)

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

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

neo4j Graph Data Science 库文档中的更多信息:https://neo4j.com/docs/graph-data-science/current/algorithms/louvain/#algorithms-louvain-examples-stream-seeded

相关问题