1. node2vec

node2vec: Scalable Feature Learning for Networks
https://github.com/aditya-grover/node2vec

这篇文章不是将它的思路和代码。只是因为在python中居然集成了node2vec,故而感觉很新奇,所以这里来进行一个简单的小实验。

1. 安装

pip install node2vec

2. 训练

使用karate_club_graph数据集,然后进行表示学习。

from node2vec import Node2Veca = Karate_graph()
# a.draw_graph()  # 绘制图像
# matrix = a.get_graph_adjacency_matrix()
gn = a.get_karate_club_graph()
n2v = Node2Vec(gn, dimensions=20, walk_length=10, num_walks=20)
model = n2v.fit(window=5, min_count=1)
# 训练的向量表示
node_embeddings = model.wv.vectors

而,Karate_graph类,是我自定义的一个类,方便获取一些数据,如下:

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
import community as community_louvain
import matplotlib.cm as cm
%matplotlib inlineclass Karate_graph(object):def __init__(self):self.G = nx.karate_club_graph()#first compute the best partitionself.partition = community_louvain.best_partition(self.G)# colorsself.colors = ["BlueViolet", "LawnGreen", "OrangeRed", "Turquoise"] # 33-1紫、32-1绿、1-1红、7-1蓝  , 减1是因为图是从0开始的def draw_graph(self):"""绘制其图像"""# draw the graphpos = nx.spring_layout(self.G)# 节点对应的颜色的封装resu = {}for com in list(set(self.partition.values())):nodes = [key for key in self.partition.keys() if self.partition[key] == com]if 32 in nodes:resu[self.colors[0]] = nodeselif 31 in nodes:resu[self.colors[1]] = nodeselif 0 in nodes:resu[self.colors[2]] = nodeselse:resu[self.colors[3]] = nodes# 生成节点对应的label字典labels = {}for node in list(self.G.nodes()):labels[node] = node+1options = {"node_size": 250, "alpha": 0.8}# nodesfor color in self.colors:nx.draw_networkx_nodes(self.G, pos, nodelist=resu[color], label=resu[color], node_color=color, **options)# edgesnx.draw_networkx_edges(self.G, pos, alpha=0.5)# labelsnx.draw_networkx_labels(self.G, pos, labels, font_size=10, font_color='black')plt.axis("off")  # 关闭坐标轴plt.show()# 保存下颜色字典self.node_colors_dict = resudef get_graph_adjacency_matrix(self):"""得到其邻接矩阵表示"""return np.array(nx.adjacency_matrix(self.G).todense(), dtype=np.float32)def get_karate_club_graph(self):"""得到networkx格式的数据图"""return self.Gdef get_node_colors(self):"""返回节点的颜色列表,方便后面的图像的绘制"""node_colors = [0 for val in range(len(self.G))]for key in self.node_colors_dict.keys():for node in self.node_colors_dict[key]:node_colors[node] = keyreturn node_colors

可以简单的使用,a.draw_graph()来绘制图像,即:

然后,在使用node2vec中,可以简单的计算节点相似的节点,即:

def get_similar(name):for node, _ in model.most_similar(name):print(node)

2. TNSE

一种数据降维的算法实现,相似的还有PCALEMDSIsoMap等。
它的一种实现在sklearn中集成了,这里就直接使用。

from sklearn.manifold import TSNE
# 定义tsne,映射到2维空间
tsne = TSNE(n_components=2)
node_embeddings = model.wv.vectors
node_embeddings_2d = tsne.fit_transform(node_embeddings)
# 图片标签
node_colors_list = a.get_node_colors()
plt.scatter(node_embeddings_2d[:, 0], node_embeddings_2d[:, 1], c=node_colors_list)

但是,得到的东西,不具有论文中常见的聚类效果,如:

对比,Rank2vec中的实验:

这里,就百度了一下,来自这篇博客,here:
那么,猜测是否是数据本身就具有聚类效果,才会导致学习到的嵌入表示具有一定的聚类效果?
看看,iris数据,即:

from sklearn import datasets,manifold
import timedatas = datasets.load_iris()
t1=time.time()
Y1=manifold.TSNE(2).fit_transform(datas.data)
t2=time.time()
print("Sklearn TSNE cost time: %s"%str(round(t2-t1,2)))
plt.plot(Y1[0:50,0],Y1[0:50,1],'ro',markersize=20)
plt.plot(Y1[50:100,0],Y1[50:100,1],'gx',markersize=20)
plt.plot(Y1[100:150,0],Y1[100:150,1],'b*',markersize=20)
plt.title('SKLEARN')
plt.show()

效果:

很明显,故而,是数据本身具有一定的聚集效果。
那么,在使用node2vec学习节点的表示,再经过t-sne,是如何得到这个图的呢:

还是,中途使用了一些聚类算法来做?
待解决问题!

