【图神经网络基础】认识数据集--异质数据集Chameleon

        Chameleon 数据集是一个复杂的网络数据集,主要用于研究图神经网络(GNN)在节点分类任务中的性能。这个数据集来源于威斯康星大学麦迪逊分校的网络数据集,是一个包含节点(网页)和边(超链接)的网络。以下是对 Chameleon 数据集的详细介绍:

数据集概述

        Chameleon 数据集包含与网络社区相关的信息,每个节点表示一个网页,每条边表示两个网页之间的超链接。该数据集的主要任务是基于节点的特征和图结构对节点进行分类。

数据集组成

  1. 节点:每个节点表示一个网页。
  2. :每条边表示两个网页之间的超链接。
  3. 特征:每个节点都有一个特征向量,通常是通过文本处理技术(如TF-IDF)提取的,用于表示网页的内容。
  4. 标签:每个节点有一个类别标签,表示该网页所属的主题类别。

数据集统计

  • 节点数:2277
  • 边数:36101
  • 特征维度:2325
  • 类别数:5

数据表示

  1. 邻接矩阵:表示图的结构,其中 A[i,j]=1 表示节点 i 和节点 j 之间有边,否则为 0。
  2. 特征矩阵:表示节点特征,其中每行对应一个节点的特征向量。
  3. 标签矩阵:表示每个节点的类别标签。

数据处理步骤

  1. 读取数据:从文件中读取特征矩阵、邻接矩阵和标签。
  2. 数据预处理:对特征进行标准化处理,确保数据适合模型训练。
  3. 划分数据集:将数据集划分为训练集、验证集和测试集。

示例代码

以下是如何使用 PyTorch Geometric 来处理和可视化 Chameleon 数据集的示例代码:

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv
from torch_geometric.datasets import Planetoid
import matplotlib.pyplot as plt
import networkx as nx
from torch_geometric.utils import to_networkx

# 加载 Chameleon 数据集
# 注意:你可能需要先下载数据集并放在合适的目录
# 这里我们使用 Planetoid 数据集作为示例,你需要用实际的 Chameleon 数据进行替换
dataset = Planetoid(root='/tmp/Chameleon', name='Chameleon')

data = dataset[0]

# 创建 GCN 模型
class GCN(torch.nn.Module):
    def __init__(self):
        super(GCN, self).__init__()
        self.conv1 = GCNConv(dataset.num_node_features, 16)
        self.conv2 = GCNConv(16, dataset.num_classes)

    def forward(self, data):
        x, edge_index = data.x, data.edge_index
        x = self.conv1(x, edge_index)
        x = F.relu(x)
        x = F.dropout(x, training=self.training)
        x = self.conv2(x, edge_index)
        return F.log_softmax(x, dim=1)

# 初始化模型、优化器和损失函数
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = GCN().to(device)
data = data.to(device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)

# 训练模型
def train():
    model.train()
    optimizer.zero_grad()
    out = model(data)
    loss = F.nll_loss(out[data.train_mask], data.y[data.train_mask])
    loss.backward()
    optimizer.step()

# 测试模型
def test():
    model.eval()
    _, pred = model(data).max(dim=1)
    correct = int(pred[data.test_mask].eq(data.y[data.test_mask]).sum().item())
    acc = correct / int(data.test_mask.sum())
    return acc, pred

# 训练和测试循环
for epoch in range(200):
    train()
    if epoch % 10 == 0:
        acc, _ = test()
        print(f'Epoch {epoch}: Test Accuracy: {acc:.4f}')

# 测试结果
acc, pred = test()
print(f'Final Test Accuracy: {acc:.4f}')

# 可视化结果
G = to_networkx(data, to_undirected=True)
plt.figure(figsize=(10, 10))
pos = nx.spring_layout(G, seed=42)
node_colors = [pred[i].item() for i in range(len(pred))]
nx.draw(G, pos, node_color=node_colors, node_size=50, cmap=plt.cm.rainbow, with_labels=False)
plt.show()

解释

  1. 数据加载:代码中使用 Planetoid 数据集作为示例,需要替换为实际的 Chameleon 数据集。
  2. 模型定义:使用两层 GCN 模型进行节点分类。
  3. 训练和测试:通过训练模型并在测试集上评估性能。
  4. 可视化:使用 networkxmatplotlib 将节点分类结果进行可视化。

结果

        通过以上步骤,您可以训练 GCN 模型并可视化分类结果,以便更好地理解模型的效果。

数据集来源

Chameleon 数据集的原始数据来源于威斯康星大学麦迪逊分校的网页,主要用于研究社交网络中的节点分类问题。该数据集常被用于测试图神经网络的性能,因为它包含复杂的图结构和丰富的节点特征。

Chameleon (48%/32%/20% fixed splits) Dataset | Papers With CodeNode classification on Chameleon with the fixed 48%/32%/20% splits provided by Geom-GCN.icon-default.png?t=N7T8https://paperswithcode.com/dataset/chameleon-48-32-20-fixed-splits https://github.com/radrumond/Chameleonicon-default.png?t=N7T8https://github.com/radrumond/Chameleon

使用场景

Chameleon 数据集主要用于以下研究场景:

  1. 节点分类:基于节点的特征和图结构,预测节点的类别标签。
  2. 图嵌入:将节点嵌入到低维向量空间中,以便在嵌入空间中进行分类、聚类等任务。
  3. 图神经网络模型评估:评估各种GNN模型的性能,如GCN(Graph Convolutional Network)、GAT(Graph Attention Network)等。

完结撒花

        行行行!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值