zoukankan      html  css  js  c++  java
  • 模块度与Louvain社区发现算法

    转自:感谢分享!https://zhuanlan.zhihu.com/p/29380602

    详细解释见: www.cnblogs.com/fengfenggirl

    Louvain算法其实是基于层次聚类的,图聚类。层次聚类依据是类间距更大,Louvain算法图聚类依据是模块度(公式在下方)。

    Louvain算法包括两个阶段,迭代这两个阶段。

    1不断地遍历网络中的结点,假设每个节点为1个社区,N个节点,初始化N个社区,尝试将单个结点加入能够使模块度提升最大的社区中,直到所有结点都不再变化。

    模块度提升的定义如下:

    前项代表的意思为结点加入邻居社区后,社区内内所有边

    后项代表着结点加入邻居社区后,社区所有边(包括内部边,以及连接外部的边)

    目的是变化后希望子社区内边,外边少,即更聚集。

    但是为什么后项要所有边呢?因为后项带了惩罚项的意思,没有惩罚项的话把所有都分成一个社区都分成一起就最大了。

    2它处理第一阶段的结果,将一个个小的社区归并为一个超结点来重新构造网络。它的执行流程如图所示:

    迭代这两个步骤直至算法稳定(所有子社区模块度相加值不变)。

    前项代表的意思为子社区内所有边,后项代表着子社区社区所有边(包括内部边,以及连接外部的边)。

    模块度就是希望子社区内边,外边少,即更聚集。

     

  • 相关阅读:
    Ubuntu 16.04
    每天一道LeetCode--389. Find the Difference
    每天一道LeetCode--371. Sum of Two Integers
    Ubuntu 16.04 小飞机启动失败
    每天一道LeetCode--344. Reverse String
    leetcode1458 Max Dot Product of Two Subsequences
    CF1313C2 Skyscrapers (hard version)
    CF1295C Obtain The String
    CF1251D Salary Changing
    CF1286A Garland
  • 原文地址:https://www.cnblogs.com/baiting/p/7736800.html
Copyright © 2011-2022 走看看