文章目录
CS224W: Machine Learning with Graphs
公式输入请参考: 在线Latex公式
这节主要从以下三个方面
Node-level prediction
Link-level prediction
Graph-level prediction
以无向图为例,讲解传统的特征工程咋整。
Node-level Tasks and Features
Characterize the structure and position of a node in the network: 有四种
Node degree
用节点度作为特征只计算了相连节点的个数,缺点是没有办法描述节点在图中的重要性。
Node centrality
点度中心性Degree centrality:当前节点的度/(总节点数量-1)
通俗理解就是:重要的节点往往拥有较多连接的节点。你的朋友越多,你的影响力就越强。
特征向量中心性Engienvector centrality:一个节点的邻居节点越重要,那么该节点就越重要。
思想是,我的朋友很重要,那么我就很重要。
那朋友的重要性呢?这就是一个递归计算的问题了。
https://zhuanlan.zhihu.com/p/31198752
这里给了例子,如果是非特征向量与邻接矩阵相乘,就会改变图的点度中心性,只有特征向量不会改变点度中心性,因此求解过程就是求邻接矩阵的特征向量c和特征值
λ
\lambda
λ。公式不写了,里面的求和项可以转化为邻接矩阵的乘法这里要花心思理解。
中介中心性Betweenness centrality:如果一个节点处于其他节点的多条最短路径上,那么该节点的中心性就高。计算方式:
经
过
当
前
节
点
的
最
短
路
径
数
量
除
了
当
前
节
点
之
外
,
所
有
节
点
对
之
间
的
最
短
路
径
数
量
\cfrac{经过当前节点的最短路径数量}{除了当前节点之外,所有节点对之间的最短路径数量}
除了当前节点之外,所有节点对之间的最短路径数量经过当前节点的最短路径数量
在社交网络中,该节点往往是中间人的关系,学名是:被禁止的三元组(forbidden triad)的关系
图的边缘节点的中介中心性为0
接近中心性Closeness centrality:如果一个节点跟其他所有节点的距离越近,该节点的中心性就高。计算方式:
1
当
前
节
点
到
其
他
所
有
节
点
跳
数
(
路
径
长
度
)
之
和
\cfrac{1}{当前节点到其他所有节点跳数(路径长度)之和}
当前节点到其他所有节点跳数(路径长度)之和1
Clustering coefficient
描述一个图中的节点之间结集成团的程度的系数。例如:社交网络中,我的朋友之间相互认识的程度。
单个节点计算方法:
当
前
节
点
的
邻
居
节
点
之
间
的
边
的
数
量
当
前
节
点
的
邻
居
节
点
之
间
的
边
的
最
大
可
能
数
量
\cfrac{当前节点的邻居节点之间的边的数量}{当前节点的邻居节点之间的边的最大可能数量}
当前节点的邻居节点之间的边的最大可能数量当前节点的邻居节点之间的边的数量
分母实际上是套公式:
n
(
n
−
1
)
2
\cfrac{n(n-1)}{2}
2n(n−1)
然后求所有节点的平均,得到最后结果。
用例子来说,对于中间的图,v有4个朋友,4个朋友两两组合应该有6个朋友对,但是实际上只有3个朋友对,因此,其聚集系数是3/6=0.5
也就是可以数三角形来算。
Graphlets
Graphlets: Rooted connected non-isomorphic subgraphs.
graphlets 是一系列连通的非同构子图
ppt中给出不同节点数量的非同构子图,看一小部分即可:
3个节点的时候,
G
1
G_1
G1 1号和2号节点为根是不同的图,是不同构的。
那么对于下图:
可以包含v的子图有三种,且列出不同构的形态Graph Degree Vector (GDV),就是能够包含节点v匹配的到的graphlets的个数:
得到Graphlet instances:
GDV可以用来判定两个结点的局部网络拓扑结构是否类似。
小结
给出了分类
Importance-based features:
§ Node degree
§ Different node centrality measures
可以用于社交网络中的重要人物识别
Structure-based features:
§ Node degree
§ Clustering coefficient
§ Graphlet count vector
可以用于类似固定结构的蛋白质网络预测任务
Link Prediction Task and Feature
把边预测看做任务,一般有两种形式:
- Links missing at random: Remove a random set of links and then aim to predict them(静态网络如蛋白质网络)
- Links over time: 预测未来时间步的边的连接情况。(交易网络、社交网络)
训练方法是对节点对之间进行建边评分,然后对评分排序取top n进行建边,并与标签比对。
边特征有三种:
Distance-based feature
用节点间的最短路径作为特征。
但是这个方法对于领域的特征表示并不明显,例如上图中BH和DF的长度一样,但是BH之间有两条路径而DF只有一条。
Local neighborhood overlap
用两个节点之间的共同邻居数量作为特征。
∣
N
(
v
1
)
∩
N
(
v
2
)
∣
|N(v_1)\cap N(v_2)|
∣N(v1)∩N(v2)∣
归一化的表达,Jaccard’s coefficient:
∣
N
(
v
1
)
∩
N
(
v
2
)
∣
∣
N
(
v
1
)
∪
N
(
v
2
)
∣
\cfrac{|N(v_1)\cap N(v_2)|}{|N(v_1)\cup N(v_2)|}
∣N(v1)∪N(v2)∣∣N(v1)∩N(v2)∣
这样减少了邻居多少的影响。
进一步对社交网络而言,还进一步衡量了共同邻居的重要度,Adamic-Adar index::
∑
u
∈
N
(
v
1
)
∩
N
(
v
2
)
1
log
(
k
u
)
\sum_{u\in N(v_1)\cap N(v_2)}\cfrac{1}{\log (k_u)}
u∈N(v1)∩N(v2)∑log(ku)1
这个衡量方式有缺点:当两个点之间没有共同邻居(
∣
N
(
v
1
)
∩
N
(
v
2
)
∣
=
ϕ
|N(v_1)\cap N(v_2)|=\phi
∣N(v1)∩N(v2)∣=ϕ)则该特征为0,但是实际上二者未来还是可能有边的。例如上图中的节点A和E,二者从图中看是有间接关系,但是Local neighborhood overlap没法表示这种关系。
Global neighborhood overlap
解决上面的问题。
邻接矩阵的l次方
count the number of paths of all lengths between a given pair of nodes.
计算上面的number的方法就求邻接矩阵的乘方。
例如:计算距离为1的节点,,因为邻接矩阵本身就是表示相邻节点的,所以表示为:
A
(
1
)
A^{(1)}
A(1);
计算距离为2的节点:
A
(
2
)
A^{(2)}
A(2)简单理解就是:u到v长度为2的路径数量,先找u到i(长度为1),再找i到v(长度为1),累加,看上去貌似很复杂,其实就是写成邻接矩阵相乘:
∑
i
A
u
i
×
A
i
v
=
A
u
v
2
\sum_i A_{ui}\times A_{iv}=A^2_{uv}
i∑Aui×Aiv=Auv2
例子:
上面表明节点1到2有长度为2的路径:1→4→2
那么通过归纳法:邻接矩阵的
l
l
l次方
A
u
v
l
A^l_{uv}
Auvl可以表示两节点间路径长度为
l
l
l的数量
Katz index
两个节点
v
1
,
v
2
v_1,v_2
v1,v2之间的Katz index可以表示为:
S
v
1
v
2
=
∑
l
=
1
∞
β
l
A
v
1
v
2
l
S_{v_1v_2}=\sum_{l=1}^\infty\beta^lA_{v_1v_2}^l
Sv1v2=l=1∑∞βlAv1v2l
这里
0
<
β
<
1
0<\beta<1
0<β<1是长短路径不同的权重(这里长路径的权重要低一些)
Katz index可以写成(矩阵级数的计算):
S
v
1
v
2
=
∑
i
=
1
∞
β
i
A
i
=
(
I
−
β
A
)
−
1
−
I
S_{v_1v_2}=\sum_{i=1}^\infty\beta^iA^i=(I-\beta A)^{-1}-I
Sv1v2=i=1∑∞βiAi=(I−βA)−1−I
证明看这里:https://zhuanlan.zhihu.com/p/164376361
Graph-Level Features and Graph Kernels
Kernel methods are widely-used for traditional ML for graph-level prediction.
介绍看这里:https://www.zhihu.com/question/57269332/answer/157375170
这里介绍两种kernel
Shervashidze, Nino, et al. “Efficient graphlet kernels for large graph comparison.” Artificial Intelligence and Statistics. 2009.
Shervashidze, Nino, et al. “Weisfeiler-lehman graph kernels.” Journal of Machine Learning Research 12.9 (2011).
Graph Kernel的数学表达:
K
(
G
,
G
′
)
=
ϕ
(
G
)
T
ϕ
(
G
′
)
K(G,G')=\phi(G)^T\phi(G')
K(G,G′)=ϕ(G)Tϕ(G′)
还有别的形式的kernel,这里举了一个BoW:Bag-of-Words的例子。根据词袋模型的思想把节点看成单词,那么图就可以得到相应的表示,但是词袋模型有忽略顺序的缺点,因此:
明显只用节点出现的频率来表征有不足,因此还举了Bag of node degrees的例子:
下面介绍的两种kernel也用了Bag of something的思想,只不过这里的something要比上面提到的节点,或者节点度要更加复杂。
Graphlet kernel
Key idea: Count the number of different graphlets in a graph.
Graphlet 在上节有讲过,图的Graphlet 和节点级别的Graphlet 有2点不一样
1.Nodes in graphlets here do not need to be connected (allows for isolated nodes)
2.The graphlets here are not rooted.
看例子:
对于3个节点(
k
=
3
k=3
k=3),可以组成的4种graphlets:
4个节点(
k
=
4
k=4
k=4),可以组成的11种graphlets:
那么给定一个图G:
求其
k
=
3
k=3
k=3的graphlets的数量个数组成向量表示:
写成:
f
G
=
(
1
,
2
,
6
,
0
)
T
f_G=(1,2,6,0)^T
fG=(1,2,6,0)T
Graphlet Kernel的数学表达:
K
(
G
,
G
′
)
=
f
G
T
f
G
′
K(G,G')=f_G^Tf_{G'}
K(G,G′)=fGTfG′
这里如果两个图大小相差较大,那么得到的相似度也会差很大,大图包含的Graphlet数量肯定会比较多。
改进加上归一化后:
h
G
=
f
G
S
u
m
(
f
G
)
K
(
G
,
G
′
)
=
h
G
T
h
G
′
h_G=\cfrac{f_G}{Sum(f_G)}\\ \\ K(G,G')=h_G^Th_{G'}
hG=Sum(fG)fGK(G,G′)=hGThG′
缺点:Graphlet计算复杂度较高,在n个节点的图中计算
k
k
k个节点大小的Graphlet,时间复杂度高达:
n
k
n^k
nk(属于NP-hard问题)
如果图的节点度小于
d
d
d,那么计算
k
k
k个节点大小的Graphlett,时间复杂度为:
O
(
n
d
k
−
1
)
O(nd^{k-1})
O(ndk−1)
下面介绍另外一种时间复杂度稍微低一点的方法。
WL kernel
Idea: use neighborhood structure to iteratively enrich node vocabulary.
实际上就是将Bag of node degrees(只包含一跳信息)扩展到多跳信息。涉及算法:Color refinement,算法步骤:
1.为所有节点设置一个初始颜色
c
(
0
)
(
v
)
c^{(0)}(v)
c(0)(v)
2.使用如下公式迭代更新节点的颜色:
c
(
k
+
1
)
=
HASH
(
{
{
c
(
k
)
(
v
)
,
{
{
c
(
k
)
(
u
)
}
u
∈
N
(
v
)
}
)
c^{(k+1)}=\text{\pink{HASH}}\left(\left\{\{c^{(k)}(v),\{\{c^{(k)}(u)\}_{u\in N(v)}\right\}\right)
c(k+1)=HASH({{c(k)(v),{{c(k)(u)}u∈N(v)})
3.经过K次迭代后,
c
(
K
)
(
v
)
c^{(K)}(v)
c(K)(v)得到了K跳邻居节点的信息,这里有点GNN的aggregate的意思了.
例子:
颜色hash函数如下:
两个要比较的图,初始化节点的颜色值为1
使用sum的方式来汇聚邻居信息(k=1):
对照颜色的hash函数得到:
再次使用sum的方式来汇聚邻居信息(k=2):
对照颜色的hash函数得到:
至此,color refinement算法介绍,接下来使用kernel得到各个图的表征,就是计算每个颜色对应的个数:
最后求两个图的相似度,可以直接转置后求乘法得50.
这个算法的好处是,算法是线性的,计算时间复杂度和边成正比关系。整个算法的思想相当于bag of color。