deep learning算法,神经网络算法模型
前面写的1、Deepwalk、Node2vec等图算法的本质是特征提取器,对图进行采样,为采样序列建立模型,最后将节点转化为特征向量,嵌入其中。
2.图形算法的优势
图是对复杂连接关系建模的项目的高阶相似关系,可以通过用户的动作序列更好地学习。
同时,在建立数据集的过程中,长尾产品可以接受更多的训练,弥补数据稀疏的问题,有效提高覆盖率。
一.深度行走1,资料来源:14年KDD: 《DeepWalk: Online Learning of Social Representations》
2.思路:Deepwalk的主要思路是在条目的图结构上随机行走,生成大量的条目序列,将这些条目序列作为训练样本输入到word2vec中进行训练,从而得到条目的嵌入式训练。
RandomWalk是一种深度优先的扫描算法,可以重复访问被访问的节点。指定当前接入起始节点,将相邻的随机采样节点作为下一个接入节点,重复上述过程,直到接入序列长度满足预设条件。
3.图标:
4.算法流程的四个步骤:
)图A显示了原始的用户动作系列。)图B基于这些用户动作系列构建了一个物品关联图。物品A和B之间的边的原因是在用户U1相继购买了物品A和物品B之后,产生了从A到B的有向边。如果生成多个相同的有向边,则有向边的权重将被加强。将所有用户的行为序列转化为文章关联图中的边(原deepwalk论文中没有权重,但为randomWalk)后,得到全局的文章关联图。)图C以随机行走的方式随机选择起点,在每个节点重新生成一部分文章专栏(样本)。获取当地相关的培训数据。deepwalk将这一系列视为语言模型中的一个短语,当给定一个短语的中心词时,最大化上下文词出现的概率。)图d最后将这些条目输入word2vec模型生成最终的条目嵌入向量。5.深走的跳跃概率
定义下一个相邻点vj在到达节点vi后穿过vi的概率。跳转概率与跳转节点的边权重正相关(跳转概率=当前边权重/所有边权重之和)。
6.随机漫步生成所有单词串。
在语言模型的框架下,在给出所有漫游节点的前提下,下一个漫游/访问节点可能是v_i:
假设下面的映射函数,得到节点的潜在表示(也就是后面得到的嵌入,也就是提取节点的特征)。
利用神经概率语言建模的知识,deepWalk中节点词表示的概率建模方法归结为以下优化问题:
(目标函数采用最大似然函数和样本参数词预测上下文;上下文由给定节点单词的左W窗口和右W窗口中的单词组成;不考虑上下文单词在文本中出现的顺序,直接最大化所有单词在上下文中出现的概率)
Gamma重复执行deepwalk算法。在每个循环中,词汇V被打乱,产生随机排序,并且遍历所有节点。然后得到以每个节点为起点的随机游走列W_vi,利用语言模型SkipGram更新节点的嵌入表示。
2.Node2vec 1。来源:n2v出现在2016年。与DeepWalk相比,通过调整随机行走权重,将图嵌入结果与网络同质性和结构相等性进行比较。
2.思想
按照作者最初的理解:使用灵活的,biasedrandomwalkshatcontrade of weenlocalandglobalviewsofthenetwork。
3.说明
具体来说,网络的所谓“同质性”意味着来自相邻节点的嵌入表示应该尽可能相似。如图4所示,节点U及其连接的节点s1、s2、s3和s4的嵌入表示应该是相似的,即
“结构”是指结构相似的节点的嵌入距离要尽可能的近。在图4中,节点U和节点s6是各自本地网络的中心节点,在结构上是相似的,嵌入距离的表示应该是相似的。
与deepwalk不同,node2vec主要取决于节点间的跳转概率。跳跃概率是三个阶段的关系,考虑当前跳跃节点和前一个节点到下一个节点的‘距离’,用返回参数P和进入(或离开)参数Q控制游泳方向(例如,
节点转移的图像如下。
这里,d_tx是指从节点T到节点X的距离,参数P和Q都控制随机游走的趋势。
参数p称为返回参数,p越小,越有可能随机返回到节点t,节点2 vec的重点是显示网络的结构。
参数Q称为输入输出参数。Q越小,随机游走到远处节点的概率越高。Node 2 vec更注重网络的同质性。相反,当前节点位于附近节点的概率越高。
徘徊。
4.算法流程
)计算转移概率矩阵,即构建整个网络的转移概率图。(preNode,curNode,[curNode,[curNode的所有邻居dstNode的跳转概率])
2)采样生成训练样本序列
3.)梯度下降优化
d,每个节点生成长度为l的R个语料库序列。上下文长度为k。
开始节点:u
初始节点U及其邻域表示:{u,s4,s5,s6,s8,s9}
u的邻域:$N_s(u)=(s_4,s_5,s_6,s_8,s_9)$
Walk是node U产生的随机游走的样本结果集,为了便于说明,上下伪码框分别从0开始编号。
从第5行到第8行,对每个顶点进行R轮遍历,生成长度为L的顶点序列,存储在集合遍历中。
第9行是做梯度下降优化。建议采用负采样。
5.摘要
node2vecWalk部分的第一步是初始化序列遍历。只需注意此时walk已经包含两个元素[pre,curr],然后进行L步n2v walk。第3行获取walk中的前一个节点作为当前节点curr,…剩下的就不难了。
注意,在GetNeighbors中,对于当前节点curr,可以对所有邻居进行采样,然后进行计算。
代码写得很清楚。你只需要注意对每个节点采取一个步骤来生成(prevNodeId,currentNodeId)这个itempair。调用node2vecWalk时,需要L轮currentNodeId来生成(项目1,项目2,项目3.)
参考:https://zhuanlan.zhihu.com/p/90783845
三。node2vec源代码1的操作。下载地址:https://github.com/aditya-grover/node2vec
2.python版本:在src/main.py中修改
1)路径:
default= graph/空手道. edgelist—default=./graph/空手道. edge list # Constructed edge default= emb/空手道. emb—default=./emb/空手道. emb #生成的模型2)类型转换
Walks=[map (str,walk)for walks in walks]—walks=[list(map(str,walk))for walks in walks]3)save _ word 2 vec _ format方法已被弃用。
model . save _ word 2 vec _ format(args . output)—model . wv . save _ word 2 vec _ format(args . output)3 .scala版本以上项目中,node2vec_spark是scala版本。
1)导入项目
删除。先idea文件目录,然后右击文件src —Make目录as—Sources根目录[否则会出现导入本地文件找不到路径的问题]
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。