图论-图论算法之Louvain

社区发现算法简介之Louvain算法
    在本次文章中,我们将会介绍经典的社区发现方法,也就是Louvain算法。这种算法在社群发现等应用的效果较好,是比较经典的图挖掘类算法,在金融风控行业挖掘诈骗团伙等应用里有比较显著的效果。社区发现方法的目标是在整个图里面发现一些有聚集性特征的群体,这些群体的特征是内部的互相联系较为紧密,外部和其他点的联系较为稀疏。下面我们对算法思路和步骤进行介绍。
    Louvain算法的核心就是模块度的计算,它每一次将模块度变化更大的邻居团伙作为当前点的目标团伙,反复计算迭代后可以得到最终的社团发现结果。其中模块度的计算公式如下所示,我们发现其中A其实就是全图的邻接矩阵的某个位置的元素,而m其实是A矩阵所有元素的求和结果,这个公式的最后面有一个0-1函数,它的作用是如果两个点不属于同一个社区,那么将设置Q值为0,也就是不需要计算。

    在得到了模块度的公式后,我们进一步求模块度的变化结果,也就是计算当新的点加入到社区的时候,对于原有两个社区的变化,而公式也是用新的模块度Q值去减去原有两个旧的模块度Q值,经过化简后得到下述的式子。其中K(i,in) 指的是当前社区内部的所有节点和新的节点i所连接的边的权值之和;而K(i) 则是所有和节点i直接相连的边的权值之和;Σtot 的含义是当前社区边内部的权重之和再加上当前社区和其他社区相连接的边的权值之和的结果。

    根据上述的公式,我们只需要不断的计算模块度变化值就可以了,直到迭代计算的次数达到了最大上限的次数,或者整体的模块度已经不发生变化的时候就可以结束算法。那么根据上述公式和思路,我们总结的Louvain算法步骤如下:
    1)初始化参数设置,比如最大迭代次数,每个点的模块度初始值等参数。
    2)遍历每个节点,比较每个节点和周围相邻社区(最开始周围社区是节点,后续的迭代中可能变成多个点聚集的社区),计算当前节点和周围社区的模块度变化,也就是ΔQ,将每个节点加入到模块度大于0并且具有最大模块度增量的社区之中,如果周围的社区计算得到的模块度增量都是小于0的,则无需操作,保留当前节点并且不加入到任意社区中。
    3)对上一步骤得到的结果进行重构,也就是将各个社区重新合并,把原有的图转化为新的超图,可以认为新的社区是一个大的“节点”,而两个大的“节点”之间的边的权重就是社区内部所有节点互相的边的距离权重之和,从而构建新的超图后,再次进行迭代计算模块度变换。
    4)反复重复上述步骤后,直到整体的模块度不再变化或者达到了最大的迭代次数后,停止该算法。

    总的来说,本文提及的Louvain算法是比较经典和实用的算法,在真实场景中经常被使用,因为它本身的原理比较经典,而且算法的核心思路是符合图自身结构的聚类趋势的,但是需要注意的是Louvain算法针对的是无向图,如果是有向图则无法使用,或者尽量弱化为无向图。Louvain算法是初学者需要掌握的,可以帮助在后续学习其他算法的过程中打好基础,并且解决真实应用里的问题。

