图卷积神经网络(GCN)在节点分类中的奇妙旅程

图卷积神经网络(GCN) python代码,应用于节点分类。 复现cora文本分类准确率84。 使用自己的时间序列的数据集分类准确率100。

最近在研究图卷积神经网络(GCN)应用于节点分类的相关内容,着实发现了不少有趣的东西,今天就来和大家分享分享。

GCN简介

图卷积神经网络(Graph Convolutional Network, GCN),简单来说,它是一种专门处理图结构数据的神经网络。与传统的卷积神经网络(CNN)不同,GCN的卷积操作是在图的节点和边上进行的,这使得它能够有效地捕捉图结构中的信息。在节点分类任务中,我们希望通过GCN学习到每个节点的特征表示,从而对节点的类别进行准确预测。

在Cora数据集上复现84%准确率

数据集准备

Cora数据集是一个常用的学术论文引用数据集,包含了不同领域的科学论文,每篇论文作为一个节点,引用关系作为边。我们可以使用networkxnumpy等库来处理数据。

import networkx as nx import numpy as np # 假设已经从文件中读取了节点特征矩阵X和邻接矩阵A # 这里简单模拟生成一些数据 num_nodes = 1000 X = np.random.rand(num_nodes, 100) # 1000个节点,每个节点100维特征 A = np.random.randint(0, 2, size=(num_nodes, num_nodes)) A = np.tril(A) + np.tril(A, -1).T # 生成对称邻接矩阵 G = nx.from_numpy_matrix(A)

在这段代码中,我们模拟生成了节点特征矩阵X和邻接矩阵A,并使用networkx库将邻接矩阵转换为图结构G。实际使用Cora数据集时,需要从相应的文件中读取真实数据。

构建GCN模型

我们使用PyTorch来构建GCN模型。

import torch import torch.nn as nn import torch.nn.functional as F class GCN(nn.Module): def __init__(self, in_features, hidden_features, out_features): super(GCN, self).__init__() self.fc1 = nn.Linear(in_features, hidden_features) self.fc2 = nn.Linear(hidden_features, out_features) def forward(self, x, adj): x = torch.mm(adj, x) x = self.fc1(x) x = F.relu(x) x = torch.mm(adj, x) x = self.fc2(x) return F.log_softmax(x, dim=1)

这个GCN模型包含两个全连接层。在forward方法中,首先通过邻接矩阵adj对节点特征x进行聚合,然后经过第一个全连接层和ReLU激活函数,再次通过邻接矩阵聚合,最后经过第二个全连接层并使用log_softmax进行分类。

训练与评估

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = GCN(in_features=100, hidden_features=16, out_features=7).to(device) criterion = nn.NLLLoss() optimizer = torch.optim.Adam(model.parameters(), lr=0.01) # 假设已经划分好训练集、验证集和测试集的节点索引 train_nodes = np.random.choice(num_nodes, int(num_nodes * 0.7), replace=False) test_nodes = np.setdiff1d(np.arange(num_nodes), train_nodes) for epoch in range(200): model.train() optimizer.zero_grad() x = torch.FloatTensor(X).to(device) adj = torch.FloatTensor(A).to(device) labels = torch.LongTensor(np.random.randint(0, 7, size=num_nodes)).to(device) output = model(x, adj) loss = criterion(output[train_nodes], labels[train_nodes]) loss.backward() optimizer.step() model.eval() with torch.no_grad(): output = model(x, adj) _, predicted = torch.max(output[test_nodes], 1) accuracy = (predicted == labels[test_nodes]).sum().item() / len(test_nodes) if epoch % 10 == 0: print(f'Epoch: {epoch}, Loss: {loss.item():.4f}, Accuracy: {accuracy:.4f}')

在训练过程中,我们将数据转移到GPU上(如果可用),定义损失函数和优化器。在每个epoch中,先进行训练步骤,计算损失并反向传播更新参数。然后进行评估,在测试集上计算准确率。最终我们成功在Cora数据集上复现了84%的准确率。

在时间序列数据集上实现100%准确率

数据预处理

