图网络算法——网络属性和随机图算法
1、网络属性
一般情况下,我们采用以下几个指标来对网络进行评价和查看其特征。
1.1 度分布(Degree distribution)
基本定义:
P
(
K
)
P(K)
P(K):随机选择一个节点其度为K的概率。
N
(
K
)
N(K)
N(K):图中度为K的节点的个数
归一化:
P
(
K
)
=
N
k
N
P(K) = \frac{N_k}{N}
P(K)=NNk
归一化之后,我们就可以采用概率分布的形式将度的分布展现出来,例如下图所示:
1.2 路径和距离
基本定义:
一条路径可以被定义为一系列节点的集合,其中每一个节点和下一个节点相连接。用公式表示就是:
P
n
=
{
i
0
,
i
1
,
.
.
.
i
n
}
P_n=\{i_0,i_1,...i_n\}
Pn={i0,i1,...in}
或者
P
n
=
{
(
i
0
,
i
1
)
,
(
i
1
,
i
2
)
,
.
.
.
(
i
n
−
1
,
i
n
)
}
P_n=\{(i_0,i_1),(i_1,i_2),...(i_{n-1},i_n)\}
Pn={(i0,i1),(i1,i2),...(in−1,in)}
一般情况下,一条路径中可以多次包含一个节点,也就是说可以从节点经过一个点多次,同样也可以经过一条边多次。例如下面的例子:
距离:
我们将两个节点之间的最短的路径长度定义为两个节点的距离。如下图的例子所示:
在上图所示的例子中,B节点和D节点之间的最短路径为P{(B,C),(C,D)},也就是说B,D之间的距离为2。同时,由于A节点无法到达X节点,所以,我们将A节点和X节点的距离定义为∞。
通过上面的例子,我们不难发现,在无向图中,节点之间的距离是对称,也就是说BD之间的距离和DB之间的距离是相同的。但是在有向图中,距离不是对称的,原因在于,B节点可以到达D节点,但是D节点不一定能够到达B节点。如下图所示:
在上图所示中,B节点到达D节点的最短路径为2,但是D节点到达B的最短路径为∞。也就是说
h
B
,
D
≠
h
D
,
B
h_{B,D}≠h_{D,B}
hB,D=hD,B
1.3、网络直径(Network Diameter)
直径
一般情况下,我们将网络的直径或者说图的直径定义为在图中的所有的节点之间的最大距离。
平均路径长度:
对于一个连通图或者是强连通图而言,我们将其平均的路径长度定义为:
h
−
=
1
2
E
m
a
x
∑
i
,
j
≠
i
h
i
j
h^-=\frac{1}{2E_{max}}∑_{i,j≠i}h_{ij}
h−=2Emax1i,j=i∑hij
其中
h
i
j
h_{ij}
hij表示的是节点j和节点i之间的距离。
E
m
a
x
E_{max}
Emax表示的是整个图中所有的边的数量。其中有:
E
m
a
x
=
n
(
n
−
1
)
2
E_{max} = \frac{n(n-1)}{2}
Emax=2n(n−1)
1.4 聚类系数(针对无向图)
我们首先给出聚类系数的的定义:
C
i
=
2
e
i
k
i
(
k
i
−
1
)
C_i=\frac{2e_i}{k_i(k_i-1)}
Ci=ki(ki−1)2ei
其中
e
i
e_i
ei表示的是节点i的的各个邻居之间互相连接的边的个数,
k
i
k_i
ki表示节点i的度。有下面的例子来说明一下:
在上面的例子中,第一个图中节点i的度
k
i
=
4
k_i=4
ki=4,节点i各个邻居之间相连的边的个数为6,则计算聚类系数为:
C
i
=
2
∗
6
4
∗
3
=
0.5
C_i=\frac{2*6}{4*3}=0.5
Ci=4∗32∗6=0.5
同理,我们可以计算出来剩余两张图的聚类系数为:
C
i
=
2
∗
3
4
∗
3
=
0.5
,
C
i
=
2
∗
0
4
∗
3
=
0
C_i=\frac{2*3}{4*3}=0.5,C_i=\frac{2*0}{4*3}=0
Ci=4∗32∗3=0.5,Ci=4∗32∗0=0
平均聚类系数:
对各个节点的聚类系数求和之后求的其平均值就是整个图的聚类系数:
C
=
1
N
∑
i
N
C
i
C=\frac{1}{N}∑_i^NC_i
C=N1i∑NCi
1.5 连通性
一般情况下,我们考察的是一个图中最大的连通房子图。如下图所示:
在上图中,我们对连通性的考察就是考察(DABC)节点所构成的连通子图。那么进一步,我们应该如何确定一个图中的最大的连通子图呢?
这里我们采用的是图的广度优先遍历的算法来进行查找,首先,随机初始一个节点,开始广度遍历的过程,当没有节点可以遍历之后,记录当前遍历的图的大小。在从没有遍历到的节点开始,重复BFS的过程,最终确定最大的连通子图。
2、随机图算法
2.1 ER图算法
为了说明这个算法,我们首先给出两个变量,分别为:
- G n p G_{np} Gnp:基于n个节点的无向图,图中每一条边 ( u , v ) (u,v) (u,v)都是通过概率p独立同分布产生的。
- G n m G_{nm} Gnm:基于n个节点的无向图,随机挑选出m条边。
在ER生成算法中,通过n个节点和边的生成概率P来生成的无向图不是唯一的,如下图所示:
根据上图所示,我们可以根据n个节点和概率p来生成不同的边来生成一个随机的图。
2.2 ER图的相关属性
2.2.1 ER图的度分布
实际上,ER图
G
n
p
G_{np}
Gnp的度分布是一个二项分布的过程,我们令
P
(
k
)
P(k)
P(k)表示的是节点度为k的概率,则有:
这里,我们对上面的公式解释一下,如果一个节点的度为k,那么在图中,除了他自身之外就有N-1个节点中的k个节点需要和其相连接,那么就是第一个部分,对于该节点而言,产生一条边的概率为p,并且边的产生是独立同分布的,那么也就是说该点生成k条边的概率为
p
k
p^k
pk,剩余n-1-k个节点与该节点没有产生边,那么也就是说其概率为
(
1
−
p
)
n
−
1
−
k
(1-p)^{n-1-k}
(1−p)n−1−k。
在理解了上面的公式之后,根据二项式分布的特点,我们可以知道,其均值和方差为:
k
−
=
p
(
n
−
1
)
k^-=p(n-1)
k−=p(n−1)
δ
2
=
p
(
1
−
p
)
(
n
−
1
)
δ^2=p(1-p)(n-1)
δ2=p(1−p)(n−1)
而其标注差和均值的比值为:
δ
k
−
=
[
1
−
p
p
1
n
−
1
]
1
/
2
≈
1
(
n
−
1
)
1
2
\frac{δ}{k^-}=[\frac{1-p}{p}\frac{1}{n-1}]^{1/2}≈\frac{1}{(n-1)^{\frac{1}{2}}}
k−δ=[p1−pn−11]1/2≈(n−1)211
通过大数定律,我们可以发现,随着网络过敏的不断增大,度的分布原来越集中,换句话来说,就是图中的节点的概率分布越来越接近。我们用下面的图来展示一下:
2.2.2 ER图的聚类系数
首先,根据ER图中边的独立同分布的特性,我们能够计算聚类系数中参数的
e
i
e_i
ei的期望值为:
E
[
e
i
]
=
p
k
i
(
k
i
−
1
)
2
E[e_i]=p\frac{k_i(k_i-1)}{2}
E[ei]=p2ki(ki−1)
则聚类系数
C
i
C_i
Ci的期望值为:
E
[
C
i
]
=
p
∗
k
i
(
k
i
−
1
)
k
i
(
k
i
−
1
)
=
p
=
k
−
n
−
1
≈
k
−
n
E[C_i]=\frac{p*k_i(k_i-1)}{k_i(k_i-1)}=p=\frac{k^-}{n-1}≈\frac{k^-}{n}
E[Ci]=ki(ki−1)p∗ki(ki−1)=p=n−1k−≈nk−
根据上面的公式,我们可以获知到两个点,首先,在一个随机图中,聚类系数相对来讲是比较小的。其次,随着图规模的增加,聚类系数是不断下降的。
2.2.3 ER图的路径
首先,我们定义两个扩展系数:
- 扩展因子α
我们定义图G(V,E)中有一个扩展因子α,当任意一个属于节点集V的子集S,连接子集|S|的边和剩余节点子集 ∣ V / S ∣ |V/S| ∣V/S∣之间的边的数量有如下关系:
从 S 出 发 的 边 的 数 量 ≥ α ∗ m i n S ∈ V ( ∣ S ∣ , ∣ V / S ∣ ) 从S出发的边的数量 ≥ α*min_{S∈V}(|S|,|V/S|) 从S出发的边的数量≥α∗minS∈V(∣S∣,∣V/S∣)
我们用一个图来展示一下:
-
多个随机图结构
对一个原始的随机图,我们可以将其拆分成多个随机子图,拆分的过程满足我们上面定义的扩展因子的中的公式定义,如下图所示:我们将原始的n个节点的随机图可以拆分成三个子图,其中子图中的边的数量关系满足我们之前的数量定义。我们以左边的第一图中某一个节点开始,我们寻找其和其他子图中的节点之间的路径,我们不难发现,从某一个节点开始,这种查找的过程很类似于一个树结构。如下图所示:
根据树的特性,我们可以知道,两个节点之间的路径的长度是一种对数的长度,也就是说整个图中任意的两个节点之间的最大的路径长度为 O ( ( l o g ( n ) ) / α ) O((log(n))/α) O((log(n))/α)。
根据上面的规律,我们可以知道,尽管随机图中节点数量上涨的很快,但是节点的之间的最短距离的上涨速度通过对数规律,其上涨的速度是很慢的。其上涨的规律如下图所示:
2.2.4 ER图的连通子图
首先,我们先给出关于概率p增长和图的关系,如下图所示:
从上面的图中,我们可以确定一下几种情况,
- 当p的值为 1 ( n − 1 ) \frac{1}{(n-1)} (n−1)1的时候,会出现巨大的连通子图。
- 当p的值为 c ( n − 1 ) \frac{c}{(n-1)} (n−1)c的时候,会生成大量的孤立点。
- 当p的值为 l o g ( n ) ( n − 1 ) \frac{log(n)}{(n-1)} (n−1)log(n)的时候,孤立节点的数量会减少。
- 当p的值为 2 ∗ l o g ( n ) / ( n − 1 ) 2*log(n)/(n-1) 2∗log(n)/(n−1)的时候,孤立节点消失。
- 当p的值为1的时候,随机图是一个完全图。
接下来,我们来考虑度的问题,根据上面的计算,我们已经知道了p的均值为 p = k ( n − 1 ) p=\frac{k}{(n-1)} p=(n−1)k,则我们设定一个阈值ε,有如下的关系
k = 1 - ε,所有的子图的规模均在Ω(logn)。
k = 1 + ε,存在一个子图的规模为Ω(n),其余的子图为Ω(logn)。
我们用图来展示一下效果,有:
2.3 真实网络和ER随机图的关系总结
2.3.1 真实网络和ER随机图的关系
- 对于一个大的连通图而言,其分布和随机图相似。
- 对于平均的路径长度,真实网络和随机图相似。
- 聚类系数和度的分布和随机图有所不同。
2.3.2 ER随机图的局限性
- 随机图的度分布和真实网络的度分布不同。
- 真实网络的大的连通子图不是通过随机图的变形来实现的。
- 由于聚类系数过小,很难去确定一个局部结构。
- 真实网络并不是一个随机图,我们只能通过这种随机生成的方式去逼近模拟。
2.3.3 随机图的作用
- 作为一种比较标准,与真实网络进行比较。
- 使我们能够了解到,随机过程会影响到图中的某个属性。
2.4 小世界模型
2.4.1 模型引入
在ER图模型的介绍中,我们知道了ER随机图中的聚类系数是一个很小的值,并且会随着节点数量的增加而持续减小。那么我们有没有办法在能够确定最短路径的同时获得一个比较大的距离系数呢?
实际上,聚类系数反应的是边的局部特性,而ER图的聚类系数和真实网络的差距过大,我们举一个例子
通过上面的例子,我们不难发现,随机图计算出来的聚类系数和真实的聚类系数的数量级相差至少在 1 0 2 10^2 102以上。
2.4.2 小世界模型
为了在保证最短路径的同时提升聚类系数,提出来小世界模型。该模型可以分为两个部分。
- 低维度的规则格
在我们实际的情况中,我们可以将图中的环视为一个格。 - 重新连线,生成捷径。
添加或者删除一些边,依次来将一些“捷径”加入到距离较远的格部分。这种边生成的概率为p。
具体如下图所示:
下一步,我们来讨论一下概率p的大小对于图的直径和聚类系数的影响。首先,我们先给出图示:
通过上面的图示,我们不难发现,随着概率p的增大,聚类系数不断的减小,图的直径也在不断的减小,相比之下,我们为了综合两种情况,需要确定一个合适的概率p。
2.4.3 小世界模型总结
- 通过小世界模型,只要确定合适的概率p,我们就可以获得一个比较小的图的直径,同时获得比较大的聚类系数。也就是在聚类系数和直径之间做出来一个平衡。
- 更容易去捕捉局部特征。
- 由于更高的聚类系数,所以更好的去模拟了真实的网络。
2.5 克罗内克(Kroneker) 图模型
2.5.1 基本结构
首先,我们从一个基本问题开始,我们应该如何将一个网络结构抽象一个一个递归的结构呢?
我们首先从一个子图开始,我们认为一个大的图是通过一个子图不断的自我复制而生成的,这种自我复制就是一种递归的过程,如下图所示:
而,克罗内克图算法的思想就是构造出这种自我复制的邻接矩阵。如下图所示:
从上图中,我们可以发现,大图的生成是从一个小的子图开始的,首先是一个3个节点的字符,其邻接矩阵用k1来表示,进一步实现一个自我复制的过程生成一个9个节点的矩阵,自我复制的过程很简单,根据初始的邻接矩阵,对于邻接矩阵中位置为1的元素,直接扩充成这个子图。不断的递归就可以生成81个节点的大图,81*81个节点的大图等等。
2.5.2 Kronecker 乘积
Kronecker 乘积可以定义为两个子图的邻接矩阵的乘积,如下图所示:
综上所述,一个Kronecker 图的生成过程就是通过一个图的序列按照Kronecker 乘积的方式从初始邻接矩阵K1来生成的。 如下图所示:
注意,对于初始的邻接矩阵K1,这并不是唯一的,我们也可以采用
K
1
,
K
1
"
K1,K1^"
K1,K1"等等作为初始的邻接矩阵。通过不同的初始邻接矩阵,最终生成的大的邻接矩阵也是有所区别的,如下图所示:
2.6 随机的Kronecker图
2.6.1 基本流程
创建一个 N 1 ∗ N 1 N_1 * N_1 N1∗N1的概率矩阵 θ 1 θ_1 θ1,假设k次迭代之后生的概率矩阵为 θ k θ_k θk,对于概率矩阵 θ k θ_k θk中的第u行v列的条目而言,其所表示的是u,v之间存在边的概率 p u v p_{uv} puv。如下图所示:
在生成概率矩阵
θ
2
θ_2
θ2之后,下一步是一种带有偏向性的01过程,也就是说概率值越大,其就更容易在最后的结果中接近于1。
2.6.2 Kronecker随机图的生成过程
通过上面的描述,我们知道了Kronecker是如何生成一个最终的随机图的,但是,我们在来回顾一下上面的过程,如果最终生成的是一个NN 的概率矩阵,我们就需要进行NN次的这种带有偏向性的结果判断来确定最终的结果是否为1。在这里面,最大的问题就是速度太慢了,为了提升速度,我们开始进一步的处理。这种处理的思想是利用Kronecker图的递归过程。
我们首先给出算法描述:(针对有向图),目标是在一个 n = 2 m n=2^m n=2m的节点数量上的有向图中插入一条边。
- 创建一个归一化的矩阵 L u v = θ u v / ( ∑ 矩 阵 内 的 所 有 元 素 ) L_{uv}=θ_{uv}/(∑矩阵内的所有元素) Luv=θuv/(∑矩阵内的所有元素)。
- 开始迭代,for i = 1,…,m
2.1. 初始两个变量X=0,Y=0。
2.2. 从矩阵 L u v L_{uv} Luv中随机挑选一个元素,(u,v),第u行第v列。
2.3 在u,v所在的象限内计算一个求和值 X + = u ∗ 2 m − i , y + = v ∗ 2 m − i X+=u*2^{m-i},y+=v*2^{m-i} X+=u∗2m−i,y+=v∗2m−i。 - 最后在最终的图G的中添加边(X,Y)
我们用图来展示上面描述的过程:
3、参考
- 斯坦福 CS244W