SLPA原理及详解



第一次写博客无论技术还是专业性都有欠缺,希望有什么意见或者建议都请提出,希望这篇文章能帮助大家,内容作者原创,转载请声明,谢谢。
1.什么是社区
社区是相互联系紧密,并且具有一定相似度的人群的集合。
2.什么是社区发现算法
社区发现算法是根据网络中论坛用户互动情况建立数学模型,根据数学模型划分出其社区的计算方法。
3.什么是SLPA
SLPA是LPA(标签传播算法)的一个扩展,SLPA的工作过程:
1.将所有成员打上不同标签
2.遍历成员,扫描每个成员关联的成员的标签。
3.将出现次数最多的标签记录,成为此成员的一个候选标签
4.候选标签出现最多的标签为此成员当前的社区名(例如:用户1记录标签:1出现三次,2出现五次,3出现四次,用户1所属社区就是2社区)
5.经过多次遍历成员使社区的划分更加明确
4.SLPA算法改进
传统的SLPA算法的数学模型是无向图,当扫描关联成员时所有相关联的成员都相当于一样的关联度,在现实生活中这种情况并不现实,所以我们将SLPA算法的模型改成无向带权图。
5.SLPA算法实现
SLPA算法的所需要传进去的参数有三个:
1.关系图G
2.最大迭代次数T
函数内部需要定义一个成员标签记录数据字典memory{成员名:{标签记录名:次数}}
和记录边权值的数据字典weight{头成员名:{尾成员名:权值}}
首先向memory和weight中填充已知数据。
memory中由于还未开始遍历标签记录名为其自己的名子,次数为1
开始遍历时将成员本身当作LISTENER将与其相关联的成员当作SPEAKER,LISTENER观察所有SPEAKER的memory将其memory的记录中出现次数最多的标签名提取出来,将LISTENER与SPEAKER之间的权值提取出来存入一个临时字典label。成员遍历完成后比较label中的值,将最大值所对应的标签存入memory的记录标签。
遍历T次后统计每个成员memory中记录标签出现的频率,取出频率最大的记录标签,作为此成员的社区标签名。
再遍历一次成员检索其所属社区将社区标签相同的加入一个集合中。
最后检查集合是否有相互包含的情况。
6.源码地址
https://github.com/aibaozi1/-

你可能感兴趣的:(算法,大数据,社区,算法)