基于word2vec实现deepwalk中的降维可视化问题

 

        在复现deepwalk时,遇到对实验结果降维可视化的问题,使用PCA结果不佳,于是使用T-SNE。

        但是想让不同类型节点用不同颜色表示时没有找到合适的解决方法,最终使用model.wv.similar_by_word('xxx'),再将节点区分颜色实现了想要的效果。

 最终效果如下:

绿色表示所有与space race相似的节点

 这里使用的数据集来自:

使用DeepWalk从图中提取特征 - 人工智能遇见磐创 - 博客园 (cnblogs.com)

我只保留了depth为1的所有节点,深度为2,3,4的节点有待讨论。

1. 将随机游走序列通过word2vec训练后,找到space exploration的相似节点:

words_exploration = model.wv.similar_by_word('space exploration')

 所有节点的向量放入X中:

X = model.wv.vectors
term2index = model.wv.key_to_index

2.将与 space exploration相似的节点用t-sne降维可视化:

值得注意的是:这里我将所有与space exploration的相似节点降为2维后的向量存放在了sort_x[]和sort_y[]中(sort_x表示x轴,y同理),再进行plt.scatter()。

tsne = TSNE(n_components=2, n_iter=10000)
#将所有节点降为2维
embed_2d = tsne.fit_transform(X)


def plot(sim_words, color, label):
    # 提取相似节点,sim_words是一个[(,),(,)...]形式的list
    first_list = [i[0] for i in sim_words] 
    sort_x = []
    sort_y = []
    # 将所有相似节点的2维向量放进sort_x和sort_y中
    for item in first_list:
        idx = term2index[item]
        sort_x.append(embed_2d[idx, 0])
        sort_y.append(embed_2d[idx, 1])

    plt.scatter(sort_x, sort_y, c=color, label=label)
    #label放在右上角(1,2,3,4对应右上,左上,左下,右下)
    plt.legend(loc=2)


plot(words_race, 'green', 'space race')
plot(words_research, 'red', 'space research')
plot(words_exploration, 'yellow', 'space exploration')
# 注意plt.show不要写在for循环中
plt.show()

存在的问题:model.wv.similar_by_word()没有将所有与space exploration有关的节点提取出来,绘制结果散点图点数过少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值