12-网络中的社区检测

图机器学习(网络中的社区检测)

1. 前言

图中的社区识别任务就是对节点进行聚类

请添加图片描述

网络会长成图中这样:由多个内部紧密相连、互相只有很少的边连接的community组成。

1. 从社会学角度理解这一结构:

在社交网络中,用户是被嵌入的节点,信息通过链接(长链接或短链接流动)。以工作信息为例,Mark Granovetter 在其60年代的博士论文中提出,人们通过人际交往来获知信息,但这些交际往往在熟人(长链接)而非密友(短链接)之间进行,也就是真找到工作的信息往往来自不太亲密的熟人。这与我们所知的常识相悖,因为我们可能以为好友之间会更容易互相帮助。

请添加图片描述

请添加图片描述

2.原因分析
  1. ‎结构:也就是社区内部、紧凑的短边更强,社区之间、稀疏的长边更弱。

  2. 人际关系:长距离边可以使人获取网络中不同部分的信息,从而得到新工作。structurally embedded边在信息获取方面则是冗余的。也就是说,你跟好友之间可能本来就有相近的信息源,而靠外面的熟人才可能获得更多新信息。

请添加图片描述

3. Triadic Closure

Triadic Closure是指在社交网络中,节点往往有三角形的relation关系。

举例:
‎如果B和C有一个共同的朋友A,那么:‎
‎B更有可能遇到C‎(因为他们都花时间与A在一起)‎
‎B和C相互信任‎(因为他们有一个共同的朋友)‎
‎A有动力将B和C放在一起‎(因为A很难保持两个不相交的关系)‎

有研究表明,青少年女生聚类系数低,那么自杀倾向较高。人类就是群居动物。

4. Edge overlap

下面来看如何量化两个节点间关系的强弱:

请添加图片描述

N ( i ) 表示节点 i 的邻居集合。 N(i)表示节点i的邻居集合。 N(i)表示节点i的邻居集合。上式中分子是除了i,j节点本身外二者的共同邻居,分母是除了i,j节点本身外二者所有邻居。

请添加图片描述

有了这个量化值后,可以看一些实例数据对60年代的理论分析的实证。

请添加图片描述

上图中,蓝色是真实的通话数据,红色是保持网络结构不变随机分配通话数量后的结果。横坐标通话数量和纵坐标edge overlap之间具有正相关性。

将部分数据可视化后(密集community颜色越红):
请添加图片描述

将通信数量随机分配后:

请添加图片描述

从移边【1】分解实验可以看到

请添加图片描述

红色是Low to high的overlap移边方式,图分解更快。
黑色是High to low的overlap移边方式,图分解较慢。

【1】移边,相当于先将重合率低的边先移除


2. Network Communites

下面在看几个从图中找Network Community的例子,然后看如何在图中用数学的方式把Network Community给定义出来。
Network Community的别名还有:clusters, groups, modules

1. 例子

以Zachary’s Karate club network来说,通过社交关系创造的图就可以正确预判出成员冲突后会选择哪一边

请添加图片描述

在在线广告投放中,把广告商和查询关键字看做节点,将广告商投放的关键字作为边。可以识别出有针对性的投放区域。

请添加图片描述

NCAA Football Network,节点是球队,边是球队之间的比赛,原始图这样:

请添加图片描述

聚类后发现和某些conference(赛区)有关:

请添加图片描述

下面看如何找社区。

2. Network Communites的模块化程度

社区:紧密连接的节点‎‎集
定义:模块化 Q‎
‎网络划分为社区的程度的度量。‎‎给定网络划分为不相交的组‎‎ s ∈ S s\in S sS

Q ∝ ∑ s ∈ S [ ( ♯ e d g e s w i t h i n g r o u p s ) ] − ( e x p e t e d ♯ e d g e s w i t h i n g r o u p s ) Q\propto \sum_{s\in S}[(\sharp edges\quad within\quad group\quad s)]-(expeted\sharp edges\quad within\quad group\quad s) QsS[(edgeswithingroups)](expetededgeswithingroups)

