专业游戏门户,分享手游网游单机游戏百科知识攻略!

嗨游网
嗨游网

python基于Node2Vec怎么实现节点分类及其可视化

来源:小嗨整编  作者:小嗨  发布时间:2024-03-19 07:51
摘要:简介node2vec是一种用于图嵌入(graphembedding)的方法,可用于节点分类、社区发现和连接预测等任务。实现过程 加载数据集首先,让我们加载所需的Python库并执行以下代码以加载Cora数据集:importnetwork...
简介

node2vec是一种用于图嵌入(graph embedding)的方法,可用于节点分类、社区发现和连接预测等任务。

python基于Node2Vec怎么实现节点分类及其可视化

实现过程 

加载数据集

首先,让我们加载所需的Python库并执行以下代码以加载Cora数据集:

import networkx as nx import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline from sklearn.manifold import TSNE from node2vec import Node2Vec # 加载Cora数据集cora = pd.read_csv('cora/cora.content', sep='\t', header=None)cited_in = pd.read_csv('cora/cora.cites', sep='\t', header=None,                       names=['target', 'source'])nodes, features = cora.iloc[:, :-1], cora.iloc[:, -1]
登录后复制

其中 cora.content 包含了所有节点特征信息,一共具有2708个节点和1433个特征;而 cora.cites 通过引文映射分别针对所述每个节点建立一个节点间的有向边关系,共有5429个边。接下来,我们需要将节点特征和引用信息合并,构建图结构。

# 定义函数:构造基于Cora数据集的图结构def create_graph(nodes, features, cited_in):    nodes.index = nodes.index.map(str)    graph = nx.from_pandas_edgelist(cited_in,                                    source='source',                                    target='target')    for index, row in nodes.iterrows():        node_id = str(row[0])        features = row.drop(labels=[0])        node_attrs = {f'attr_{i}': float(x) for i, x in enumerate(features)}        if graph.has_node(node_id) == True:            temp = graph.nodes[node_id]            temp.update(node_attrs)            graph.add_nodes_from([(node_id, temp)])        else:            graph.add_nodes_from([(node_id, node_attrs)])    return graph# 构建图graph = create_graph(nodes, features, cited_in)
登录后复制

该函数将 cora.content 中的节点特征与 cora.cites 的有向边整合,并在图上标记它们。现在我们已经构建了一个图形视图,可以按想法可视化。

使用Node2vec嵌入数据

为了进行节点特征分类,我们需要从网络中提取一些信息并将其作为输入传递给分类器。一个示例是使用节点2矢量方法将提取的信息转化为向量表达式,使每个节点至少具有一个维度。

通过随机游走样本从起始节点到目标节点,Node2Vec模型学习代表每个节点的向量。 节点2Vec模型定义随机游走过程中节点间的转移概率。

我们将使用 node2vec 库来生成图形的嵌入表示,并采用神经网络进行节点分类。

# 定义函数:创建基于Cora数据集的嵌入def create_embeddings(graph):    # 初始化node2vec实例,指定相关超参数    n2v = Node2Vec(graph, dimensions=64, walk_length=30,                   num_walks=200, p=1, q=1, weight_key='attr_weight')    # 基于指定参数训练得到嵌入向量表达式    model = n2v.fit(window=10, min_count=1, batch_words=4)    # 获得所有图中节点的嵌入向量    embeddings = pd.DataFrame(model.wv.vectors)    ids = list(map(str, model.wv.index2word))    # 将原有的特征和id与新获取到的嵌入向量按行合并    lookup_table = nodes.set_index(0).join(embeddings.set_index(embeddings.index))    return np.array(lookup_table.dropna().iloc[:, -64:]), np.array(list(range(1, lookup_table.shape[0] + 1)))# 创建嵌入向量cora_embeddings, cora_labels = create_embeddings(graph)
登录后复制

通过以上代码,我们可以获得每个节点的64维节点嵌入表达。

训练分类器

接下来我们将指定一些分类器并在Cora数据集上训练它们,以期根据嵌入进行准确的节点分类操作。

from sklearn import svm, model_selection, metrics # 使用支持向量机作为示范的分类器svm_model = svm.SVC(kernel='rbf', C=1, gamma=0.01)# 进行交叉验证和分类训练scores = model_selection.cross_val_score(    svm_model, cora_embeddings, cora_labels, cv=5)print(scores.mean())
登录后复制

为了获得更好的性能,支持向量机作为分类器时,我们还需要对其进行相关调参操作。此处采取了5折交叉验证的方式对其性能进行评估输出。

可视化节点嵌入

