CS224W摘要02.Traditional Methods for Machine Learning in Graphs


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(n1)
然后求所有节点的平均,得到最后结果。
用例子来说,对于中间的图,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

把边预测看做任务,一般有两种形式:

  1. Links missing at random: Remove a random set of links and then aim to predict them(静态网络如蛋白质网络)
  2. 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)} uN(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} iAui×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)1I
证明看这里: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(ndk1)
下面介绍另外一种时间复杂度稍微低一点的方法。

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)}uN(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。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值