泛运筹理论初探——Louvain算法简介相关推荐

  1. 泛统计理论初探——孤立森林简介

    数据挖掘-孤立森林方法 孤立森林算法简介 孤立森林是一种用于异常检测的算法,本文将对该算法进行简介,包括算法的理念.步骤.以及使用场景.常见的异常检测方法主要是统计学课本上学到一些方法,比如六西格玛方 ...

  2. 泛统计理论初探——余弦距离简介

    统计学习-余弦距离简介 介绍余弦距离 在衡量变量之间距离的时候,我们发现可以用欧式距离.绝对值距离,本文我们将来介绍另一种距离,即余弦距离.余弦距离在实际问题中经常用到,由于它的计算方法是把各个维度的 ...

  3. 泛统计理论初探——初探Gibbs采样

    统计学习-Gibbs采样简介 初探Gibbs采样方法     在上一篇文章中,我们介绍了MCMC抽样和MH抽样的方法,在本次文章中将会介绍Gibbs抽样方法,这种方法其实是基于MCMC抽样的一种优化方 ...

  4. 泛统计理论初探——初探MCMC采样和MH采样

    统计学习-MCMC采样与MH采样简介 初探MCMC采样方法和MH采样方法     在之前介绍的文章中,我们介绍了基本的采样方法.在了解简单的采样方法后,本次文章将会介绍MCMC采样方法与优化的MH采样 ...

  5. 泛统计理论初探——KNN

    数据挖掘-knn KNN算法 KNN算法是机器学习里较为简单和初级的算法,也称为最近邻算法.可以算的上是学习数据挖掘的入门算法,在大赛中,该算法一般用来作为插值来用,一般不会直接使用该算法来进行预测. ...

  6. Louvain 算法

    Louvain 算法 简介 Louvain 算法是一种基于贪心的社群发现算法,其主要思想是将节点不断地聚合成社区(community),并最大化社区内部的连通性以及社区之间的连接弱化.该算法的特点在于 ...

  7. 【计算机视觉】PnP算法简介与代码解析-柴政(solvepnp理论篇)

    PnP算法简介与代码解析-柴政 PnP求解算法是指通过多对3D与2D匹配点,在已知或者未知相机内参的情况下,利用最小化重投影误差来求解相机外参的算法.PnP求解算法是SLAM前端位姿跟踪部分中常用的算 ...

  8. 常用数据挖掘算法简介

    1.朴素贝叶斯 朴素贝叶斯分类法是统计学分类方法,在特征条件独立的前提下,基于贝叶斯定理计算的隶属关系概率进行分类. 朴素贝叶斯分类有着坚实的数学基础和稳定的分类效率,同时,分类模型需要估计的参数很少 ...

  9. DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释)、案例应用之详细攻略

    DL之BP:神经网络算法简介之BP算法简介(链式法则/计算图解释).案例应用之详细攻略 相关文章:DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类 ...

  10. (一)数据结构与算法简介

    数据结构与算法简介 目标 掌握数据结构与算法的理论知识 补齐算法短板 梳理前端与算法结合点,不再纸上谈兵,将算法用于实战 三部曲 理论:数据结构与算法的特点.应用场景等等 刷题:做一些算法题,推荐使用 ...

最新文章

  1. 下载最新Android代码的方法
  2. linux每日命令(31):tar命令
  3. Feature Pyramid Networks for Object Detection 总结
  4. Artifact到底是什么
  5. 可到了关键部分的作文
  6. Java基础学习总结(135)——Java代码性能优化实践经验再总结
  7. 【Spring】bean的作用域
  8. windows 如何查看文件夹所使用的图标
  9. springboot:运行(部署)时出现WebServerException: Unable to create tempDir.
  10. micropython stm32f107_stm32f107 USART3数据接收错误问题
  11. vim实用指南(9)vimdiff好用的可视化文本对比工具
  12. Jmeter beanshell语法
  13. 给电视剧标注人脸的简单步骤:
  14. 出货系统镜像批量安装方案
  15. 你们吹捧的鸿蒙,只是另一个 Fuchsia
  16. Pytest-html生成独立的报告以及Python打印日志
  17. 攻防世界 -- very_easy_sql
  18. Cassandra使用总结
  19. Python中字典及应用(详细)
  20. bwapi 4.2.0 目测必将太监的个人研究

热门文章

  1. java实现根据pdf文件模板生成pdf文件
  2. 如何删除.sys的流氓文件
  3. 巧用JSON.stringify()生成漂亮格式的JSON字符串
  4. cad手机看图 android,CAD手机看图
  5. HenCoder Android 自定义 View 1-8 硬件加速
  6. DevCon 命令与批处理自动禁用启用网卡
  7. angular 点菜_Vue2与Angular5实现无人点餐、无人收银系统项目实战视频教程【组合套餐】(大地)...
  8. 腾讯java笔试题_腾讯java笔试题
  9. 机械--NX2007(UG)有限元分析教程1--简单物体
  10. Ansys Maxwell三相变压器制作方法教程