转载自:http://blog.csdn.net/DreamHome_S/article/details/78662197

主要优点:时间复杂度近似线性,不需要事先知道社区数量。

主要算法流程:首先为每个节点设置唯一标签,接着迭代依次更新各个节点,针对每个节点,通过统计节点邻居的标签,选择标签数最多的标签更新该节点,如果最多便签数大于一,则从中随机选择一个标签更新该节点,直到收敛为止。

标签传播算法的节点标签更新策略主要分成两种:一种是同步更新,另一种是异步更新。 
同步更新:在执行第t次迭代更新时,仅依赖第t-1次更新后的标签集。 
异步更新:在执行第t次迭代更新时,同时依赖t次迭代已经更新的标签集以及在t-1更新但t次迭代 中未来的及更新的标签集,异步更新策略更关心节点更新顺序,所以在异步更新过程中,节点的更新顺序采用随机选取的方式。

LPA算法适用于非重叠社区发现,针对重叠社区的发现问题,学者提出了COPRA(Community Overlapping Propagation Algorithm)算法。该算法提出所有节点可以同时属于V个社区,V是个人为设定的全局变量,很显然 V 的选择直接影响算法的效果,针对V的选择需要足够的先验知识,在真实的社区网络中,V的选择不能很好的被控制。

Python实现过程

# -*- coding: UTF-8 -*-"""
Created on 17-11-28@summary: 实现传统标签传播算法LPA@author: dreamhome
"""import random
import networkx as nx
import matplotlib.pyplot as pltdef read_graph_from_file(path):""":param path: 从文件中读取图结构:return: Graph graph"""# 定义图graph = nx.Graph()# 获取边列表edges_listedges_list = []# 开始获取边fp = open(path)edge = fp.readline().split()while edge:if edge[0].isdigit() and edge[1].isdigit():edges_list.append((int(edge[0]), int(edge[1])))edge = fp.readline().split()fp.close()# 为图增加边graph.add_edges_from(edges_list)# 给每个节点增加标签for node, data in graph.nodes_iter(True):data['label'] = nodereturn 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# 找到计数值最大的labelcount_items = count.items()count_items.sort(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 Falsereturn Trueloop_count = 0# 迭代标签传播过程while True:loop_count += 1print '迭代次数', loop_countfor 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_itemscount_items.sort(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'] = labelif 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)lpa(graph)# 根据算法结果画图node_color = [float(graph.node[v]['label']) for v in graph]nx.draw_networkx(graph, node_color=node_color)plt.show()

【社团检测】社团检测之标签传播算法Python实现相关推荐

  1. 可视化学习:社团划分算法——标签传播算法LPA及优化

    标签传播算法 一.社团划分质量 二.标签传播算法(LPA) 三.优化算法 1.基于传播分数的标签传播算法(LPA-S) 2.基于邻居优势的标签传播算法(LPA-N) 3.基于叶子社团合并的标签传播算法 ...

  2. 附源码|复杂网络社区发现——标签传播算法(LPA)

    本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示. 标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点.在 ...

  3. 什么是标签传播算法?为什么要使用标签传播算法?如何使用?

    什么是标签传播算法?为什么要使用标签传播算法?如何使用? 标签传播在半监督学习中很有用,在半监督学习中,我们有很少的标记点和大量的未标记实例,我们希望将标签从标记样本传播到未标记样本,这样我们就可以扩 ...

  4. 半监督+标签传播算法

    半监督+标签传播算法 sklearn中LabelPropagation和LabelSpreading的区别? LabelSpreading model is similar to the basic ...

  5. 数据挖掘 —— 半监督学习(标签传播算法)

    数据挖掘 -- 半监督学习(标签传播算法) 标签传播算法 参数解释 代码 结果 标签传播算法 参数解释 标签传播算法要求为标注数据标签为1 LablePropagation(kernel,gamma, ...

  6. 标签传播算法(Label Propagation)及Python实现

    众所周知,机器学习可以大体分为三大类:监督学习.非监督学习和半监督学习.监督学习可以认为是我们有非常多的labeled标注数据来train一个模型,期待这个模型能学习到数据的分布,以期对未来没有见到的 ...

  7. LPA标签传播算法——MATLAB实现及代码

    •标签传播算法 (LPA)是由 Zhu 等人于 2002 年提出,它是一种基于图的半监督学习方法,其基本思路是用已标记节点的标签信息去预测未标记节点的标签信息.利用样本间的关系建立关系完全图模型,在完 ...

  8. 社区发现(三):LPA算法(标签传播算法)

    引用:https://blog.csdn.net/itplus/article/details/9286905 引用:https://www.jianshu.com/p/0c66b2717972 文章 ...

  9. 社区发现之标签传播算法(LPA)

    在Graph领域,社区发现(Community detection)是一个非常热门且广泛的话题,后面会写一个系列,该问题实际上是从子图分割的问题演变而来,在真实的社交网络中,有些用户之间连接非常紧密, ...

最新文章

  1. android 短信验证码的实现
  2. Python设计模式-代理模式
  3. 举例讲解EFS的加密技巧
  4. 3.程序的局部性原理
  5. 【python】数据结构与算法—哈希表
  6. 线性表C语言locate和ETget,线性表(数据结构重难点讲解)
  7. xxljob 配置文件_SpringBoot整合Xxl-Job的完整步骤记录
  8. 李焕英 照片动起来了?B站 up主用AI还原动态影像
  9. QT之QHash简介
  10. 技术动态 | 多模态知识图谱
  11. http抓包实践--(二)--web网页抓包和fiddler修改包
  12. php168 shell,php168 v6/v7鸡肋Getshell安全问题
  13. python通讯录管理程序的用户可行性_通讯录管理系统可行性分析报告
  14. Java对象的GC内存分配和回收策略
  15. 安装python3.5.0出现0x80072eff错误_我在网上用WINDOWS UPDATE更新WINDOWS,出现错误:0x80072EFF,该怎么办?...
  16. 高德地图商户标注平台上线 免费标注线下店铺
  17. 打印钻石图形python_Python pandas高效数据处理之绘图
  18. GUI(Graphical User Interface)
  19. 最新手机号码检验正则表达式
  20. H264码流打包成RTP包

热门文章

  1. oracle内存部件命中率计算
  2. java中dynamic_dynamic
  3. Linux Tool: 类似于Windows Everything的工具 catfish
  4. Python数学建模问题总结(1)NameError: name ‘xxx‘ is not defined
  5. 智慧餐车机器人系统数据流图
  6. 调节e18-d80nk的测量距离_经纬仪使用教程,附输电线路工程测量方法
  7. 如何从github下载源代码文件 ?1分钟搞定
  8. P1320 压缩技术(续集版)-C语言
  9. EM算法实例(Python)
  10. 【ESP32S2】使用ESP32S2开发板制作U盘,支持无线访问