用networkx、igraph实现社区发现——LPA(标签传播算法)
一、LPA简介
LPA全称为Label Propagation Algorithm,是一个基于标签传播的非重叠社区发现算法。通过LPA可以对用户群进行聚类,从而实现用户画像。
推荐系统初期,当标签数远远小于未标签数时,传统的监督式学习不适合,可以采用半监督学习,即通过有限的标签传播至未标签的数据。
算法步骤
- 每个节点拥有独立的标签
- Step2,标签传播,节点向邻居节点传播自己的标签
- Step3,标签更新,每个节点的标签更新为邻居节点中出现次数最多的标签。如果存在多个选择,则随机选择一个
- Step4,如果节点更新后的标签发生了变化,则返回到Step2(激活状态),否则节点进入非激活状态,如果所有图中所有节点均为非激活状态,则标签更新结束。此时具有相同标签的节点属于同一个社区
二、数据集
一些常用的社区发现数据集
- football.gml
美国大学生足球联赛的复杂网络,包括115支球队(节点)和616场比赛(边)。实际上参赛的115支球队被分为12个联盟。比赛机制为:联盟内部的球队进行小组赛,然后是联盟之间比赛。 - karate.gml
一个美国大学空手道俱乐部的网络,34个成员(节点)和78条边(成员之间存在的友谊关系) - dolphins.gml
长达7年的时间观察新西兰Doubtful Sound海峡 62 只海豚(节点)的交流情况(边)而得到的复杂网络。有 62 个节点,159 条边。
gml是一种图描述语言。
以football.gml数据集为例,graph中分为node和egde两部分。
node部分的id为唯一标识,label为标签,value为所属联盟,是一个静态属性。
edge部分为两个结点的id。
graph
[directed 0node[id 0label "BrighamYoung"value 7]node[id 1label "FloridaState"value 0]
edge[source 47target 2]edge[source 47target 39]
二、networkx
1、代码
import networkx as nx
from networkx.algorithms import community
import matplotlib.pyplot as plt# 数据加载
G = nx.read_gml('./football.gml')
# 可视化
nx.draw(G,with_labels=True)
plt.show()# 社区发现
communities = list(community.label_propagation_communities(G))
print(communities)
print(len(communities))
2、运行结果![](/assets/blank.gif)
分为7个类别(聚类个数为动态数据,不确定)
[{'Purdue', 'Toledo', 'Kent', 'Minnesota', 'NorthernIllinois', 'Connecticut', 'Illinois', 'Northwestern', 'MiamiOhio', 'PennState', 'WesternMichigan', 'BowlingGreenState', 'Michigan', 'Marshall', 'Indiana', 'CentralMichigan', 'Akron', 'Iowa', 'Buffalo', 'MichiganState', 'Ohio', 'BallState', 'EasternMichigan', 'Wisconsin', 'OhioState'}, {'Baylor', 'KansasState', 'Kansas', 'Nebraska', 'TexasTech', 'IowaState', 'Colorado', 'Texas', 'Missouri', 'OklahomaState', 'Oklahoma', 'TexasA&M'}, {'Mississippi', 'Florida', 'Tennessee', 'Vanderbilt', 'Alabama', 'Auburn', 'LouisianaState', 'Arkansas', 'Georgia', 'MississippiState', 'Kentucky', 'SouthCarolina'}, {'BoiseState', 'ArkansasState', 'Idaho', 'UtahState', 'SanDiegoState', 'NevadaLasVegas', 'NewMexico', 'NorthTexas', 'BrighamYoung', 'NewMexicoState', 'AirForce', 'ColoradoState', 'Wyoming', 'Utah'}, {'Washington', 'OregonState', 'UCLA', 'WashingtonState', 'California', 'ArizonaState', 'Stanford', 'Oregon', 'Arizona', 'SouthernCalifornia'}, {'LouisianaTech', 'CentralFlorida', 'NorthCarolinaState', 'Temple', 'VirginiaTech', 'NotreDame', 'Houston', 'LouisianaLafayette', 'AlabamaBirmingham', 'FloridaState', 'Cincinnati', 'Clemson', 'SouthernMississippi', 'GeorgiaTech', 'Army', 'Tulane', 'BostonCollege', 'EastCarolina', 'Pittsburgh', 'Louisville', 'MiamiFlorida', 'MiddleTennesseeState', 'Syracuse', 'Virginia', 'LouisianaMonroe', 'NorthCarolina', 'Duke', 'Memphis', 'Navy', 'WestVirginia', 'WakeForest', 'Rutgers', 'Maryland'}, {'FresnoState', 'Rice', 'TexasChristian', 'SouthernMethodist', 'Tulsa', 'Nevada', 'Hawaii', 'SanJoseState', 'TexasElPaso'}]
7
三、igraph
igaph可以处理百万级节点的网络,比networrkx强大。
1、代码
import igraph
g = igraph.Graph.Read_GML('./football.gml')
igraph.plot(g)
print(g.community_label_propagation())
2、运行结果
分为10个类别
Clustering with 115 elements and 10 clusters
[ 0] 0, 4, 9, 16, 23, 41, 93, 104
[ 1] 1, 25, 33, 37, 45, 89, 103, 105, 109
[ 2] 2, 6, 13, 15, 32, 39, 47, 60, 64, 100, 106
[ 3] 3, 5, 10, 40, 52, 72, 74, 81, 84, 98, 102, 107
[ 4] 7, 8, 21, 22, 51, 68, 77, 78, 108, 111
[ 5] 11, 24, 28, 50, 69, 90
[ 6] 12, 14, 18, 26, 31, 34, 38, 42, 43, 54, 61, 71, 85, 99
[ 7] 17, 20, 27, 36, 44, 48, 56, 57, 58, 59, 62, 63, 65, 66, 70, 75, 76, 86,87, 91, 92, 95, 96, 97, 112, 113
[ 8] 19, 29, 30, 35, 55, 79, 80, 82, 94, 101
[ 9] 46, 49, 53, 67, 73, 83, 88, 110, 114
用networkx、igraph实现社区发现——LPA(标签传播算法)相关推荐
- 社区发现之标签传播算法(LPA)
在Graph领域,社区发现(Community detection)是一个非常热门且广泛的话题,后面会写一个系列,该问题实际上是从子图分割的问题演变而来,在真实的社交网络中,有些用户之间连接非常紧密, ...
- 【知识图谱】两种 Python 方法实现社区发现之标签传播算法(LPA)
在Graph领域,社区发现(Community detection)是一个非常热门且广泛的话题,后面会写一个系列,该问题实际上是从子图分割的问题演变而来,在真实的社交网络中,有些用户之间连接非常紧密, ...
- LPA标签传播算法——MATLAB实现及代码
•标签传播算法 (LPA)是由 Zhu 等人于 2002 年提出,它是一种基于图的半监督学习方法,其基本思路是用已标记节点的标签信息去预测未标记节点的标签信息.利用样本间的关系建立关系完全图模型,在完 ...
- 浅谈标签传播算法:LPA
标签传播算法:LPA 1.半监督学习 让学习器不依赖外界交互,自动的利用未标记样本来提升学习性能,这种就是半监督学习,主要用来处理现实中有标记数据少.未标记数据多的问题,要利用未标记的数据,必须要做一 ...
- 附源码|复杂网络社区发现——标签传播算法(LPA)
本文通过Python 3.7实现了标签传播算法的两个代码(1.自己写的,2.调包实现),并通过空手道俱乐部的例子进行可视化显示. 标签传播是一种半监督机器学习算法,它将标签分配给以前未标记的数据点.在 ...
- 社区发现(三):LPA算法(标签传播算法)
引用:https://blog.csdn.net/itplus/article/details/9286905 引用:https://www.jianshu.com/p/0c66b2717972 文章 ...
- 标签传播算法_复杂网络社区发现算法汇总
社区发现 这篇文章汇总了一些常见的社区发现概念和算法,包括 Modularity Q Fast Unfolding(Louvain Algorithm) LPA SLPA KL算法 GN算法 社区: ...
- 网络算法系列之社区发现(一):标签传播算法
社区发现简介 社区发现问题实际上是从子图分割的问题演变而来.在社交网络中,有些用户连接非常紧密,有些用户连接较为稀疏,这些连接紧密的用户可以看做一个社区,而社区之间连接较为稀疏.下图就展示了一个社 ...
- 浅谈标签传播算法LPA
研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正. 标签传播算法是一种基于图的半监督学习方法,其 ...
最新文章
- 阿里首次公开量子通信技术 为20年后做准备
- Disucz!高级幻灯片制作
- python英文文献_python英文文献
- Netflix 付费用户达2亿、苹果VR眼镜、抖音电子钱包、虚幻引擎用于电影制作等|Decode the Week...
- 设计师喜欢收集各种各样的笔刷来喽,不必倾家倾产就能像创造出令人惊叹的设计。
- HDU-1520 Anniversary party(树形DP)
- jPList – 实现灵活排序和分页功能的 jQuery 插件
- 37. 解决线程问题方式二(同步函数)
- BZOJ3343 洛谷2801:教主的魔法——题解
- 风阻能发电装置叶片的动力学仿真
- html工资计算页面模板,工资计算.html
- PYTHON对接验证码短信接口DEMO示例
- mysql mpm_部署zabbix监控mysql (三) MPM插件介绍和部署
- Unity3D人工智能学习笔记
- flutter ListView.separated 带分割线
- 基于FPGA的卷积神经网络加速器_余子健
- ssdt函数索引号_技术分享 - 32位系统上获取SSDT表地址以及从中获取指定SSDT函数的地址...
- 创造101:如果软件测试工程师组团出道,怎样才能站C位?!
- Springboot 整合 Current-Limiting 实现接口限流
- 辉芒微IO单片机FT60F123-RB
热门文章
- python表格单元格批注批量插图xlwings\os\pillow教程,手把手代码讲解
- 有源医疗器械额定电压如何写?
- php laravel union,教程:Laravel 集合(Collection)的基础用法
- 安卓手机卡顿怎么解决_oppo手机卡顿怎么解决?只需5秒,立马变新机
- Altium Designer v22.7.1.60 PCB板、电路原理图设计工具
- Java验证码及登录中的漏洞分析
- 基于 Java+MySQL 的桌面 GUI 图书管理系统【100010417】
- Win7 任务栏缩略图消失的解决办法
- parentNode,childNodes、children 的使用
- linux错误504怎么解决,Nginx提示504 Gateway Time-out错误的解决方法