这里的后面的一项比较难理解,是一个期望,实际上是需要使用随机图(Null model)来求。

3. Null Model

给定一个实际的图G,该图包含n个节点,m条边,根据图G保持节点和边数量不变(Same degree distribution but uniformly random connections),重新分配边的连接得到图 G ′ , 而且图 G ′ G',而且图G' G,而且图G是multigraph,就是允许两个节点间有多条边。

接下来算期望。

请添加图片描述

如果把边看成双向的,那么共有2m条有向边(这样算是因为节点都象上图一样切开了,每个点的条幅数量加起来就是2m),对于出度为 k i 的 i k_i的i kii节点,其重新连接到节点j的概率是: k j 2 m \frac {k_j}{2m} 2mkj,因此重连 i , j i,j i,j的边的数量期望是: k i ⋅ k j 2 m k_i\cdot \frac{k_j}{2m} ki2mkj

那么计算 G ‘ G^` G的期望总边数为:

请添加图片描述

这里因为条件中讲了,所有节点的边(度)加起来是2m,因此: ∑ i ∈ N k i = ∑ i ∈ N k j = 2 m \sum_{i\in N}k_i=\sum_{i\in N}k_j=2m iNki=iNkj=2m

这里也证明了Null Model中与原图的度是一致的。注意:Null Model可以用在有权图中,有权图可以把权重与度做乘积即可。

4. Modularity

具体来算Modularity,根据上面的公式:

请添加图片描述

加上具体的数学表达,Modularity公式变成:

请添加图片描述

这里的 1 2 m \frac{1}{2m} 2m1相当于归一化常数,使得 − 1 ≤ Q ≤ 1 -1\leq Q \leq 1 1Q1其中A就是邻接矩阵(可以是有权图)。如果S中的边比随机图中边(期望数量)要多,上面括号里面的值就为正,说明S中边要比随机图要密集。一般Q在0.3-0.7之间就意味图中有非常明显的community结构。

Modularity的最终形式如下:

请添加图片描述

这里的 c i , c j c_i,c_j ci,cj是同一社区的节点 δ \delta δ是指示函数,当两个节点来自相同社区 δ ( c i , c j ) = 1 \delta(c_i,c_j)=1 δ(ci,cj)=1否则为0,我们可以通过最大化modularity来找出社区。


3. Louvain Algorithm

下面用Louvain算法来最大化modularity来找出社区

1. 算法概述

Louvain Algorithm是一个贪心算法,时间复杂度为:O(n log n)

该算法支持有权图(无权图可以看做边的权重都为1),最后的结果是层次结构的。

请添加图片描述

算法可用于大型网络,原因是:算法快、收敛快。可得到高modularity的输出
整个算法可以分三个步骤:

  1. 仅通过节点-社区隶属关系的局部改变来优化modularity。
  2. 将第一步识别出来的communities聚合为super-nodes,从而得到一个新网络。
  3. 返回第一阶段,重复直至modularity不可能提升。
    请添加图片描述
2. 步骤一

先给出大概的描述,再看具体算法。
1.先将图中每一个单独的节点看做一个community。
2.对每个一个节点i,执行两个计算
1.计算将节点i加入节点i的邻居节点j所在社区后的modularity值: Δ Q \Delta Q ΔQ
2.确定将节点i加入邻居节点j所在社区,使得 Δ Q \Delta Q ΔQ最大
3.当modularity值不再增加时,步骤1结束
选择不同的节点i计算得到modularity值会有所不一样,但是研究表明,这基本不会影响最终的community划分

1. 计算 Δ Q \Delta Q ΔQ

假设节点i当前所在社区为D,移动到其邻接节点j所在社区为C,那么:

请添加图片描述

其图例为:

请添加图片描述

下面来推导等式右边的两项,先看 Δ Q ( i → C ) \Delta Q(i\rightarrow C) ΔQ(iC)

2.推导 Δ Q ( C ) \Delta Q(C) ΔQ(C)

先算社区C的modularity: Q ( c ) Q(c) Q(c)

设: ∑ i n ≡ ∑ i , j ∈ C A i j \sum_{in}\equiv \sum_{i,j\in C}A_{ij} ini,jCAij

记为社区C中节点内部边的权重和,A是邻接矩阵,i,j是C中的任意两个节点。

请添加图片描述

∑ t o t ≡ ∑ i ∈ C k i \sum_{tot}\equiv \sum_{i\in C}k_i totiCki

记为社区C中节点所有边的权重和,tot是total的缩写。

请添加图片描述

从图例中可以看到为了兼容有向图,这里的无向图边算了2次,看不懂会前面看modularity推导。根据公式,我们可以得到:

请添加图片描述

这里由于i,j都是来自相同社区C,因此指示函数 δ \delta δ值为1,然后把前面的 1 2 m \frac{1}{2m} 2m1方进行去:

请添加图片描述

请添加图片描述

上式中第一项是社区节点内部的边权重,后面一项是社区节点所有边的权重
当社区内部节点的边权重越大,Q©就越大。

3. 推导 Δ Q ( i → C ) \Delta Q(i\rightarrow C) ΔQ(iC)

进一步定义:

请添加图片描述

节点i在社区C外面,它与社区内部的权重和记为 k i , i n k_{i,in} ki,in,同样计算两次

请添加图片描述

同样记节点i的权重和(其实就是度)为 k i k_i ki

请添加图片描述

那么在节点i加入社区C之前,计算公式为:

请添加图片描述

请添加图片描述

在节点i加入社区C之后,计算公式为:

请添加图片描述

请添加图片描述

第一项的分子 ∑ i n + k i , i n \sum_{in}+k_{i,in} in+ki,in相当于计算新社区C+{i}的内部边权重: ∑ i n a f t e r \sum_{inafter} inafter

第二项的分子 ∑ t o t + k i \sum_{tot}+k_{i} tot+ki相当于计算新社区C+{i}的内部边权重: ∑ t o t a f t e r \sum_{totafter} totafter

根据上述公式

请添加图片描述

有了这个结论, Δ Q ( i → C ) \Delta Q(i\rightarrow C) ΔQ(iC)也可以计算,因此:

请添加图片描述

也可以相应的计算出来。

4.步骤一的迭代及其终止

重复步骤1直到没有节点移动到新的社区:
对社区C中每个节点i,计算其最佳社区 C ‘ C^` C,使其满足:

