度中心算法 returns 只有 0.0 作为分数
Degree centrality algorithm returns only 0.0 as score
我正在尝试 运行 我的数据集上的度中心算法。我查询的子模型如下所示:
(transfer:Transfer)-[:PARENT_TRANSFER]->(hasUnderlyingBatch:HasUnderlyingBatch)
我正在尝试的查询 运行:
CALL algo.degree.stream("Transfer", "PARENT_TRANSFER", {direction:"outgoing"}) YIELD nodeId, score
RETURN nodeId, score ORDER BY score DESC
我已经验证了这些关系的存在,但我仍然为每条记录获得了 0.0 分。
当我自己执行查询时,我确实得到了正确的结果:
MATCH (t:Transfer)
RETURN t.Code, size((t)-[:PARENT_TRANSFER]->()) as score
ORDER BY score DESC
谁能给我解释一下为什么我在使用度中心算法时得不到正确的结果?
您的 PARENT_TRANSFER
关系介于节点 Transfer
和 HasUnderlyingBatch
之间。
或者在algo的调用中,你只使用了标签为Transfer
的节点,所以没有结果是正常的。
如果你真的想在你的Transfer
和HasUnderlyingBatch
之间做一个算法,你需要做的是你的图表cypher projection(但对我来说这似乎很奇怪,因为你混合了苹果和香蕉)。
这些算法在相同类型的节点中找到一个中心节点(即检查相同类型节点之间的关系)。
在您的案例中,关系 PARENT_TRANSFER
存在于两种不同类型的节点之间:Transfer
和 HasUnderlyingBatch
。但是,算法正在 Transfer
节点之间搜索 PARENT_TRANSFER
。
您可以在图表上验证这一点,该图表在社交网络图表中具有相同类型节点之间的任何关系,例如 FOLLOW
Person
节点之间的关系。
我在文档中没有看到任何忽略相同标签搜索的配置设置。
我知道这是一个较旧的线程,但由于我刚刚解决这个问题,所以我会添加希望它能帮助其他人。花哨的术语是单方支持。这就是该算法的帮助。意思是,如文献中的示例,(:A)-[:R]->(:A)。因此,一个图成为一个二分图或更大的图——即添加一个 "B" 节点标签,将在分数 return 值中创建零,因为这就是他们构建它的方式。除非,您为节点和关系的算法中的参数输入了空值。有些人建议 "trick" 使算法中的前两个值都为空值:[CALL algo.degree(null, null...]。这对让你的分数>0 有效,但当你有多个关系并且与一个节点有关系时,可能不会给你正确的度数。
但是,如果您为第一个参数(用于节点)和您想要的关系(比如“:R”)输入 null,那么您将获得具有 incoming/outgoing/both 的所有节点的度数你的分值将是正确的。我建议任何使用图形的人,尽管有不便,但始终使用有向图。这是诚实的,"correct" 并且会让学位分数之类的事情更容易得到正确的结果。我的 0.02.
文档可能会更好。这不是直观的,但我希望这会有所帮助。度中心性是一种基本且非常有价值的算法。
最后一点,如果您要升级到 3.5(还不是 4.x),请从 algo.* 升级到 gds.*。我还没有检查过,但我希望他们改进了这个算法,使它更清晰一些。
HTH!
我正在尝试 运行 我的数据集上的度中心算法。我查询的子模型如下所示:
(transfer:Transfer)-[:PARENT_TRANSFER]->(hasUnderlyingBatch:HasUnderlyingBatch)
我正在尝试的查询 运行:
CALL algo.degree.stream("Transfer", "PARENT_TRANSFER", {direction:"outgoing"}) YIELD nodeId, score
RETURN nodeId, score ORDER BY score DESC
我已经验证了这些关系的存在,但我仍然为每条记录获得了 0.0 分。
当我自己执行查询时,我确实得到了正确的结果:
MATCH (t:Transfer)
RETURN t.Code, size((t)-[:PARENT_TRANSFER]->()) as score
ORDER BY score DESC
谁能给我解释一下为什么我在使用度中心算法时得不到正确的结果?
您的 PARENT_TRANSFER
关系介于节点 Transfer
和 HasUnderlyingBatch
之间。
或者在algo的调用中,你只使用了标签为Transfer
的节点,所以没有结果是正常的。
如果你真的想在你的Transfer
和HasUnderlyingBatch
之间做一个算法,你需要做的是你的图表cypher projection(但对我来说这似乎很奇怪,因为你混合了苹果和香蕉)。
这些算法在相同类型的节点中找到一个中心节点(即检查相同类型节点之间的关系)。
在您的案例中,关系 PARENT_TRANSFER
存在于两种不同类型的节点之间:Transfer
和 HasUnderlyingBatch
。但是,算法正在 Transfer
节点之间搜索 PARENT_TRANSFER
。
您可以在图表上验证这一点,该图表在社交网络图表中具有相同类型节点之间的任何关系,例如 FOLLOW
Person
节点之间的关系。
我在文档中没有看到任何忽略相同标签搜索的配置设置。
我知道这是一个较旧的线程,但由于我刚刚解决这个问题,所以我会添加希望它能帮助其他人。花哨的术语是单方支持。这就是该算法的帮助。意思是,如文献中的示例,(:A)-[:R]->(:A)。因此,一个图成为一个二分图或更大的图——即添加一个 "B" 节点标签,将在分数 return 值中创建零,因为这就是他们构建它的方式。除非,您为节点和关系的算法中的参数输入了空值。有些人建议 "trick" 使算法中的前两个值都为空值:[CALL algo.degree(null, null...]。这对让你的分数>0 有效,但当你有多个关系并且与一个节点有关系时,可能不会给你正确的度数。
但是,如果您为第一个参数(用于节点)和您想要的关系(比如“:R”)输入 null,那么您将获得具有 incoming/outgoing/both 的所有节点的度数你的分值将是正确的。我建议任何使用图形的人,尽管有不便,但始终使用有向图。这是诚实的,"correct" 并且会让学位分数之类的事情更容易得到正确的结果。我的 0.02.
文档可能会更好。这不是直观的,但我希望这会有所帮助。度中心性是一种基本且非常有价值的算法。
最后一点,如果您要升级到 3.5(还不是 4.x),请从 algo.* 升级到 gds.*。我还没有检查过,但我希望他们改进了这个算法,使它更清晰一些。
HTH!