Node Classification with Graph Neural Networks(使用GNN进行节点分类)


各种机器学习应用中的许多数据集在其实体之间具有结构关系,可以表示为图。 比如社交和通信网络分析、流量预测和欺诈检测等。 图表示学习旨在为用于各种 ML 任务的图数据集构建和训练模型。
example演示了 图神经网络 (GNN)模型的简单实现。 该模型在 Cora 数据集上进行节点预测任务,以根据其单词和引文网络预测论文主题。
我们从头开始实现图卷积层,以更好地理解它们的工作原理。 但是,有许多基于 TensorFlow 的专门库提供了丰富的 GNN API,例如 Spectral、StellarGraph 和 GraphNets。

Setup

import os
import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

准备数据集

使用Cora dataset,该数据集包括2708科学文章,并且分类为七类。citation network 有5429个links(链接)。每篇论文有一个大小为1433的二进制词向量,表示相对应的词。
该数据集有两个文件:cora.cites和cora.content

  • cora.cites包括两列(cited_paper_id(target)citing_paper_id(source)
  • cora.content包括1435列的paper content records:paper_id,subject和1433二进制特征

下载数据集:

zip_file = keras.utils.get_file(
    fname="cora.tgz",
    origin="https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz",
    extract=True,
)
data_dir = os.path.join(os.path.dirname(zip_file), "cora")

运行如下:
在这里插入图片描述

处理和可视化数据集

加载citations data 到Pandas DataFrame中。

citations = pd.read_csv(
    os.path.join(data_dir, "cora.cites"),
    sep="\t",
    header=None,
    names=["target", "source"],
)
# print("Citations shape:", citations.shape) #(5429,2)

Display a sample of the citations DataFrame. The target 列包括paper ids cited by the paper ids 在source列。

citations.sample(frac=1).head()

在这里插入图片描述
然后加载paper data到Pandas DataFrame。

column_names = ["paper_id"] + [f"term_{
     
     idx}" for idx in range(1433)] + ["subject"]
papers = pd.read_csv(
    os.path.join(data_dir, "cora.content"), sep="\t", header=None, names=column_names,
)
print("Papers shape:", papers.shape) # (2708, 1435)

Display a sample of papers DataFrame. 该数据框包括paper_idsubject列以及1433二进制列表示在paper中是否存在一个term.

print(papers.sample(5).T)

在这里插入图片描述
然后,展示每一个subject中paper的数量

print(papers.subject.value_counts())

在这里插入图片描述
然后,转换paper ids和subjects到zero-based indices.

class_values = sorted(papers["subject"].unique())
class_idx = {
   
   name: id for id, name in enumerate(class_values)}
paper_idx = {
   
   name: idx for idx, name in enumerate(sorted(papers["paper_id"].unique()))}

papers["paper_id"] = papers["paper_id"].apply(lambda name: paper_idx[name])
citations["source"] = citations["source"].apply(lambda name: paper_idx[name])
citations["target"] = citations["target"].apply(lambda name: paper_idx[name])
papers["subject"] = papers["subject"].apply(lambda value: class_idx[value])

接着,可视化citation graph,图中的每个节点代表一篇paper,节点的颜色对应它的subject,下面展示的是数据集当中的一个sample。

plt.figure(figsize=(10, 10))
colors = papers["subject"].tolist()
cora_graph = nx.from_pandas_edgelist(citations.sample(n=1500))
subjects = list(papers[papers["paper_id"].isin(list(cora_graph.nodes))]["subject"])
nx.draw_spring(cora_graph, node_size=15, node_color=subjects)

在这里插入图片描述

拆分数据集为分层训练集和测试集
train_data, test_data = [], []

for _, group_data in papers.groupby("subject"):
    # Select around 50% of the dataset for training.
    random_selection = np.random.rand(len(group_data.index)) <= 0.5
    train_data.append(group_data[random_selection])
    test_data.append(group_data[~random_selection])

train_data = pd.concat(train_data).sample(frac=1)
test_data = pd.concat
### 使用图神经网络增强遗传算法以实现社交网络中的多跳影响力最大化 #### 图神经网络在社交网络分析中的应用 图神经网络(GNNs)能够有效捕捉节点之间的复杂关系,在处理具有高度连接性的数据结构方面表现出色。对于社交网络传播模型而言,通过学习节点特征表示可以更好地理解个体间的互动模式以及信息扩散路径[^1]。 #### 遗传算法优化过程概述 遗传算法是一种基于自然选择原理设计出来的全局搜索方法,适用于解决组合优化问题。其核心在于模拟生物进化过程中基因传递机制来寻找最优解集。当应用于社交网络环境下的影响范围扩大化场景时,则需考虑如何定义适应度函数以便评估候选种子集合的好坏程度。 #### 结合两者优势的方法论探讨 为了提升传统GA求解效率并改善最终结果质量,可引入GNN作为辅助工具参与整个计算流程: - **初始化种群阶段**:利用预训练好的GNN模型预测各节点成为活跃传播者的潜在可能性得分;依据此概率分布随机采样生成初始染色体; - **交叉变异操作期间**:借助于已构建的社会关系子图谱指导新个体创造方向——即优先保留那些高影响力的局部区域内的成员构成下一代样本空间; - **评价体系重构环节**:除了常规考量被激活用户的数量外,还应加入由GNN推断得出的预期后续波及效应因子共同决定单条记录对应的适配值大小。 ```python import torch from torch_geometric.nn import GCNConv import numpy as np class GNNEnhancedGeneticAlgorithm(): def __init__(self, data, population_size=100, generations=50): self.data = data self.population_size = population_size self.generations = generations # Initialize the GNN model for node importance prediction num_features = data.num_node_features hidden_channels = 16 self.model = GCNModel(num_features, hidden_channels) def initialize_population(self): predictions = self.predict_importance_scores() initial_population = [] while len(initial_population) < self.population_size: chromosome = select_nodes_based_on_probabilities(predictions) if validate_chromosome(chromosome): # Ensure no duplicates or invalid selections initial_population.append(chromosome) return initial_population def predict_importance_scores(self): with torch.no_grad(): out = self.model(self.data.x, self.data.edge_index).softmax(dim=-1) scores = out[:, 1].cpu().numpy() # Assuming binary classification where class '1' indicates higher influence normalized_scores = (scores - min(scores)) / (max(scores) - min(scores)) return normalized_scores def main(): dataset = load_social_network_data() ga_instance = GNNEnhancedGeneticAlgorithm(dataset) best_solution = run_genetic_algorithm(ga_instance) evaluate_and_report_results(best_solution) if __name__ == "__main__": main() ``` 上述代码片段展示了如何创建一个融合了GCN特性的改进版遗传算法框架用于探索最佳的影响者群体配置方案。值得注意的是实际应用场景可能涉及更多细节调整和技术选型工作,这里仅提供了一个简化版本供参考[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值