Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用node2vec创建嵌入_Python_Graph_Nodes_Networkx_Word2vec - Fatal编程技术网

Python 使用node2vec创建嵌入

Python 使用node2vec创建嵌入,python,graph,nodes,networkx,word2vec,Python,Graph,Nodes,Networkx,Word2vec,我正在尝试使用networkx和node2vec为我拥有的边缘列表创建嵌入。我的边缘列表如下所示: 1 2 1 6 ... 450 230 ... 601 602 它基本上是一个未加权的无向图,存储在一个文本文件中。我尝试使用以下方法将其转换为图形: nx_G = nx.read_edgelist(args.input, delimiter=' ', create_using=nx.DiGraph()) G = node2vec.Graph(nx_G, args.directed, args

我正在尝试使用networkx和node2vec为我拥有的边缘列表创建嵌入。我的边缘列表如下所示:

1 2
1 6
...
450 230
...
601 602 
它基本上是一个未加权的无向图,存储在一个文本文件中。我尝试使用以下方法将其转换为图形:

nx_G = nx.read_edgelist(args.input, delimiter=' ', create_using=nx.DiGraph())
G = node2vec.Graph(nx_G, args.directed, args.p, args.q, args.seed)
G.preprocess_transition_probs()
walks = G.simulate_walks(args.num_walks, args.walk_length)
walks = [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.wv.save_word2vec_format(args.output)

其中args.input提供文本文件。read_edgelist函数正确读取节点,并创建嵌入。但是,在嵌入文件中,节点的编号不是1到606(这些是“我的边缘”列表中的节点值):而是14,数字从0到9,一些特殊字符作为节点值,而不是为其创建嵌入。也就是说,它不是作为单个节点读取多个数字(比如29)的整数,而是简单地读取2并为其计算嵌入。我不明白为什么会发生这种情况,希望能有一些见解。

我通过注释node2vec存储库main.py文件中的以下代码行来解决这个问题:

walks = [map(str, walk) for walk in walks]
我建议您使用,它为机器学习提供了很好的图形算法。例如,基本节点2向量

from stellargraph.data import BiasedRandomWalk
from stellargraph import StellarGraph
from gensim.models import Word2Vec

rw = BiasedRandomWalk(StellarGraph(g_nx))

walks = rw.run(
      nodes=list(g_nx.nodes()), # root nodes
      length=100,  # maximum length of a random walk
      n=10,        # number of random walks per root node 
      p=0.5,       # Defines (unormalised) probability, 1/p, of returning to source node
      q=2.0        # Defines (unormalised) probability, 1/q, for moving away from source node
)

model = Word2Vec(walks, size=128, window=5, min_count=0, sg=1, workers=2, iter=1)

model.wv['29']