NEO4J-链路预测算法06-全邻域算法(Total Neighbors )应用场景简介

本文介绍了Neo4j中的TotalNeighbors算法,用于计算节点间的接近度。该算法基于节点的连接数量,数值越高表示节点越接近。在Neo4j中,可以使用内置函数计算两个节点的接近度。文章通过代码示例展示了算法的实现,并提供了数据初始化和查询示例,展示了如何在实际场景中使用该算法。此外,还讨论了如何根据特定关系类型计算接近度。
摘要由CSDN通过智能技术生成

1.简介

        Total Neighbors 根据节点拥有的唯一邻居的数量计算节点的接近度。它基于节点连接越多,接收新链接的可能性就越大的想法

        算法公式如下:

TN(x,y) = |N(x)\cup N(y)|

其中N(x)为节点x的关系节点,N(y)为节点y相邻节点。

值0表示两个节点不接近,而较高的值表示节点较近。

neo4j包含一个函数来计算两个节点之间的接近度

2.使用场景

3.源码解析

    public double totalNeighbors(@Name("node1") Node node1, @Name("node2") Node node2,
                                 @Name(value = "config", defaultValue = "{}") Map<String, Object> config) {
        ProcedureConfiguration configuration = ProcedureConfiguration.create(config);
        RelationshipType relationshipType = configuration.getRelationship();
        Direction direction = configuration.getDirection(Direction.BOTH);

        NeighborsFinder neighborsFinder = new NeighborsFinder(api);
        return neighborsFinder.findNeighbors(node1, node2, relationshipType, direction).size();
    }

        入参:node1,node2为两个节点数据,config中能识别relationshipQuery和direction,其中relationshipQuery为节点关系编码,direction为方向,默认为BOTH无方向,OUTING为node1->node2,INCOMING为node2->node1。

        源码解析:

1.将传入的config参数放入ProcedureConfiguration的config中

ProcedureConfiguration configuration = ProcedureConfiguration.create(config);

2.获取ProcedureConfiguration类config中relationshipQuery参数(此参数为关系名称)

RelationshipType relationshipType = configuration.getRelationship();

3.获取config中direction参数,此为指定关系方向

Direction direction = configuration.getDirection(Direction.BOTH);

4.获取两个节点所有相邻节点并集的数量

neighborsFinder.findNeighbors(node1, node2, relationshipType, direction).size();

4.neo4j中资源分配算法使用示例 

1)数据初始化

MERGE (zhen:Person {name: "Zhen"})
MERGE (praveena:Person {name: "Praveena"})
MERGE (michael:Person {name: "Michael"})
MERGE (arya:Person {name: "Arya"})
MERGE (karin:Person {name: "Karin"})

MERGE (zhen)-[:FRIENDS]-(arya)
MERGE (zhen)-[:FRIENDS]-(praveena)
MERGE (praveena)-[:WORKS_WITH]-(karin)
MERGE (praveena)-[:FRIENDS]-(michael)
MERGE (michael)-[:WORKS_WITH]-(karin)
MERGE (arya)-[:FRIENDS]-(karin)

2)以下将返回 Michael 和 Karin 的 Total Neighbors 全邻域数

MATCH (p1:Person {name: 'Michael'})
MATCH (p2:Person {name: 'Karin'})
RETURN algo.linkprediction.totalNeighbors(p1, p2) AS score

结果:4.0

3)我们还可以根据特定的关系类型计算一对节点的全邻域数.以下将仅根据FRIENDS关系返回 Michael 和 Karin 的全邻域数

MATCH (p1:Person {name: 'Michael'})
MATCH (p2:Person {name: 'Karin'})
RETURN algo.linkprediction.totalNeighbors(p1, p2, {relationshipQuery: "FRIENDS"}) AS score

结果:2.0

NEO4J-链路预测算法05-相同社区算法(Same Community)应用场景简介

下一篇:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂攻城师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值