Label Propagation Algorithm(LPA)
来源:互联网 发布:mac os 10.12自带壁纸 编辑:程序博客网 时间:2024/06/06 16:26
基本思想:
每个结点的标签应该和其大多数邻居的标签相同
算法描述:
1)初始化所有结点,为每个结点分配唯一的标签
2)随机选择一个结点,令其及其所属社区的结点标签更换为它的大多数邻居所属的标签,若有几个这样的标签随机选择一个
3)若每个结点的标签都已和其大多数邻居的相同则停止算法,否则重复2)
引用:【Near linear time algorithm to detect community structures in large-scale networks】
python实现:
import networkx as nx
import randomdef getMaxNeighborLabel(G,node_index):
dict = {}
for neighbor_index in G.neighbors(node_index):
neighbor_label = G.node[neighbor_index]["label"]
if(dict.has_key(neighbor_label)):
dict[neighbor_label] += 1
else:
dict[neighbor_label] = 1
max = 0
for k,v in dict.items():
if(v>max):
max = v
for k,v in dict.items():
if(v != max):
dict.pop(k)
return dict
def canStop(G):
for i in range(len(G.node)):
node = G.node[i]
label = node["label"]
dict = getMaxNeighborLabel(G, i)
if(not dict.has_key(label)):
return False
return True
'''asynchronous update'''
def populateLabel(G):
#random visit
visitSequence = random.sample(G.nodes(),len(G.nodes()))
for i in visitSequence:
node = G.node[i]
label = node["label"]
dict = getMaxNeighborLabel(G, i)
if(not dict.has_key(label)):
newLabel = dict.keys()[random.randrange(len(dict.keys()))]
node["label"] = newLabel
def generateCommunity(G):
dict = {}
for node in G.nodes(True):
label = node[1]["label"]
if(dict.has_key(label)):
dict.get(label).append(node[0]+1)
else:
l = []
l.append(node[0]+1)
dict[label] = l
for k,v in dict.items():
print("label: " + str(k) +" size: "+str(len(v))+" "+ str(v))
def run():
G = nx.karate_club_graph()
#initial label
for i in range(len(G.node)):
G.node[i]["label"] = i
while(not canStop(G)):
populateLabel(G)
generateCommunity(G)
if __name__ == '__main__':
run()
0 0
- Label Propagation Algorithm(LPA)
- Label propagation
- Back Propagation Algorithm
- Label propagation算法初解
- Label Propagation算法Giraph实现
- Power-Aware Message Propagation Algorithm
- Deep learning---------------Back propagation Algorithm(BP algorithm)
- 社区划分——Label Propagation
- 阅读 Label Propagation through Linear Neighborhoods 感想
- 基于GraphX实现的community detection算法--Label Propagation分析
- 标签传播算法(Label Propagation)及Python实现
- 标签传播算法(Label Propagation)及Python实现
- 标签传播算法(Label Propagation)及Python实现
- 标签传播算法(Label Propagation)及Python实现
- BP 算法 (Back-propagation Algorithm) 之较直观的解释
- 社团划分——有向图的Label Propagation算法
- 对 A label propagation method using spatial-spectral consistency *** 的理解
- 社团划分——有向图的Label Propagation算法
- POJ 3264 Balanced Lineup (RMQ分析)
- tcxgrid控件中drag a column header here to group by that column移除方法
- 计算机网络 3.运输层
- C# 反射详解:定义、创建对象、调用实例方法及静态方法
- 使用DBUtils编写通用的DAO【很有价值】
- Label Propagation Algorithm(LPA)
- 透析Java本质-谈类型转换的神秘
- judge loop in undirected graph
- 泛型-java编程思想笔记
- 创建oracle用户
- Oracle Flashback(闪回) 详解.
- 使用 pt-online-schema-change 修改大表时异常退出 Exiting on SIGHUP 的问题
- 适配器模式
- Java常用类一