【Graph Embedding】Struc2Vec:算法原理,实现和应用

Struc2Vec是一种图embedding方法,通过定义顶点的结构相似度来捕捉非近邻顶点间的关联。它构建层次带权图,使用动态时间规整(DTW)计算有序度序列距离,并进行随机游走采样。文章讨论了算法的优化技巧,包括有序度序列长度优化、相似度计算优化和限制层次带权图层数。在机场流量数据集的分类任务中,Struc2Vec表现优于Node2Vec,证明了其在捕获空间结构性方面的优势。
摘要由CSDN通过智能技术生成

前面介绍过DeepWalk,LINE,Node2Vec,SDNE几个graph embedding方法。这些方法都是基于近邻相似的假设的。其中DeepWalk,Node2Vec通过随机游走在图中采样顶点序列来构造顶点的近邻集合。LINE显式的构造邻接点对和顶点的距离为1的近邻集合。SDNE使用邻接矩阵描述顶点的近邻结构。

事实上,在一些场景中,两个不是近邻的顶点也可能拥有很高的相似性,对于这类相似性,上述方法是无法捕捉到的。Struc2Vec就是针对这类场景提出的。Struc2Vec的论文发表在2017年的KDD会议中。

Struc2Vec算法原理

相似度定义

Struc2Vec是从空间结构相似性的角度定义顶点相似度的。

用下面的图简单解释下,如果在基于近邻相似的模型中,顶点u和顶点v是不相似的,第一他们不直接相连,第二他们不共享任何邻居顶点。

而在struc2vec的假设中,顶点u和顶点v是具有空间结构相似的。他们的度数分别为5和4,分别连接3个和2个三角形结构,通过2个顶点(d,e;x,w)和网络的其他部分相连。
在这里插入图片描述直观来看,具有相同度数的顶点是结构相似的,若各自邻接顶点仍然具有相同度数,那么他们的相似度就更高。

顶点对距离定义

R k ( u ) R_k(u) Rk(u)表示到顶点u距离为k的顶点集合,则 R 1 ( u ) R_1(u) R1(u)表示是u的直接相连近邻集合。

s ( S ) s(S) s(S)表示顶点集合 S S S有序度序列

通过比较两个顶点之间距离为k的环路上的有序度序列可以推出一种层次化衡量结构相似度的方法。

f k ( u , v ) f_k(u,v) fk(u,v)表示顶点u和v之间距离为k(这里的距离k实际上是指距离小于等于k的节点集合)的环路上的结构距离(注意是距离,不是相似度)。

f k ( u , v ) = f k − 1 ( u , v ) + g ( s ( R k ( u ) ) , s ( R k ( v ) ) ) , k ≥ 0  and  ∣ R k ( u ) ∣ , ∣ R k ( v ) ∣ > 0 f_k(u,v)=f_{k-1}(u,v)+g(s(R_k(u)),s(R_k(v))),k\ge 0 \text{ and } |R_k(u)|,|R_k(v)|>0 fk(u,v)=fk1(u,v)+g(s(Rk(u)),s(Rk(v))),k0 and Rk(u),Rk(v)>0

其中 g ( D 1 , D 2 ) ≥ 0 g(D_1,D_2)\ge 0 g(D1,D2)0是衡量有序度序列 D 1 D_1 D1 D 2 D_2 D2的距离的函数,并且 f − 1 = 0 f_{-1}=0 f1=0.

下面就是如何定义有序度序列之间的比较函数了,由于 s ( R k ( u ) ) s(R_k(u)) s(Rk(u)) s ( R k ( v ) ) s(R_k(v)) s(Rk(v))的长度不同,并且可能含有重复元素。所以文章采用了**Dynamic Time Warping(DTW)**来衡量两个有序度序列。

一句话,DTW可以用来衡量两个不同长度且含有重复元素的的序列的距离(距离的定义可以自己设置)。

基于DTW,定义元素之间的距离函数
d ( a , b ) = m a x ( a , b ) m i n ( a , b ) − 1 d(a,b)=\frac{max(a,b)}{min(a,b)}-1 d(a,b)=min(a,b)max(a,b)1

至于为什么使用这样的距离函数,这个距离函数实际上惩罚了当两个顶点的度数都比较小的时候两者的差异。举例来说,
a = 1 , b = 2 a=1,b=2 a=1,b=2情况下的距离为1, a = 101 , b = 102 a=101,b=102 a=101,b=102情况下的距离差异为0.0099。这个特性正是我们想要的。

构建层次带权图

根据上一节的距离定义,对于每一个 k k k我们都可以计算出两个顶点之间的一个距离,现在要做的是通过上一节得到的顶点之间的有序度序列距离来构建一个层次化的带权图(用于后续的随机游走)。

我们定义在某一层 k k k中两个顶点的边权为 w k ( u , v ) = e − f k ( u , v ) , k = 0 , . . . , k ∗ w_k(u,v)=e^{-f_k(u,v)},k=0,...,k^* wk(u,v)=efk(u,v),k=0,...,k

这样定义的边权都是小于1的,当且仅当距离为0的是时候,边权为1。

通过有向边将属于不同层次的同一顶点连接起来,具体来说,对每个顶点,都会和其对应的上层顶点还有下层顶点相连。边权定义为
w ( u k , u k + 1 ) = log ⁡ ( Γ k ( u ) + e ) , k = 0 , . . . , k ∗ − 1 w(u_k,u_{k+1})=\log{(\Gamma_{k}(u)+e)},k=0,...,k^*-1 w(uk,u

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值