赞
踩
参考资料:
开源内容:https://github.com/TommyZihao/zihao_course/tree/main/CS224W
B 站视频:https://space.bilibili.com/1900783/channel/collectiondetail?sid=915098
大佬笔记:lyc686 (lyc learning ...) · GitHub
由于计算机看不懂图,只能看懂向量和矩阵等等
因此,我们需要把节点的特征写为向量(把节点作为d维向量 );连接的特征写为向量;子图和全图的特征写为向量。将向量输入到机器学习特征中,就可以进行学习。
我们今天只讲连接特征
比如我们使用四维向量花瓣长度,花瓣形状等等四种特征,去判断燕尾花的种类。我们能不能构造一个新的特征?这些特征能够让算法能够更好的区分。更容易去预测。这就称之为特征工程。
例如,解决一个异或问题。
观察x轴,y轴都不能解决问题,但是可以找到一个新的特征,x×y就可以直接得到它的种类。数据和样本都是原来的,但是加了一个特征就可以大大方便算法进行了预测。这就是特征工程的重要性。
选对特征很重要,你的数据集和特征特别好,哪怕你的模型不好,也能够跑出不错的数据。
我们今天讲如何对节点,对连接,对全图 人工去构造特征。尽管构造出的特征有的好,有的不好,只需要交给算法去处理。算法会将好的特征给予更高的权重,不好的特征给予更低的权重。是不用我们担心操控的。我们的任务仅仅是构造出这些特征。这个过程就称为特征工程。
在一些大的竞赛中,经常能看到选手大多不是集中在神经网络调参,或是选一个比较好的算法,而是在根据实际的领域,根据人类的专家知识构造特征,构造一些尽可能有用的特征。
为了便于理解今天的课程,都是在无向图的基础上进行的。
输入某个节点的d维特征,输出该节点是某类的概率。最关键的就是要将这个d维特征构造好。
以节点分类为例。以银行信用卡欺诈为例,我们已知这张图红色的是欺诈,绿色的是没有发生欺诈,还有一些未知的。经过半监督节点分类,我们就可以得到一个预测。
一些可以考虑的角度:
如上图所示,如果只看节点连接数,那么下图中A、G节点的特征是相同的,但是两个节点所处的圈子的质量是完全不同的(一个是院士的关门弟子、另一个是一个人旗下的博士)
(无向图中)获取节点的连接数,既可以通过数邻接矩阵中对应节点的一行或者一列,也可以使用如下图所示的方式乘以一个全为1的列向量(相当于每一行求和),计算出每一个节点的连接数。
度中心性:**最终得到的这个每个节点的连接数的值就可以作为D维向量的第一维。**比如节点3的开年结束计算出来就是3,第一维就是3。
由于节点往往还要考虑节点的质量,所以我们除了考虑节点连接数还要考虑节点的重要度
同时考虑节点的重要度(质量),有如下方法
Eigenvector centrality
(特征向量重要度)
Eigenvector centrality
和PageRank
的区别与联系Betweenness centrality
(中介中心性)
Closeness centrality
(连接中心性)
Clustering Coefficient
聚集系数就是节点有多抱团(和相邻节点是否有边相连),简单来说就是看图中的三角形个数
计算案例如下图所示:
此对数非log,而是连接对数量
其中有一种自我中心网络ego-network
就是数三角形的个数,而这种三角形其实就是我们人为定义的一种子图,当然我们也可以定义其他形状来作为子图,也就是Gtaphlets
Gtaphlets
构造子图就是如下图所示:
什么是节点角色呢?节点角色的定义是在网络中具有相似位置的点的集合,类似于化学中的同分异构体,进一步说这个定义和 community 其实是互补的,比如各个公司可能是不同的 community,而每个公司内部的角色大致是相同的(管理层和下属员工)。公司(community)内个体间会有比较密切的联系,但公司间相同职位(角色)的个体并不一定会有关联。
此时,我们提取某一个节点周围的graphlets子图个数,就可以构建一个向量,称为Graphlet Degree Vector(GDV)
,如下图所示:
计算u节点的GDV
因为5个节点的子图能够有73种节点角色,所以就是一个73维的向量,可以很全面的表示图中的拓扑连接结构,通过比较两个节点的GDV我们就可以计算两个节点的距离和相似度
补充:在NetworkX中子图称为Atlas
小结一下:
节点的重要度信息可以看:
节点的结构信息可以看:
除此之外还有:
使用本小节的知识我们能够区分如下图左边形式的图中的节点(哪些是边缘,哪些是中心),但是无法区分右边所示的社群的概念(抱团),这部分区分需要后续的图神经网络的方法来完成。
Link-Prediction
:通过已知连接补全未知连接,生成连接层面的D维向量有如下两种思路:
更鼓励使用第一种方式,因为第二种方式会丢失link本身的连接结构信息,而第一种方式直接提取link的特征之后我们就可以直接输入到下游的任务中去进行预测,看看两个节点之间是否有哪些类别呢。
Link-Prediction的任务可以分为两种:
(1)连接层面的工作
总结上面提到的连接层面的工作不论是静态的还是动态的,都是如下几个步骤:
(2)连接特征分类
连接层面的特征可以分为:基于两节点间距离、基于两节点局部连接信息、基于两节点在全图的连接信息
基于两节点的最短路径长度
如下图所示:
基于两节点局部连接信息
如下图所示:
基于两节点在全图的连接信息
Katz index
卡兹系数:表示节点u和节点v之间长度为k的路径个数
如下图所示表示了k=1和k=2的计算结果:
节点u和节点v之间长度为k的路径个数就是Auvk矩阵的第u行第v列元素
将全图提取的特征表示为一个D维的特征向量,并且这个特征向量可以反映全图的结构特点
(1)Bag-of-*
对于全图提取特征其本质仍然是:数数(数不同特征在图中存在的个数)。类比在自然语言处理NLP中的一种思想Bag-of-Words(BoW)
,将一个文章的内容全都列出来,然后去数里面每一个词/字出现的次数,这样我们就可以把一篇文章表示为一个D维的向量,其中每一维都是每一个词的次数,这样就可以把向量输入给计算机进行处理。
同理,对于图,我们可以把图看作文章把节点看作单词,只看每个节点有没有出现而不考虑连接结构,使得两个完全不同的图最终的编码结果是一样的,这是不可行的。
一种改进想法:使用Bag-of-Node degrees
,只看节点的连接数不看连接结构,最终效果是确实可以区分之前的两个结构不同的图,如下图所示
同理我们也可以把这种Bag-of-*
的思想推广到其他的特征中去
(2)Graphlat
如下图所示,对于3个节点组成的graphlat从全图角度分析有四种(即,节点之间可以没有连接),对于4个节点组成的graphlat就有11种。我们就可以将全图的graphlat总结出来作为D维特征。
如下图所示,假设全图中共有nk个graphlat那么,最终就会构造出nk维的特征向量,其中第i个表示的就是第i个graphlat在全图中的个数
如果把两张图的graphlat的特征向量
做数量积,就可以的得到两张图的kernel
,这个kernel
是一个标量,可以反映出两张图是否相近,是否匹配。如果两张图的graphlet尺寸不匹配,需要一个归一化操作使其大小变成相同量级,避免计算结果产生歪曲。
不经常使用这种Graphlat构造子图方式的原因主要是,这种方式比较消耗硬件(从原图中枚举寻找子图),是一个nk多项式量级的复杂度,k越大,复杂度越高,也就是一个N-P难问题
(3)Weisfeiler-Lehman Kernel
是一种性能上更加优化的kernel,使用颜色微调的方法迭代地丰富“节点词库”
案例如下:
不断重复上述过程,发现之前的颜色又开始发生变化,观察发现G1中最下面两个节点由于结构完全一致,所以颜色一直相同,但是G2最下面的两个节点由于结构不一致所以颜色不再是第一次哈希之后的相同值。
到这里我们经过两次哈希得到了13种颜色,也就是两张图均用13维的向量表示。我们就可以开始计算kernel
求两张图的内积。
13维向量:针对每一种颜色计算对应的节点个数,有一些向量的元素为0,但是既然他有这种颜色,说明在另一张图中出现,即另一张图中他至少为1。
内积结果为:6x6+2x2+1x1+2x2+1x1+0x1+2x1+1x0+0x1+0x1+0x1+2x0+1x1 = 49,这个49就是这两张图的Weisfeiler-Lehman Kernel
用算法表示就是如下图所示:
这种方式的计算是和节点、连接呈线性关系,所以计算起来是非常方便的。而且Weisfeiler-Lehman Kernel
与图神经网络GNN
是非常类似的。
(4)Kernel Methods
Kernel Methods核方法经常用在图机器学习中,因为经常需要用两个图来作比较(两张大图、一张大图和子图等等)。
kernel值是一个标量,这时候就用这个kernel值来代表两张图的结构,而不是用一张图的向量来表示。有了kernel之后一些现成的带有核函数的机器学习方法就可以直接拿来使用,比如Kernel SVM
支持向量机。
(5)其他的kernel
这些都是在统计机器学习时代的方法,现在是深度学习、神经网络的年代了。
本次任务从图的基本表示开始,学习了各种不同类型的图(无向图、有向图、异质图、二分图),还学习了图的一些基本表示(邻接矩阵、连接表、邻接表)以及一些图的连通性问题。之后的特征工程提到了不管是上面提到的节点层面的特征还是连接层面的还是全图层面的,这些都是需要人工去设计,再输入到机器学习模型中的,对于特征的回顾如下图所示:
在后面要学习的的图神经网络中,我们就是端到端的用深度学习的方法,使用图嵌入自动得到图中的特征(包括结构、连接、语义特征等等),不再需要人工设计特征。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。