neo4j社区发现算法(Community detection algorithms)-2.The Label Propagation algorithm

一.算法介绍:
标签传播算法:基于图的半监督学习方法。
基本思路:从已标记的节点的标签信息来预测未标记的节点的标签信息。将一个节点的邻居节点的标签中数量最多的标签作为该节点自身的标签,给每个节点添加标签以代表它所属的社区,并通过标签的传播形成同一标签的社区结构。
二.传播过程:
  (1)先给每个节点分配对应标签。
  (2)遍历n个节点,找到对应节点邻居,获取此节点邻居标签,找到出现次数最大标签,若出现次数最多标签不止一个,则随机选择一个标签替换成此节点标签。
  (3)若标签不再变化,则迭代停止,否则重复第二步。
三.neo4j算法调用:

CALL algo.labelPropagation.stream(label:String, relationship:String, {iterations:1,
weightProperty:'weight', writeProperty:'partition', concurrency:4,direction:'OUTGOING'})
YIELD nodeId, label

其中 iterations可设置迭代次数。

实例:

MERGE (nAlice:User {id:'Alice'}) SET nAlice.seed_label=52
MERGE (nBridget:User {id:'Bridget'}) SET nBridget.seed_label=21
MERGE (nCharles:User {id:'Charles'}) SET nCharles.seed_label=43
MERGE (nDoug:User {id:'Doug'}) SET nDoug.seed_label=21
MERGE (nMark:User {id:'Mark'}) SET nMark.seed_label=19
MERGE (nMichael:User {id:'Michael'}) SET nMichael.seed_label=52
MERGE (nAlice)-[:FOLLOW]->(nBridget)
MERGE (nAlice)-[:FOLLOW]->(nCharles)
MERGE (nMark)-[:FOLLOW]->(nDoug)
MERGE (nBridget)-[:FOLLOW]->(nMichael)
MERGE (nDoug)-[:FOLLOW]->(nMark)
MERGE (nMichael)-[:FOLLOW]->(nAlice)
MERGE (nAlice)-[:FOLLOW]->(nMichael)
MERGE (nBridget)-[:FOLLOW]->(nAlice)
MERGE (nMichael)-[:FOLLOW]->(nBridget)
MERGE (nCharles)-[:FOLLOW]->(nDoug);

在这里插入图片描述

CALL algo.labelPropagation.stream("User", "FOLLOW",{direction: "OUTGOING", iterations: 10})
yield  nodeId,label
return algo.getNodeById(nodeId).id as name ,label

在这里插入图片描述四.
   在算法开始时,每个节点被初始化一个唯一的标签,可以使用partitionProperty参数定义节点的初始标签(标识符)。我们需要保存一组初步的标签,这些标签将作为节点的属性(必须是一个数字)运行标签传播算法。该算法首先检查是否有分配给节点的种子标签,如果有,则加载它。如果没有,它将为节点分配新的惟一标签(使用节点ID)。使用这组初步的标签(标识符),然后它顺序地将每个节点的标签更新为一个新标签。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值