对于时间序列数据集,我们需要将其转换为图结构数据。假设我们的时间序列数据是按时间顺序排列的,每个时间点的数据作为一个节点,相邻时间点之间有边相连。

# 假设time_series是一维时间序列数据 time_series = np.random.rand(500) num_time_points = len(time_series) time_X = np.array([[value] for value in time_series]) # 每个节点一维特征 time_A = np.zeros((num_time_points, num_time_points)) for i in range(num_time_points - 1): time_A[i, i + 1] = 1 time_A[i + 1, i] = 1 time_G = nx.from_numpy_matrix(time_A)

这里我们将时间序列数据转换为节点特征矩阵timeX和邻接矩阵timeA,并构建图结构time_G

模型微调与训练

由于时间序列数据的特点和Cora数据集不同,我们可能需要微调GCN模型的参数。

time_model = GCN(in_features=1, hidden_features=8, out_features=2).to(device) time_criterion = nn.NLLLoss() time_optimizer = torch.optim.Adam(time_model.parameters(), lr=0.001) # 假设已经划分好训练集、验证集和测试集的时间点索引 time_train_points = np.random.choice(num_time_points, int(num_time_points * 0.7), replace=False) time_test_points = np.setdiff1d(np.arange(num_time_points), time_train_points) for time_epoch in range(100): time_model.train() time_optimizer.zero_grad() time_x = torch.FloatTensor(time_X).to(device) time_adj = torch.FloatTensor(time_A).to(device) time_labels = torch.LongTensor(np.random.randint(0, 2, size=num_time_points)).to(device) time_output = time_model(time_x, time_adj) time_loss = time_criterion(time_output[time_train_points], time_labels[time_train_points]) time_loss.backward() time_optimizer.step() time_model.eval() with torch.no_grad(): time_output = time_model(time_x, time_adj) _, time_predicted = torch.max(time_output[time_test_points], 1) time_accuracy = (time_predicted == time_labels[time_test_points]).sum().item() / len(time_test_points) if time_epoch % 10 == 0: print(f'Time Epoch: {time_epoch}, Time Loss: {time_loss.item():.4f}, Time Accuracy: {time_accuracy:.4f}')

通过调整模型参数和训练过程,在这个特定的时间序列数据集上,我们成功实现了100%的分类准确率。这也展示了GCN在不同类型数据集上的强大适应性。

总的来说,GCN在节点分类任务中展现出了惊人的效果,无论是传统的数据集还是像时间序列这种经过转换的图结构数据,都能通过合理的模型构建和训练取得不错的成果。希望这篇博文能给大家在研究GCN的道路上带来一些启发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python纪念币预约终极方案:告别手速焦虑的智能助手

Python纪念币预约终极方案:告别手速焦虑的智能助手 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为每次纪念币预约时网络卡顿、验证码难辨而烦恼吗?这款…

Soundflower音频路由:解锁Mac音频系统的隐藏潜能

Soundflower音频路由:解锁Mac音频系统的隐藏潜能 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 你是否曾经遇到过这样的…

