node2vec随机游走源码

本文深入解析了Node2Vec算法,介绍了如何在Python环境下运行Node2Vec源码,并详细解释了其核心组件,包括AliasMethod抽样算法。文章提供了代码示例,展示了如何读取网络图、进行随机游走以及学习节点嵌入。

论文中的源码在 https://github.com/aditya-grover/node2vec/,python3的话main中的learn_embeddings()需要简单修改以下,然后就能跑通了。
node2vec是基于word2vec的,难点在于Alias Method 抽样算法,其代码的实现比字符串匹配的kmp算法还难以捉摸。
本文加了注释,有助于解析node2vec。
先看使用node2vec的部分:

def read_graph():
    '''
    Reads the input network in networkx.
    '''
    if args.weighted:
        G = nx.read_edgelist(args.input, nodetype=int, data=(('weight',float),), create_using=nx.DiGraph())
    else:
        G = nx.read_edgelist(args.input, nodetype=int, create_using=nx.DiGraph())
        for edge in G.edges():
            G[edge[0]][edge[1]]['weight'] = 1

    if not args.directed:
        G = G.to_undirected()

    return G

def learn_embeddings(walks):
    '''
    Learn embeddings by optimizing the Skipgram objective using SGD.
    '''
    walks = [list(map(str, walk)) for walk in walks]
    model = Word2Vec(walks, size=args.dimensions, window=args.window_size, min_count=0, sg=1, workers=args.workers, iter=args.iter)
    # model.save_word2vec_format(args.output)
    model.wv.save_word2vec_format(args.output, binary=False)
    
    return

def main(args):
    '''
    Pipeline for representational learning for all nodes in a graph.
    '''
    nx_G = read_graph()
    G = node2vec.Graph(nx_G, args.directed, args.p, args.q)
    G.preprocess_transition_probs
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值