一、定义什么是社区

        社区是一种局部性结构,该局部性结构内部连接紧密,而不同的局部性结构之间连接稀疏,这种局部性结构是社区。

        主要应用:好友推荐、广告推送

       二、如何评价一个社区的分类好坏的情况?

        用Modurity衡量。

        

 

       三、社区发现算法

        ① 算法1

        本质:二维空间的聚类,图的点通过距离等指标判断近似度,将近似度大的点分在一类。有两种方法判断

        方法1:两点之间至少要去掉多少个点,才能保证他们不会互相连通;-(NPC,很难求解)

        方法2:两点的路径越长,紧密程度越低;定义一个衰减因子α,判断两点之间的路径长。

        

        得到路径后,再对这些点进行聚类分析。

        为衡量聚类的好坏,引入参数 Modularity:(划分在社区内的边-随机边落在社区内),结果越大越好。随机边的产生模型见下图;

         

 

        ②基于中心度的社区发现算法

        edge betweenness:

         定义betweenness为:所有的最短路径的重合边。这些重合边相当于交通堡垒,连接社区的边具有高betweenness,删去边后如果社区不连通,就认为找到了社区。

        缺点:效率低下,因为要先算sssp的重合边,而后再不停的删去边。

         用BFS算eb(edge betweenness)(6个点算六次,加和/2,得到edge betweennes):  

        

       ③团

        原理:找接近于团的subgraph。

        找maximal团:(注意不是最大值)

        

         但现实生活大部分社区依然是到不了团的程度,因此有人提出:如果不同的团共享若干个点,则也认为它们是一个社区。下图右下方的结构,不同团共享k-1个点,认为他们是一个社区。

        

右侧矩阵,看有几个连通的,就是有几个团。 

       ④k-core算法

        原理:每个社区结构的点的core至少为k。

        

        类似剥洋葱,每次把degree<K的点和边删去,重复,直到所有点的degree>=k

         

        

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