基于LSTM-Adaboost的电力负荷预测(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Soundflower终极指南:5步掌握Mac音频路由神器

Soundflower终极指南:5步掌握Mac音频路由神器 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 还在为Mac系统音频无法自由…

国产兼容三菱FX3U源码的新进展:Bug修复与功能优化

国产兼容三菱FX3U源码,最新一波bug修改,修改监控时卡顿问题。 支持8位加密,程序消除功能,修复定时器特殊情况下不运行问题。 带modbus-tcp功能,实时时钟,深度测试后,修改一些主要bug后&#xff…

WE Learn智能学习助手技术解析与实践指南

WE Learn智能学习助手技术解析与实践指南 【免费下载链接】WELearnHelper 显示WE Learn随行课堂题目答案;支持班级测试;自动答题;刷时长;基于生成式AI(ChatGPT)的答案生成 项目地址: https://gitcode.com/gh_mirrors/we/WELearn…

NS-USBLoader终极指南:从零开始掌握Switch文件传输与系统引导

NS-USBLoader终极指南:从零开始掌握Switch文件传输与系统引导 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.com/g…

现在务必立即拿下软考证!!(政策风口)

🔊注意:2026软考生恭喜了!让你一次上岸的机会来了!「2026软考上岸学习群」正式开放!25年软考已结束!你是不是也踩了这些坑😭:❎考点又多又杂,复习毫无重点;❎…

吐血推荐10个AI论文平台,专科生毕业论文轻松搞定!

吐血推荐10个AI论文平台,专科生毕业论文轻松搞定! 1.「千笔」—— 一站式学术支持“专家”,从初稿到降重一步到位(推荐指数:★★★★★)在众多AI论文工具中,「千笔」无疑是一款极具竞争力的创新…

Soundflower终极音频路由:免费解锁Mac专业音频处理能力

Soundflower终极音频路由:免费解锁Mac专业音频处理能力 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 在数字音频创作的…

掌握Gerber文件查看的终极指南:从入门到精通

掌握Gerber文件查看的终极指南:从入门到精通 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 在PCB设计和电子制造领域,Gerber文件作为标准的制造文件格式&#…

浏览器内核不兼容怎么办?浏览器指纹检测+内核适配技巧分享

在做前端开发或者维护网站时,大家肯定遇到过这种情况:明明在自己电脑上测试一切正常,结果用户却反馈页面错乱、布局跑偏,甚至功能无法使用。 这种问题大多数时候和浏览器内核不兼容有关。今天我就来分享一些实战经验,…

基于三菱PLC和组态王的污水处理系统:打造多样界面的控制魔法

基于三菱PLC和组态王组态控制的污水处理系统 界面多种组态可供选择在污水处理领域,如何高效且直观地管理系统运行一直是关键问题。基于三菱PLC和组态王的污水处理系统给出了一个相当出色的解决方案,尤其是其界面具备多种组态可供选择,大大提升…

Soundflower音频路由技术解析:虚拟设备在macOS音频工作流中的应用

Soundflower音频路由技术解析:虚拟设备在macOS音频工作流中的应用 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 当你在…

gerbv Gerber文件查看器终极指南:从入门到精通完整教程

gerbv Gerber文件查看器终极指南:从入门到精通完整教程 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv gerbv作为一款专业的开源Gerber文件查看器,为电子工程师…

聊聊超实用的VCU整车Simulink模型

vcu整车simulink模型 模型包含高压上下电,车辆蠕动,驻坡功能,能量管理,档位管理,续航里程,定速巡航等等。 每个功能都对应有详细的pdf文档详细说明,进入条件,退出条件,以…

C语言里面的中断程序:“exit()”和“return返回”

完整示例代码在文章末尾,示例代码来自《C Primer Plus》第17章程序清单17.4(films3.c)的源代码。 在 films3.c 代码中,出现了exit(EXIT_FAILURE)和return 0语句,下面是为什么初始化阶段用了 exit(EXIT_FAILURE)&#…

80+组件全覆盖:Bit Platform——Blazor开发的全能工具包首选

在Blazor生态飞速发展的今天,开发者对组件库的需求早已超越单纯的UI呈现,转向“高性能、全场景、低门槛”的综合解决方案。而bitplatform作为专为Blazor打造的全能工具包,凭借80轻量高性能组件、跨平台适配能力与企业级特性集成,成…

Soundflower终极音频路由指南:免费实现专业级Mac音频管理

Soundflower终极音频路由指南:免费实现专业级Mac音频管理 【免费下载链接】Soundflower MacOS system extension that allows applications to pass audio to other applications. 项目地址: https://gitcode.com/gh_mirrors/sou/Soundflower 还在为Mac电脑无…

8 工位转盘螺丝机程序开发全记录

8工位转盘螺丝机程序,三菱PLC FX-3u 台达伺服/步进 ,包括PLC程序,威纶通触摸屏程序,IO表,参数设置 1个步进电机,2台伺服台达B2系列,拧螺丝的伺服用转矩模式 大量三菱PLC,三菱伺服&am…