DeepWalk对图节点的学习

首先从整体介绍一下图表示学习,然后分别从原理,核心代码,应用三个部分介绍DeepWalk。

图表示学习

现实世界中许多场景可以抽象为一种图结构,如社交网络,交通网络,电商网站中用户与物品的关系等。
在传统的机器学习分类设置中,我们的目标是学习一个假设H,它将X的元素映射到标签集Y.而现在我们可以利用通过嵌入在图结构中的示例的依赖性的重要信息来实现卓越的性能。
Graph Embedding—图的表示学习技术将图中的节点以低维稠密向量的形式进行表达,要求在原始图中相似的结点在低维表达空间也接近。

DeepWalk算法原理

DeepWalk的思想是使用图中节点与节点的共现关系来学习节点的向量表示。,其给出的方法是使用随机游走(RandomWalk)的方式在图中进行节点采样
DeepWalk=random walk(爬取很多条序列) + word2vec(对序列里的单词进行向量化)
RandomWalk是一种可重复访问已访问节点的深度优先遍历算法。给定一个起始节点,从邻居中随机采样作为下一个节点,重复此过程,直到访问序列长度满足预设条件,RandomWalk算法伪代码:

a=10   #访问序列长度
Graph graph  #定义的图
vertex v   #初始顶点
def RandomWalk(G=graph,v, a)
    w=[]        #w是访问序列
    w.append(v)  #将初始节点v加入访问序列
    for i in  range(a):
          cur=w[-1]  
          cur_neibor=list(G.Neighbor(cur))    #cur_neibo是顶点v的所有邻居节点
          w.append(random.choice(cur_neibor))  #随机取一个邻居节点加入访问序列

DEEPWALK的整体算法流程如下:

DeepWalk对图节点的学习_第1张图片
DeepWalk.jpg

其中第2步是构建Hierarchical Softmax,第3步对每个节点做γ次随机游走,第4步打乱网络中的节点,第5步以每个节点为根节点生成长度为t的随机游走,第7步根据生成的随机游走使用skip-gram模型利用梯度的方法对参数进行更新。

DEEPWALK算法伪代码如下:

def DeepWalk( nodes, num_walks, walk_length):
      walks = []
      for _ in range(num_walks):    #对应第三步
          random.shuffle(nodes)      #对应第四步
          for v in nodes:                   #第五步
          walks.append(RandomWalk(v=v,a=walk_length))  #第六步
       return walks

很好奇 算法流程第七步skipgram是什么意思,该怎么实现呢?

你可能感兴趣的:(DeepWalk对图节点的学习)