为了更好地理解,我们需要将人类难以理解的64维特征表达进行降维处理以实现可视化。t-SNE是一种专门用于降低高维数据复杂度的方法,我们在这里使用它。它生成一个二维图,相似节点之间紧密地聚集在一起,而这个图是通过输出仅包含两个元素的概率分布向量实现的。

# 定义函数:可视化Nodes2Vec的结果def visualize_results(embeddings, labels):    # 使用t-SNE对数据进行降维并绘图    tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300)    tsne_results = tsne.fit_transform(embeddings)    plt.figure(figsize=(10, 5))    plt.scatter(tsne_results[:,0], tsne_results[:,1], c=labels)    plt.colorbar()    plt.show()# 可视化结果visualize_results(cora_embeddings, cora_labels)
登录后复制

Node2Vec生成的嵌入向量将被输入到t-SNE中,其中t-SNE将64维向量表达进行了降维,并输出我们可以使用 matplotlib 库可视化的二维散点图。大多数相关节点是否紧密聚集,可以在图形界面中进行检查。

以上就是python基于Node2Vec怎么实现节点分类及其可视化的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络百科频道 https://www.eeeoo.cn/wangluo/1151049.html,嗨游网一个专业手游免费下载攻略知识分享平台,本站部分内容来自网络分享,不对内容负责,如有涉及到您的权益,请联系我们删除,谢谢!


网络百科
小编:小嗨整编
相关文章相关阅读
  • 荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?

    荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?

    荔枝app录音怎么导出音频(荔枝app的音频怎么转成mp3格式)?荔枝app作为一款流行的音频录制与分享平台,让许多用户可以在其中录制属于自己的声音。但有时候,我们可能需要将荔枝app中的录音导出为MP3格式,以便在其他设备上播放。本文将为...

  • 华为应用商店app官网(华为应用商店app怎么下载)?

    华为应用商店app官网(华为应用商店app怎么下载)?

    华为应用商店app官网(华为应用商店app怎么下载)?华为应用商店App作为华为手机用户的首选应用下载平台,提供了丰富的应用程序、游戏资源,同时也保证了应用的安全性和稳定性。那么,如何从官网下载华为应用商店App呢?本文将为您详细介绍。一、...

  • 淘宝app怎么打开(淘宝app在哪里找)?

    淘宝app怎么打开(淘宝app在哪里找)?

    淘宝app怎么打开(淘宝app在哪里找)?在现代生活中,淘宝App已经成为我们购物的重要工具之一。那么,淘宝App到底怎么打开?又该如何找到并下载它呢?本文将为您详细解答。一、淘宝App的下载方法1.通过手机应用商店下载对于安卓用户:打开手...

  • 魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?

    魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?

    魔兽世界泰兰德是什么职业(魔兽世界泰兰德幻化怎么获得)?在魔兽世界中,泰兰德是魔兽世界中暗夜精灵种族的代表性角色,她以牧师职业为主。牧师在游戏中拥有强大的治疗和辅助能力,是团队中不可或缺的重要角色。泰兰德作为一名牧师,擅长使用圣光和暗影之力...

  • 魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?

    魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?

    魔兽世界恶魔术士天赋加点(魔兽世界恶魔术士属性怎么堆)?在魔兽世界中,恶魔术士是一个以高爆发和持续伤害著称的职业。合理的天赋加点对于恶魔术士的输出至关重要。本文将为您详细介绍恶魔术士的天赋加点方法,以及如何高效堆叠属性。魔兽世界恶魔术士天赋...

  • lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?

    lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?

    lol道聚城怎么赠送皮肤(lol道聚城优惠券领取)?lol道聚城作为英雄联盟的官方周边商城,提供了丰富的游戏周边产品和优惠活动。在道聚城中,赠送皮肤成为了许多玩家表达友谊与支持的方式。下面将为您详细介绍如何在lol道聚城赠送皮肤,以及如何领...

  • lol小丑的名字叫什么(lol小丑怎么分辨真假)?

    lol小丑的名字叫什么(lol小丑怎么分辨真假)?

    lol小丑的名字叫什么(lol小丑怎么分辨真假)?在lol英雄联盟中,小丑(Janna)作为一位辅助英雄,以其独特的技能和出色的辅助能力深受玩家喜爱。然而,许多玩家在游戏中可能遇到真假小丑难以辨别的问题。本文将为大家详细解析LOL小丑的名字...

  • dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?

    dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?

    dnf格斗大赛黄金套外观(dnf格斗大赛装扮兑换券怎么获得)?在dnf中,格斗大赛黄金套一直是玩家们梦寐以求的稀有装扮。这套装扮不仅外观炫酷,而且属性强大,深受玩家们的喜爱。那么,黄金套的外观究竟如何,我们又该如何获得兑换券呢?本文将为您一...

  • 周排行
  • 月排行
  • 年排行

精彩推荐