使用机器学习的算法解决问题须要有大量的信息,可是现实世界中的网络中的信息每每比较少,这就致使传统机器学习算法不能在网络中普遍使用。node
(Ps: 传统机器学习分类问题是学习一种假设,将样本的属性映射到样本的类标签,可是现实网络中的结点属性信息每每比较少,因此传统机器学习方法不适用与网络。)算法
deepWalk是网络表征学习的比较基本的算法,用于学习网络中顶点的向量表示(即学习图的结构特征即属性,而且属性个数为向量的维数),使得可以应用传统机器学习算法解决相关的问题。网络
input:邻接表dom
每行表明一个顶点的全部边机器学习
output:学习
第一行为结点个数和向量维数,后面每行为一个结点的向量表示,第一列为nodeId**pwa
innovation:3d
借助语言建模word2vec中的一个模型,skip-gram来学习结点的向量表示。将网络中的结点模拟为语言模型中的单词,而结点的序列(可由随机游走获得)模拟为语言中的句子,做为skip-gram的输入。blog
feasibility:ip
以上假设的可行性证实,当图中结点的度遵循幂律分布(通俗讲即度数大的节点比较少,度数小的节点比较多)时,短随机游走中顶点出现的频率也将遵循幂律分布(即出现频率低的结点多),又由于天然语言中单词出现的频率遵循相似的分布,所以以上假设可行。(Ps: 为证实有效性,做者针对YouTube的社交网络与Wikipedia的文章进行了研究,比较了在短的随机游走中节点出现的频度与文章中单词的频度进行了比较,能够得出两者基本上相似。(幂率分布))
process:
随机游走+skip-gram 语言模型
经过随机游走获得短的结点序列,经过skip-gram更新结点向量表示。
Random Walk
Random Walk从截断的随机游走序列中获得网络的局部信息,并以此来学习结点的向量表示。
deepwalk中的实现是彻底随机的,根据Random Walk的不一样,后面又衍生出了node2vec算法,解决了deepwalk定义的结点类似度不能很好反映原网络结构的问题。
skip-gram 语言模型
skip-gram 是使用单词来预测上下文的一个模型,经过最大化窗口内单词之间的共现几率来学习向量表示,在这里扩展以后即是使用结点来预测上下文,而且不考虑句子中结点出现的顺序,具备相同上下文的结点的表示类似。(Ps:两个node同时出如今一个序列中的频率越高,两个node的类似度越高。)
结点类似性度量: 上下文的类似程度(LINE中的二阶类似度)
共现几率根据独立性假设能够转化为各条件几率之积即
对序列中的每一个顶点,计算条件几率,即该结点出现的状况下序列中其余结点出现的几率的log值并借助随机梯度降低算法更新该结点的向量表示。
Φ(vj)为当前结点的向量表示。Hierarchical Softmax用于分解并加快计算第三行的条件几率。
本次实验在人工网络上进行(平均度为20,最大度为50,一个社区小包含结点数minc为10,最大maxc为100),deepwalk参数为默认值,训练向量维数为64。分别在mu(混合度)为0.1,0.2,0.3,0.4,0.5,0.6,而且节点规模N为2k,4k,6k,8k,10k上进行。使用sklearn库的K-means进行聚类,K进行人工调整在实际值,重复每一个实验10次而且计算每一个实验的平均NMI值。
NMI | N=2k | N=4k | N=6k | N=8k | N=10k |
---|---|---|---|---|---|
u=0.1 | 0.955741 | 0.965896 | 0.973577 | 0.973319 | 0.969941 |
u=0.2 | 0.958258 | 0.958192 | 0.960152 | 0.955094 | 0.957447 |
u=0.3 | 0.955079 | 0.941854 | 0.933403 | 0.929904 | 0.932717 |
u=0.4 | 0.953002 | 0.924042 | 0.908161 | 0.916834 | 0.913081 |
u=0.5 | 0.949694 | 0.895752 | 0.876676 | 0.878265 | 0.876310 |
u=0.6 | 0.897372 | 0.872618 | 0.852643 | 0.838807 | 0.835484 |
存在问题:
聚类参数k的肯定问题对实验的影响很大。
本实验未探究deepwalk参数即训练的向量维数,随机游走长度,迭代次数,skip-gram窗口大小对聚类精度的影响。