本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示。

标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点。在算法开始时,数据点的子集(通常只占很小一部分)有标签(或分类)。在整个算法过程中,这些标签会传播到未标记的点。

在复杂的网络中,真实的网络往往具有社区结构。标签传播是寻找社区的一种算法。 与其他算法相比,标签传播在运行时间和关于网络结构所需的先验信息量方面具有优势(不需要预先知道参数)。缺点是它不会产生唯一的解决方案,而是产生许多解决方案的集合。

注意:该算法是概率性的,并且发现的社区可能因执行的不同而不同

算法的思想:
在用一个唯一的标签初始化每个节点之后,该算法会重复地将一个节点的标签设置为该节点的相邻节点中出现频率最高的标签。当每个节点的标签在其相邻节点中出现得最频繁时,算法就会停止。该算法是异步的,因为每个节点都会在不等待其余节点更新的情况下进行更新。

该过程有5个步骤:

  1. 初始化网络中所有节点的标签。对于给定的节点x,Cx (0) = x。
  2. 设置t = 1。
  3. 以随机顺序排列网络中的节点,并将其设置为x
  4. 对于以特定顺序选择的每个x ∈ X,让Cx(t) = f(Cxi1(t),…、Cxim(t)、Cxi(m+1)(t1)。…,Cxik(t1))。f这里返回相邻标签中出现频率最高的标签。如果有多个最高频率标签,就随机选择一个标签。
  5. 如果每个节点都有其邻居节点中数量最多的标签,则停止算法。否则,设置t = t + 1并转到(3)。

python实现LPA代码如下:

import random
import networkx as nx
import matplotlib.pyplot as plt'''
本文实现标签传播算法 2007年
author:xiao黄
time:2020.09.27
blog:https://blog.csdn.net/Python_Matlab
'''
# 应该封装成类的形式def lpa(G):'''异步更新方式G:图return: None通过改变节点的标签,最后通过标签来划分社区算法终止条件:迭代次数超过设定值'''max_iter_num = 0 # 迭代次数while max_iter_num < 10:max_iter_num += 1print('迭代次数',max_iter_num)for node in G:count = {} # 记录邻居节点及其标签for nbr in G.neighbors(node): # node的邻居节点label = G.node[nbr]['labels'] count[label] = count.setdefault(label,0) + 1# 找到出现次数最多的标签count_items = sorted(count.items(),key=lambda x:-x[-1])best_labels = [k for k,v in count_items if v == count_items[0][1]]# 当多个标签最大技术值相同时随机选取一个标签label = random.sample(best_labels,1)[0] # 返回的是列表,所以需要[0]G.node[node]['labels'] = label # 更新标签def draw_picture(G):# 画图node_color = [float(G.node[v]['labels']) for v in G]pos = nx.spring_layout(G) # 节点的布局为spring型plt.figure(figsize = (8,6)) # 图片大小nx.draw_networkx(G,pos=pos,node_color=node_color)plt.show()if __name__ == "__main__":G = nx.karate_club_graph() # 空手道# 给节点添加标签for node in G:G.add_node(node, labels = node) # 用labels的状态lpa(G)com = set([G.node[node]['labels'] for node in G])print('社区数量',len(com))draw_picture(G)

算法运行结果:

调包实现LPA代码如下:

import matplotlib.pyplot as plt
import networkx as nx
from networkx.algorithms.community import asyn_lpa_communities as lpaG = nx.karate_club_graph() # 空手道俱乐部
com = list(lpa(G))
print('社区数量',len(com))# 下面是画图
pos = nx.spring_layout(G) # 节点的布局为spring型NodeId = list(G.nodes())
node_size = [G.degree(i)**1.2*90 for i in NodeId] # 节点大小plt.figure(figsize = (8,6)) # 图片大小
nx.draw(G,pos, with_labels=True, node_size =node_size, node_color='w', node_shape = '.')
'''
node_size表示节点大小
node_color表示节点颜色
with_labels=True表示节点是否带标签
'''
color_list = ['pink','orange','r','g','b','y','m','gray','black','c','brown']for i in range(len(com)):nx.draw_networkx_nodes(G, pos, nodelist=com[i], node_color=color_list[i],  with_labels=True)plt.show()

