1 数据解释
数据集:wiki数据集(2405个网页,17981条网页间的关系)
输入样本:node1 node2 <edge_weight>
输出:每个node的embedding
根据随机游走的序列,输入到word2vec的模型当中,然后就能训练后表示出该节点的embedding
2 代码思想
步骤① 构建一个有向图 ② 进行deepwalk取样本 ③ 输入到word2vec当中训练 ④ 得到了训练好的word2vec,进行evaluate
⑤ 数据分为x_train,x_test, 使用logistics函数,训练embedding后x_train对应的label,然后通过logstics函数预测x_test的标签(标签是0-16所属分类)
⑥画图
① 构建一个有向图
G = nx.read_edgelist('../data/wiki/Wiki_edgelist.txt',
create_using=nx.DiGraph(), nodetype=None, data=[('weight', int)])
② 进行deepwalk取样本 其中 deepwalk就是根据步长,进行深度优先遍历,如果该节点没有邻居节点了,就break出来
def deepwalk_walk(self, walk_length, start_node):
walk = [start_node]
while len(walk) < walk_length:
cur = walk[-1]
cur_nbrs = list(self.G.neighbors(cur))
if len(cur_nbrs) > 0:
walk.append(random.choice(cur_nbrs))
else:
break
return walk
③ 输入到word2vec当中训练,得到该点的embedding表示
④ 得到了训练好的word2vec,得到了2405X128的embedding,然后进行模型的评价
class Classifier(object):
def __init__(self, embeddings, clf<