您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
Neo4j图分析—链接预测算法(Link Prediction Algorithms)
 
作者:圈圈_Master
   次浏览      
2020-8-5 
 
编辑推荐:

本文重点介绍了Adamic-Adar算法、Common Neighbors、Preferential Attachment等相关内容。
本文来自简书,由火龙果软件Anna编辑、推荐。

链接预测是图数据挖掘中的一个重要问题。链接预测旨在预测图中丢失的边, 或者未来可能会出现的边。这些算法主要用于判断相邻的两个节点之间的亲密程度。通常亲密度越大的节点之间的亲密分值越高。

The Adamic Adar algorithm (algo.linkprediction .adamicAdar)

Adamic Adar是一种基于节点之间共同邻居的亲密度测算方法。2003年由 Lada Adamic 和 Eytan Adar t在 predict links in a social network中提出的,计算亲密度的公式如下:

其中N(u)是与节点u相邻的节点集合。A(x,y)为0表明节点x和y不接近,该值越高表明两个节点间的亲密度越大。Neo4j-algo包提供了该算法的具体实现,下面我们可以看一个例子。

创建节点和边:

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)

创建完成之后的图结构如下:

graph

计算两个指定节点之间的亲密度:

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

 

计算结果如下所示:

score

另外,我们还可以基于特定的关系类型和关系指向,计算一对节点之间的亲密度。

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

计算结果如下:

score

Common Neighbors (algo.linkprediction .commonNeighbors)

相同邻居,顾名思义,指的是两个节点同时关联的节点、数量。

计算公式如下:

formula

其中N(x)是与节点x相邻的节点集合,N(y)是与节点y相邻的节点集合,相同邻居指的是两个集合的交集。该值越高表明两个节点之间亲密度越高。当节点x和节点y不相邻时,该值为0。

还使用上面的数据集合,则计算两个节点的相同邻居的代码如下:

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

结果如下:

image.png

同样的,该度量方法也可以指定关系的类型和关系的方向,这里不再赘述。

Preferential Attachment (algo.linkprediction .preferentialAttachment)

优先连接依赖于两个节点的连接数,如果两个节点的连接数都很大,标签该节点对被连接的概率越大。计算公式如下:

其中N(u)是与节点u相邻的节点集合。该值为0表明节点x和y不接近,该值越高表明两个节点间的亲密度越大。示例如下:

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

Resource Allocation (algo.linkprediction .resourceAllocation)

资源分配算法公式如下:

其中N(u)是与节点u相邻的节点集合。该值为0表明节点x和y不接近,该值越高表明两个节点间的亲密度越大。示例如下:

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

Total Neighbors (algo.linkprediction.totalNeighbors)

总邻居数指的是两个相邻节点之间的总邻居数,计算公式如下:

其中N(u)是与节点u相邻的节点集合。该值为0表明节点x和y不接近,该值越高表明两个节点间的亲密度越大。示例如下:

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

 

 

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
Node+Vue3.0前端全栈开发 7-5 [特惠]
Spring Cloud微服务架构 7-5[特惠]
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
最新文章
InfluxDB概念和基本操作
InfluxDB TSM存储引擎之数据写入
深度漫谈数据系统架构——Lambda architecture
Lambda架构实践
InfluxDB TSM存储引擎之数据读取
最新课程
Oracle数据库性能优化、架构设计和运行维护
并发、大容量、高性能数据库设计与优化
NoSQL数据库(原理、应用、最佳实践)
企业级Hadoop大数据处理最佳实践
Oracle数据库性能优化最佳实践
更多...   
成功案例
某金融公司 Mysql集群与性能优化
北京 并发、大容量、高性能数据库设计与优化
知名某信息通信公司 NoSQL缓存数据库技术
北京 oracle数据库SQL优化
中国移动 IaaS云平台-主流数据库及存储技术
更多...