结论速递
本章涉及了图基本表示及传统的特征工程。
图由节点和连接组成,节点和连接上都可以有不同的属性。根据属性的特点,分为几类不同的图,其中异质图和二分图是比较重要的特殊图。
图可以用邻接矩阵进行结构化表示,如果图过于稀疏,也可以使用连接列表和邻接列表来表示。图的节点度、图的连接性是图非常重要的性质,他们都可以从邻接矩阵中直观计算得到。
图的传统特征工程分为节点的、边的、还有全图的特征工程。度、连接和graphlet是贯穿始终的重要概念。
前情提要
- 图机器学习导论
目录
- 结论速递
- 前情提要
- 1 图的基本表示
- 1.1 图的本体设计
- 1.2 图的种类
- 1.3 图的性质
- 1.3.1 节点连接数
- 1.3.2 图的基本表示
- 1.3.3 图的连通性
- 1.4 思考题
- 2 图特征工程(传统方法,针对无向图)
- 2.1 节点的特征
- 2.1.1 特征种类
- 2.1.2 用途
- 2.1.3 思考题
- 2.2 连接的特征
- 2.3 全图的特征
- 参考阅读
1 图的基本表示
图由节点和连接组成。
1.1 图的本体设计
图的本体Ontology设计:设计好节点、连接的种类,包含的信息、可能存在的取值。
- 本体的设计应该在导入数据之前完成,导入数据后具体的图是这个抽象本体
- 设计图的本体应该根据将来想要用这张图解决的问题类型来进行。
1.2 图的种类
根据边的方向可以分为:
- 无向图(箭头无向)
- 有向图
一些结构比较复杂,但常见的图包括:
- 异质图heterogeneous graph:节点、连接存在不同的类型
- 二分图bipartite graph:两种节点,同类节点内部无连接
-
可以将二分图展开Folded network:对一类节点,把与同一个另外一类节点有关系的节点相连,变成两张只有同类节点的图
-
此外如果根据边是否有权重,还可以分为无权图和有权图;如果无向图中节点存在自己连向自己的边,则为self-loop,两个节点间存在多条边,则为multigraph。
1.3 图的性质
1.3.1 节点连接数
- 度(Degree):有多少个节点与该节点相连
- 无向图:与该节点相连的边数
- 有向图:分为进和出(进一步可以区分源与汇)
- 节点平均度:图中所有节点的平均连接数是多少。
- 无向图: k = E 2 N k = \frac{E}{2N} k=2NE
- 有向图: k = E N k = \frac{E}{N} k=NE
上述两个概念对有向图和无向图有不同的计算方式。
1.3.2 图的基本表示
将图变成结构化的矩阵形式,充分利用矩阵运算的能力。
- 邻接矩阵:可以用邻接矩阵来表示一个图,无向图的邻接矩阵为对称矩阵,有向图则为非对称。
由于图的节点非常多,但存在的连接或许并不多,则整个矩阵将非常稀疏,此时可以考虑使用连接列表,邻接列表来稀疏化表示。
-
连接列表:记录有连接的节点对。具体实现为python中一系列的tuple(三元组)。
-
邻接列表:记录对每一个节点来说,指向的下一个节点。具体实现为python中的一系列的dict。
可以补上代码实战
1.3.3 图的连通性
对无向图,如果
-
连通图connected graph:任意两个节点间都有一条路径可以连通。
-
非连通图disconnected graph:由多个连通域(连通的子图)构成,但不满足连通图的要求,其中连通域称为connected component,最大连通域giant component,离群点isolated node。
非连通图在邻接矩阵中,可以整理为分块对角的形式,如果打破了这一形式,就会成为连通图。
在有向图中有相似的概念:
- 强连通图strongly connected graph:方向严格联通
- 弱连通图weakly connected graph:忽略方向时联通
同样也有强连通域等。
1.4 思考题
- 举几个Heherogeneous Graph(异质图)的例子
人发表论文的发表网络,人和论文属于不同性质的节点。 - 异质图和普通图有什么区别?
异质图上节点的性质不同,普通图节点的性质往往是一致的。 - 举几个Bipartite Graph(二分图)的例子
人发表论文的发表网络。 - 举几个有向图的例子
食物链;电视剧中的人物关系(人物间存在单向关系比如:仇恨、暗恋等)。 - 如何设计本体图Ontology?
先抽象自己要研究的问题,确定哪些作为节点、哪些作为边,设计需要哪些属性。 - 为什么要把图表示成矩阵?
方便计算机处理。近些年来计算机矩阵运算的算力和计算速度飞速发展,将图表示为矩阵可以有效利用计算机的运算能力。 - 如何从连通域的角度,理解“六度空间”理论:世界上任意两个人,可以通过不超过六个中间人,相互认识。
世界上所有的人都在同一个连通域内,任意两人的连通最短路径将经过中间节点的数量不超过六个。 - 为什么很多真实场景的图都是稀疏的?
真实场景中节点和节点间连接的关系并不会很密集,图的平均节点度也并不会很高。
2 图特征工程(传统方法,针对无向图)
传统方法包括:人工特征工程、机器学习。
为什么需要特征工程?
因为节点层面、连接层面、子图/全图层面都需要提取特征成为向量/矩阵才能给计算机处理。
邻接矩阵不够吗?
不够。因为节点、边都可以有一系列的attributes,如权重、类型、排名、甚至是多模态的特征等,这些称之为属性特征。此外,还有在图中,节点和边、节点与节点之间的连接关系,这些称之为连接特征。邻接矩阵过于离散,需要特征描述来补充信息。
此处特征工程主要涉及连接特征。合理的特征工程将帮助传统机器学习方法发挥更好的效果。
2.1 节点的特征
2.1.1 特征种类
即描述:节点在图中扮演什么角色。
机器学习任务:输入某个节点的D维向量,输出该节点是某类的概率。
可以构造如下特征:
-
节点度:只看数量、不看质量。邻接矩阵按行/列加起来就可以
-
节点重要程度node centrality
-
eigenvector centrality:特征向量节点重要度,节点在图中越中心,则节点越重要。(PageRank和这个有点接近,有什么区别?)
相邻节点的重要度求和, c v = 1 λ ∑ u ∈ N ( v ) c u c_v = \frac{1}{\lambda} \sum_{u \in N(v)}{c_u} cv=λ1∑u∈N(v)cu
这是一个递归求和问题。
可以等价成,求邻接矩阵A的特征向量c, λ c = A c \lambda c =A c λc=Ac.
-
betweenness centrality:节点是否在必经之地,是否为交通枢纽
对某一个节点,图中不含它的节点对连通最短路径经过它的比例
c v = ∑ s ! = v ! = t 连通节点对最短路径经过 v 的数量 节点对数 c_v = \sum_{s != v != t} \frac{连通节点对最短路径经过v的数量}{节点对数} cv=∑s!=v!=t节点对数连通节点对最短路径经过v的数量
-
closeness centrality:某个节点是不是去哪儿都近
某一节点到其它节点的最短路径之和的倒数。
c v = 1 ∑ u ! = v 节点 v 到其它节点 v 的最短路径 c_v = \frac{1}{\sum_{u != v}节点v到其它节点v的最短路径} cv=∑u!=v节点v到其它节点v的最短路径1
-
-
集群系数clustering coefficient:衡量一个节点周围有多抱团
某一节点的邻接节点两两也相连的比例。
e v = 邻接节点两两相连数(三角形个数) C k v 2 e_v = \frac{邻接节点两两相连数(三角形个数)}{C_{k_v}^2} ev=Ckv2邻接节点两两相连数(三角形个数)
-
graphlets:统计预定义子图形状(连接形式)
ego-network自我中心网络(三角形作为子图),周围子图可能构成的形状称为graphlet(有点像同分异构体可能的构成,只不过只考虑C不考虑H)。
-
Graphlet Degree Vector(GDV):对某一个节点,提取其周围不同graphlet角色(预先定义好)的节点个数
上述案例,统计附近5个节点,graphlet种类是upto3(也包括2)
graphlet的模式是定义好的,相当于构造对应graphlet形式的直方图。
GDV是一种非常全面的对连接信息的描述。
在networkX里称为Atlas。
-
2.1.2 用途
如果要分析节点的重要程度:
- node degree
- node centrality
除此之外还有,PageRank, Katz Centrality,HITS Hubs and Authorities
如果要分析节点周围局部邻域的拓扑连接结构:
- node degree
- clustering coefficient
- graphlet count vector
2.1.3 思考题
standfor官方的思考题,描述了当前节点特征的局限性,即无法对图分片进行特征描述,后面的特征提取方法会继续涉及到这一部分。
2.2 连接的特征
即,提取连接的特征,把link变成D维向量,表征连接结构信息。
机器学习任务:通过已知的连接去补全未知的连接。
- 可能是同一时刻的有连接缺失补全,如蛋白质、分子
- 可能是预测下一个时刻会产生的新连接,如论文引用网络
如:你可能认识的人
工作流大致如下:提取连接特征为D维向量,送入到机器学习模型中去做预测,得到一个分数,从而来判断连接是否存在。
连接的特征分为三类:
-
基于两节点距离distance-based feature:
- 最短路径长度shortest-path distance between two nodes
缺点:忽略了路径经过edge的数量和通路的结构
- 最短路径长度shortest-path distance between two nodes
-
基于两节点局部连接信息local neighborhood overlap:
缺点:无法衡量两个没有共同邻域节点之间的关系- 共同好友个数common neighbors
- 交并比Jaccard’s coefficient:周围邻域节点集的交集比上并集
- Adamic-Adar index:A和B的共同邻域节点的连接数的倒数(共同好友是不是社牛),数值越大那么说明联系紧密(共同好友是个社恐,他们可能比较亲密)
-
基于两节点在全图的连接信息global neighborhood overlap:
-
Katz index:节点u和v之间,长度为k的路径个数
用邻接矩阵的power(幂)来计算:n次幂即为n-1个中间节点。
节点u和节点v之间长度为k的路径个数就是第u行第v列的元素。
如果需要编程,则按照下面的思路来计算会更便捷。
-
2.3 全图的特征
提取一个d维向量,反映全图特征。
核心思路依然是数数,数某一类的子图出现了多少次(Bag of Word,这个思路来源于自然语言处理)。
-
Bag of node degrees,只看节点连接数,不看节点,也不看连接结构。如下图,即采集子图不同节点度个数的节点。
-
Bag of graphlet & Graphlet Kernel:相较于node degree而言,允许孤立节点的统计,同时是全图的统计,而非子图的统计。
把两张图得到的特征向量做数量积,可以得到一个标量,这个标量可以评价两个图是否足够相近,是否匹配。(Graphlet Kernel)
如果两张图不一样大,那就做一个归一化。
这个方法的缺点是:做子图匹配是一个非常消耗时间及算力的(是NP-Hard问题),所以不常用。 -
Weisfeiler-Lehman Kernel:颜色微调的方法,不断迭代丰富节点词库。
就是Graph embedding,先不断地将邻接节点的信息聚合到一个节点上,然后做一个哈希。再升阶,进一步聚合节点信息,做哈希。不断重复这一过程(重复k次)。
则当连接结构一致时,哈希值相同。
两张图进行同阶的处理,则可以得到两个向量进行数量积(Kernel),并进行比较这一方法是线性的复杂度。
可以用gklearn中的函数来完成计算。
这个和消息传递图神经网络中的消息传递范式真的很接近!
参考阅读
- cs224w同济子豪兄Github
- 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】_哔哩哔哩_bilibili