【图神经网络基础】认识数据集--异质数据集Chameleon
Chameleon 数据集包含与网络社区相关的信息,每个节点表示一个网页,每条边表示两个网页之间的超链接。该数据集的主要任务是基于节点的特征和图结构对节点进行分类。
Chameleon 数据集是一个复杂的网络数据集,主要用于研究图神经网络(GNN)在节点分类任务中的性能。这个数据集来源于威斯康星大学麦迪逊分校的网络数据集,是一个包含节点(网页)和边(超链接)的网络。以下是对 Chameleon 数据集的详细介绍:
数据集概述
Chameleon 数据集包含与网络社区相关的信息,每个节点表示一个网页,每条边表示两个网页之间的超链接。该数据集的主要任务是基于节点的特征和图结构对节点进行分类。
数据集组成
- 节点:每个节点表示一个网页。
- 边:每条边表示两个网页之间的超链接。
- 特征:每个节点都有一个特征向量,通常是通过文本处理技术(如TF-IDF)提取的,用于表示网页的内容。
- 标签:每个节点有一个类别标签,表示该网页所属的主题类别。
数据集统计
- 节点数:2277
- 边数:36101
- 特征维度:2325
- 类别数:5
数据表示
- 邻接矩阵:表示图的结构,其中 A[i,j]=1 表示节点 i 和节点 j 之间有边,否则为 0。
- 特征矩阵:表示节点特征,其中每行对应一个节点的特征向量。
- 标签矩阵:表示每个节点的类别标签。
数据处理步骤
- 读取数据:从文件中读取特征矩阵、邻接矩阵和标签。
- 数据预处理:对特征进行标准化处理,确保数据适合模型训练。
- 划分数据集:将数据集划分为训练集、验证集和测试集。
示例代码
以下是如何使用 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()
解释
- 数据加载:代码中使用
Planetoid
数据集作为示例,需要替换为实际的 Chameleon 数据集。 - 模型定义:使用两层 GCN 模型进行节点分类。
- 训练和测试:通过训练模型并在测试集上评估性能。
- 可视化:使用
networkx
和matplotlib
将节点分类结果进行可视化。
结果
通过以上步骤,您可以训练 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.https://paperswithcode.com/dataset/chameleon-48-32-20-fixed-splits https://github.com/radrumond/Chameleonhttps://github.com/radrumond/Chameleon
使用场景
Chameleon 数据集主要用于以下研究场景:
- 节点分类:基于节点的特征和图结构,预测节点的类别标签。
- 图嵌入:将节点嵌入到低维向量空间中,以便在嵌入空间中进行分类、聚类等任务。
- 图神经网络模型评估:评估各种GNN模型的性能,如GCN(Graph Convolutional Network)、GAT(Graph Attention Network)等。
完结撒花
行行行!
更多推荐
所有评论(0)