【网络】基于标签的LPA算法的python3版本
来源:互联网 发布:青云端软件下载 编辑:程序博客网 时间:2024/05/21 02:21
LPA算法python2版本见:http://blog.csdn.net/ztf312/article/details/78710501。
下面是python3版本。
# -*- coding: utf-8 -*-"""Created on Mon Dec 4 15:47:35 2017@author: ztf"""# -*- coding: UTF-8 -*-"""Created on 17-11-28@summary: 实现传统标签传播算法LPA@author: dreamhome"""import randomimport networkx as nximport matplotlib.pyplot as pltfrom nets import *def generate_graph(G): """ :return: Graph graph """ # 定义图 graph = G # 给每个节点增加标签 for node, data in graph.nodes_iter(True): data['label'] = node return graphdef lpa(graph): """ 标签传播算法 使用异步更新方式 :param graph: :return: """ def estimate_stop_condition(): """ 算法终止条件:所有节点的标签与大部分邻居节点标签相同或者迭代次数超过指定值则停止 :return: """ for node in graph.nodes_iter(): count = {} for neighbor in graph.neighbors_iter(node): neighbor_label = graph.node[neighbor]['label'] count[neighbor_label] = count.setdefault( neighbor_label, 0) + 1 # 找到计数值最大的label count_items = count.items() count_items = sorted(count_items, key=lambda x: x[1], reverse=True) labels = [k for k, v in count_items if v == count_items[0][1]] # 当节点标签与大部分邻居节点标签相同时则达到停止条件 if graph.node[node]['label'] not in labels: return False return True loop_count = 0 # 迭代标签传播过程 while True: loop_count += 1 print('迭代次数', loop_count) for node in graph.nodes_iter(): count = {} for neighbor in graph.neighbors_iter(node): neighbor_label = graph.node[neighbor]['label'] count[neighbor_label] = count.setdefault( neighbor_label, 0) + 1 # 找到计数值最大的标签 count_items = count.items() # print count_items count_items = sorted(count_items, key=lambda x: x[1], reverse=True) labels = [(k, v) for k, v in count_items if v == count_items[0][1]] # 当多个标签最大计数值相同时随机选取一个标签 label = random.sample(labels, 1)[0][0] graph.node[node]['label'] = label if estimate_stop_condition() is True or loop_count >= 10: print('complete') returnif __name__ == "__main__":# path = "/home/dreamhome/network-datasets/dolphins/out.dolphins"# graph = read_graph_from_file(path) G = WS(100, 2, 0.1) graph = generate_graph(G) lpa(graph) # 根据算法结果画图 node_color = [float(graph.node[v]['label']) for v in graph] nx.draw_networkx(graph, node_color=node_color) plt.show() labels = set([float(graph.node[v]['label']) for v in graph]) community = dict() print(labels) for l in labels: community[l] = [v for v in graph if float(graph.node[v]['label'])==l] print(l, ":", community[l])
阅读全文
0 0
- 【网络】基于标签的LPA算法的python3版本
- 标签传播(LPA)算法及python基于igraph包的实现
- 基于python3的网络爬虫
- 标签传播算法(LPA)Python实现
- python3 基于urllib模块的网络编程
- 社区发现算法——标签传播算法LPA
- lpa标签传播算法讲解及代码实现
- lpa 半监督学习 之--标签传播算法
- 社区发现算法之标签传播(LPA)
- You-Get--基于Python3的开源网络视频下载工具
- Python3之基于UDP协议的网络编程
- Python3.2 实现基于KNN算法的数据分类
- 基于KNN算法的约会网站配对效果 python3.2
- 基于KNN算法的约会网站配对效果 python3.2
- 针对新闻标签提取的tf-idf优化算法1.0版本——基于jieba分词实现
- python2版本和python3版本的区别
- 基于增广路的网络流算法
- 基于DHT网络的IP登记算法
- CSS扩展
- Android极光推送之Unity和Eclipse的对接
- 防火墙管理器一:firewalld
- web项目接入cas单点登陆
- Django 中的urls 导入
- 【网络】基于标签的LPA算法的python3版本
- unity中区域灯光烘焙问题
- PAT乙级1075
- Maven学习总结(42)——Maven多模块构建中常用的参数
- Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
- 数据分析检验
- each遍历
- 程序员提高效率的辅助开发软件神器汇总
- Python爬虫入门之一-requests+BeautifulSoup