代码文件内容
1、util.py
load_data 是 dataloader 类中的一个方法,用于加载和预处理神经影像数据。以下是该方法的详细解释:
功能概述
该方法主要用于从ABIDE数据集中加载被试者数据,包括:
被试者标识符(subject IDs)
诊断标签(DX_GROUP)
人口统计学信息(年龄和性别)
节点特征
主要步骤
获取被试者ID:
调用 get_ids() 函数获取所有被试者的SUB_ID
加载标签和人口统计信息:
使用 get_subject_score() 获取诊断组标签(DX_GROUP)
获取年龄(AGE_AT_SCAN)和性别(SEX)信息
数据预处理:
创建one-hot编码标签 y_onehot
构建数值型标签数组 y
提取年龄和性别信息到对应数组
特征提取:
调用 get_node_feature() 获取每个被试者的节点特征
表型数据处理:
将性别和年龄信息组合成表型数据 phonetic_data
存储到 pd_dict 字典中供后续使用
返回值
该方法返回四个值:
self.raw_features: 原始节点特征
self.y: 标签数组
phonetic_data: 包含性别和年龄的表型数据
phonetic_score: 存储表型信息的字典
这个方法是整个数据处理流程的起点,为后续的图构建和模型训练准备基础数据。
2、node.py
该文件将 fMRI 功能连接矩阵(.mat 文件)转换为图神经网络可用的格式,每个被试者表示为一个图,其中:
节点:脑区
边:脑区间的功能连接
边权重:连接强度(相关性值)
3、config.py
一个配置文件,用于存储项目中的各种参数和设置。
4、metrics.py
包含了用于评估模型性能的各种指标计算函数。
5、model.py && combinedmodel.py
用于脑网络分析的深度学习模型架构。
同时利用影像数据(如皮层厚度)和非影像数据(如年龄、性别等表型数据)
通过 SparseWeightMatrix.WeightMatrix 生成非影像特征关系矩阵
通过 ImageSimilarityMatrix 生成影像特征相似度矩阵
将两种关系矩阵融合后输入到增强的GCN模型中
6、SparseWeightMatrix.py
初始化非影像特征关系矩阵生成模块。
7、non_image_data.py
函数返回一个经过预处理的 pandas.DataFrame,其中包含:
标准化后的数值特征
独热编码后的分类特征
原始的诊断标签 DX_GROUP
这个预处理步骤为后续的机器学习模型提供了格式统一、数值合理的输入数据。
8、5-fold-train.py
用于训练脑网络分类模型的主程序,采用5折交叉验证的方式进行模型训练和评估。
1. 环境设置和数据加载
设置随机种子确保实验可重现
配置GPU环境
使用 dataloader 加载脑网络数据和表型数据
调用 non_image_data.get_non_image_data() 获取预处理的非影像数据
加载皮层厚度数据
2. 数据预处理
将原始特征重塑为适合模型输入的形状 (样本数, 节点数, 节点数)
将数据转换为PyTorch张量格式
准备非影像特征和厚度数据
3. 5折交叉验证训练
使用 KFold 将数据分为5份
每折训练一个模型实例
4. 模型定义和训练
使用 combinedmodel.CombinedBC_GCN_SE 作为主模型
应用权重初始化
使用SGD优化器进行训练
训练200个epoch
5. 训练过程
训练阶段:
批次处理训练数据
前向传播获得预测结果
计算损失函数(包含MLP损失项)
反向传播和参数更新
计算梯度重要性 fi
验证阶段:
在测试集上评估模型性能
计算准确率、敏感性、特异性、AUC等指标
保存最佳模型权重
6. 结果评估
记录每折的评估指标
计算5折交叉验证的平均性能和方差
输出最终的评估结果(准确率、敏感性、特异性、AUC、F1分数等)
net(inputs, thickness, non_image, labels) 的输入参数如下:
inputs: 脑网络数据,形状为 (batch_size, node, node),表示被试者的脑区功能连接矩阵
thickness: 皮层厚度数据,形状为 (batch_size, node),表示每个被试者的皮层厚度特征
non_image: 非影像数据(表型数据),形状为 (batch_size, input_dim),包含年龄、性别、智商等临床特征
labels: 真实标签,形状为 (batch_size,),用于监督学习和计算损失函数