`node2vec` `TSNE` 待解决问题相关推荐

  1. PYG教程【四】Node2Vec节点分类及其可视化

    本文主要是介绍如何用PyTorch Geometric快速实现Node2Vec节点分类,并对其结果进行可视化. 整个过程包含四个步骤: 导入图数据(这里以Cora为例) 创建Node2Vec模型 训练 ...

  2. 【CS224W】(task4/5)图嵌入表示学习(Deepwalk、Node2vec)更新中

    note Node embedding的基本框架:encoder+decoder 最简单encoder是embedding-lookup表:ENC(v)=zv=Z⋅v\mathrm{ENC}(v)=z ...

  3. 五、降维——从SNE到t-SNE再到LargeVis

    0x00 前言 本文谢绝转载,如有需要请联系bindog###outlook.com,###换成@ 数据可视化是大数据领域非常倚重的一项技术,但由于业内浮躁的大环境影响,这项技术的地位渐渐有些尴尬.尤 ...

  4. Pca,Kpca,TSNE降维非线性数据的效果展示与理论解释

    Pca,Kpca,TSNE降维非线性数据的效果展示与理论解释 前言 一:几类降维技术的介绍 二:主要介绍Kpca的实现步骤 三:实验结果 四:总结 前言 本文主要介绍运用机器学习中常见的降维技术对数据 ...

  5. 从SNE到t-SNE再到LargeVis

    0x00 前言 本文谢绝转载,如有需要请联系bindog###outlook.com,###换成@ 数据可视化是大数据领域非常倚重的一项技术,但由于业内浮躁的大环境影响,这项技术的地位渐渐有些尴尬.尤 ...

  6. DeepWalk Node2Vec

    DeepWalk & Node2Vec 维基百科词条DeepWalk图嵌入 import networkx as nx import pandas as pd import numpy as ...

  7. 网络表示学习-Node2vec

    论文粗读 论文标题: node2vec: Scalable Feature Learning for Networks 数据挖掘领域的顶级会议KDD-2016 论文链接: node2vec | Pro ...

  8. python粘性拓展_Python基础之:拓展解决问题的思路

    0.锤子原理 在手里拿着一把锤子的人眼中,世界就像一根钉子. 大多人试图以一种思维模型来解决问题,而其思维往往只来自某一专业学科, 但你必须知道各种重要学科的重要理论. 一一<穷查理宝典> ...

  9. Java初学者如何自学和自己定位解决问题

    注: OneCoder 即本人苦逼Coder 今天群里(Java Coder群:91513074)的朋友,问我该如何看帮助文档,或者说在遇到问题的时候如何解决.希望我能介绍一下我的方法. 这个OneC ...

  10. PCA、LDA、MDS、LLE、TSNE等降维算法的Python实现

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]网上关于各种降维算法的资料参差不齐,但大部分不提供源代码.近日,有人在 GitHub 上整理了一些经典降维算法的 Demo ...

最新文章

  1. 清华首批7门标杆课程,到底有多牛?
  2. 360浏览器打不开qq空间_浏览器变慢有救了!只要2秒,重回新安装一样爽快!
  3. java环境安装之不能安装exe文件
  4. css盒子模型、文档流、相对与绝对定位、浮动与清除模型
  5. iOS9的几个新关键字(nonnull、nullable、null_resettable、__null_unspecified)
  6. ssm整合之七 事务以及404页面处理
  7. 更改配置:远程访问gitlab的postgresql数据库
  8. b - 数据结构实验之查找二:平衡二叉树_文件系统的灵魂数据结构 B树
  9. python 函数的参数对应
  10. 云小课 | DSC:快速识别敏感数据并脱敏
  11. 你必须知道的10项大数据思维原理
  12. idea 安装 jclasslib 插件
  13. 坚果nuts 加速 官网_quot;如果你不吃坚果,你就是坚果(傻瓜)!quot;
  14. php的垃圾回收机制
  15. 「四年总结」一名程序猿的打怪升级之路
  16. pytorch如何freeze模型参数
  17. 【时光隧道——使用Html、JavaScript等实现(附源代码)】
  18. python turtle画樱花树
  19. JAVA实现PCA主成分分析_主成分分析PCA(principal component analysis)原理
  20. 翰林学院python_为什么入门大数据选择Python而不是Java?

热门文章

  1. 晶体结构可视化软件Vesta简介
  2. 实用的软件安装及使用
  3. 程序员微信头像_哪些微信头像一看就是程序员?
  4. Vim命令大全(linux)
  5. java内嵌浏览器的几种方式
  6. 8250cdn清零 lh_兄弟 HL-L8250CDN驱动
  7. 文档——软件需求说明书
  8. 软件系统分析-分账系统
  9. aceAdmin框架依赖
  10. 网络渗透就业学习路线