参考文献:
Raghavan、Usha Nandini、R_ka Albert和Soundar Kumara。”大型网络中检测社区结构的近线性时间算法〉,《物理评论》E 76.3(2007):036106。

U.N.Raghavan – R. Albert – S. Kumara “Near linear time algorithm to detect community structures in large-scale networks”, 2007.

附源码|复杂网络社区发现——标签传播算法(LPA)相关推荐

  1. (附源码)计算机毕业设计SSM基于推荐算法的鞋服代购平台

    (附源码)计算机毕业设计SSM基于推荐算法的鞋服代购平台 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe( ...

  2. 浅谈标签传播算法:LPA

    标签传播算法:LPA 1.半监督学习 让学习器不依赖外界交互,自动的利用未标记样本来提升学习性能,这种就是半监督学习,主要用来处理现实中有标记数据少.未标记数据多的问题,要利用未标记的数据,必须要做一 ...

  3. 浅谈标签传播算法LPA

       研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正.   标签传播算法是一种基于图的半监督学习方法,其 ...

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

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

  5. (附源码)springboot社区疫苗接种管理系统 毕业设计 281442

    Springboot+社区疫苗接种管理系统 摘 要 预防预接种工作实行网络信息化管理,是我国免疫规划工作发展的需要.接种信息实行网络信息化不仅是预防接种工作步入了一个新的台阶,更重要的是解决了多年疫苗 ...

  6. (附源码)springboot社区快递代取服务系统 毕业设计051434

    springboot社区快递代取服务系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为 ...

  7. [附源码]JAVA+ssm社区论坛(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. [附源码]java毕业设计社区健康服务平台管理系统lunwen

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. (附源码)springboot网络微小说 毕业设计031758

    Springboot网络微小说的设计与实现 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在网 ...

最新文章

  1. Linux查看环境变量当前信息和查看命令
  2. c++ 新建一个数组
  3. 太极创客ESP8266 - NodeMCU、JSON、MQTT教程(基于Arduino)
  4. dj鲜生-26-登陆时-记住用户名的操作
  5. VirtualBox 安装 Ubuntu 14.10 花屏 解决方案
  6. pyecharts制作交互式数据展示地图
  7. python 遍历对象_Python遍历对象属性
  8. C语言error2005,c链接器错误LNK2005已在SDL中定义
  9. 深入浅出hibernate_夏昕_hibernate对储存过程的处理
  10. 装机 --- Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表。在EFI系统上,Windows只能安装到GPT磁盘
  11. ECCV2020 点云处理——A Closer Look at Local Aggregation Operators in Point Cloud Analysis
  12. h5微信f分享链接给对方获取对方手机号_企业微信可以搜索微信号添加好友/客户吗?怎样主动添加通过率高?...
  13. 阿里云数据库再获学术顶会认可,一文全览VLDB最新亮点
  14. 服务器显示114,DNS设置成114.114.114.114还是自动获取更好?那个网速更快?为什么?...
  15. 懂得爱――在亲密关系中成长
  16. getPhoneNumber:fail no permission
  17. XAMPP的下载、安装、配置
  18. 解析SCUT FIR Pedestrian Dataset数据
  19. 兼收并蓄,不要试图去研究它.---JAVA之我注六经之三
  20. 中国人民公安大学计算机学院,计算机信息与网络安全系赴中国人民公安大学和北京警察学院考察调研...

热门文章

  1. 会议及作用篇--项目管理(三)
  2. 2022百度收录方法-顺鑫说seo
  3. 正则表达式匹配USD格式
  4. ue5 lyra探索分析2 持续更新中
  5. 摘自:《设计心理学3:情感设计》 — 〔美〕唐纳德·A·诺曼(Donald Arthur Norman)
  6. 瑞萨单片机之电压检测器(低压复位)(六)
  7. 个人学习网站记载(因为并不能转载只能记网站了)
  8. cc 和 bcc 的区别 邮件
  9. vsco和lr哪个好_我为什么选择了Lightroom,抛弃了VSCO、snapseed?(附508个预设)
  10. Windows主机入侵痕迹排查办法