请添加图片描述

如果计算得到的 Δ C ( D → i → C ‘ ) > 0 \Delta C(D\rightarrow i\rightarrow C^`)>0 ΔC(DiC)>0则将节点i从原社区移动到新的社区里面去

3. 步骤二

这个步骤相对简单一些。
将上一步得到结果中的各个社区看做一个个super-nodes,然后得到新的一个网络,并将步骤1中的计算过程在新网络中再玩一次。
对于新网络创建,需要注意下面两点:
1.如果上一步的两个社区之间有若干个边相连,那么两个社区对应的super-nodes也相连;
2.两个super-nodes相连的边的权重等于两个社区之间所有相连边的权重和。

请添加图片描述

4.实例

比利时人的通话网络可视化结果

请添加图片描述

说法语的人通常和相同语言人通话,造成了整个网络分化成两个大的阵营。


4. Detecting Overlapping Communities: BigCLAM

虽然区分图中的聚类可以得到不同的社区,但是实际生活中各个社区之间可能会有重叠:

请添加图片描述

对于左边的Non-overlapping Network

请添加图片描述

对于右边的Overlapping Network

请添加图片描述

例如在Facebook的Ego的网络中:

请添加图片描述

有些节点会属于多个社区,图中有空心节点表示分类错误的结果。
对于蛋白质网络,可以看到类似结果:

请添加图片描述

下面就要讲如何找出图中的重叠的部分。大概两步:
步骤1:定义一个基于节点社区图生成模型:Community Affiliation Graph Model (AGM)
步骤2:假设图G由AGM算法生成,找出最有可能生成图G的AGM模型,并通过该模型来找出重叠社区。

1. AGM

请添加图片描述

上图是AGM模型生成图的过程,可以看到,模型有几个参数:
以及每个Community C 中各个节点有 p c p_c pc的概率相连,可以理解为有一个硬币,它丢出去朝上的概率是 p c p_c pc,然后让Community C中每个节点和其他节点之间用丢硬币的方式来决定,是否有边相连。

请添加图片描述
请添加图片描述

创建出来的图有几种结果:

  1. Dense Overlaps

请添加图片描述

  1. Non-overlapping

请添加图片描述

  1. Overlapping

请添加图片描述

  1. Nested

请添加图片描述

2. Detecting Communities

反过来从图反推模型(MLE):给定图,找出最大可能生成该图的AGM模型

请添加图片描述

也就是确定: M , C , p c M,C,p_c M,C,pc这些参数使得AGM模型生成给定图G的概率最大化。如果把参数统称为F,则就是要:

请添加图片描述

这个就是图似然

1. Graph Likelihood P(G∣F)

对于已知的图G应该是这个样子(就是邻接矩阵)

请添加图片描述

要优化的参数F ,应该是这个样子(和邻接矩阵大小一样的一个概率矩阵):

请添加图片描述

这个矩阵中每个元素代表当前两个节点之间有边的概率,例如红圈里面的0.25表示1号节点和自身产生self-loop的概率是0.25
有了上面两个概念,下面就可以计算:P(G∣F)

上式中第一项表示图G中有边节点对的概率连乘,第二项表示图G中无边节点对的概率连乘

2. Strengths of Membership

Strengths of Membership定义如下图所示:

请添加图片描述

F u A F_{uA} FuA表示节点u属于社区A的强度,如果if u ∉ A , F u A = 0 u\not\in A,F_{uA}=0 uA,FuA=0有了这个定义,那么对于某个社区C,我们可以用下面的式子来表示两个节点u,v相连的概率:<img 请添加图片描述

因此:0 ≤ P ( u , v ) ≤ 1 ,这个是一个有效概率

例如:
两个报警系统A和B,他们在单独使用时A的有效概率0.92,B的有效概率0.93
至少有一个有效概率=1-A和B均失效的概率=1-(1-0.92)×(1-0.93)=0.9944

请添加图片描述

请添加图片描述

我们把一个节点可以属于多个社区的设定带进来:

请添加图片描述

那么两个节点u,v通过至少一个社区相连的概率可以写为:(两个节点u,v没有通过任何社区相连的概率的连乘。)

请添加图片描述

请添加图片描述

最后把u,v节点属于所有社区集合Γ 的strength写成一个向量:

请添加图片描述

3. BigCLAM

请添加图片描述

意思是u,v节点相连的概率正比于节点与社区集合间的strength。之前有过目标,就是给定图G(V,E),需要最大化模型生成图的似然。

请添加图片描述

直接两边同时求log变成:

请添加图片描述

则损失函数 l ( F ) l(F) l(F),因为要最大化,所有这里用梯度上升的方式来求解,给出对 F u F_u Fu求偏导的结果(就是梯度):

请添加图片描述

这个梯度的时间复杂度由两部分组成:

第一部分是和节点u的度成正比 v ∈ N ( u ) v\in N(u) vN(u),速度较快

第二部分和所有节点数量(不含节点u及其邻居)成正比 ( v ∉ N ( u ) ) (v\not\in N(u)) (vN(u))速度较慢我们把第二部分的计算改写为:

请添加图片描述

相当于所有节点的强度减去节点u及其邻居集合 N ( u ) N(u) N(u)的强度。

上式中第一项可以提前计算出来,重复使用,因此整个梯度计算时间复杂度和节点u的度呈线性关系。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值