从数据到诊断:实战构建开源EEG癫痫检测模型
作为一名长期在医疗AI领域摸爬滚打的工程师,我常常被问到:“那些前沿的癫痫检测论文,代码到底怎么跑起来?” 理论框架固然重要,但真正的价值往往藏在数据清洗的细节里、特征提取的取舍中,以及模型调试时那些令人抓狂的报错信息背后。今天,我们不谈空泛的概念,直接打开Jupyter Notebook,手把手带你用三个经典的开源EEG数据集——TUH、CHB-MIT和Bonn,搭建一个端到端的癫痫检测原型。我会分享那些在官方教程里找不到的“坑”和技巧,并提供可以直接在Google Colab上运行的完整代码块,让你能立刻动手实践。
1. 环境准备与数据获取实战
在开始任何机器学习项目之前,搭建一个可复现的环境是成功的一半。对于EEG信号处理,我们需要一个兼顾科学计算和深度学习的工具箱。
首先,我们创建一个独立的Conda环境,避免包版本冲突。打开终端,执行以下命令:
conda create -n eeg_epilepsy python=3.9 -y
conda activate eeg_epilepsy
接下来,安装核心依赖。这里我推荐使用 pip 进行安装,并指定一些经过验证的稳定版本。
pip install mne==1.4.2
pip install numpy==1.23.5 scipy==1.10.1 pandas==1.5.3
pip install scikit-learn==1.2.2
pip install torch==2.0.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install matplotlib==3.7.1 seaborn==0.12.2
pip install pywt==1.4.1
注意:PyTorch的安装命令取决于你的CUDA版本。如果没有GPU,请使用
pip install torch torchvision torchaudio安装CPU版本。MNE是EEG处理的基石库,务必确保安装成功。
环境就绪后,我们直面第一个挑战:获取数据。三个数据集的获取方式各异,有的需要注册,有的分散在多个文件中。我编写了一个自动化的下载和验证脚本,可以帮你省去大量手动操作的麻烦。
TUH EEG Corpus:这是最大的临床EEG数据集之一。访问其官网注册后,你会获得一个数据清单文件。不要试图一次性下载全部数据(体积巨大),建议根据研究目标选择子集,例如只下载标注了“癫痫发作”的记录。
CHB-MIT Scalp EEG Dataset:该数据集托管在PhysioNet上,可以通过wget命令批量下载。每个患者一个文件夹,里面包含连续的EDF文件和对应的摘要文件(.seizures)。
University of Bonn EEG Dataset:结构最简单,五个ZIP文件分别对应A-E五个子集。下载后直接解压即可。
为了统一管理,我习惯在项目根目录创建如下结构:
eeg_project/
├── data/
│ ├── tuh/ # 存放TUH的EDF文件
│ ├── chbmit/ # 存放CHB-MIT的患者文件夹
│ └── bonn/ # 存放Bonn的文本文件
├── notebooks/ # Jupyter Notebooks
└── src/ # 工具函数模块
下面这个Python函数可以用于检查Bonn数据集是否完整下载并正确解析:
import os
import numpy as np
def check_bonn_dataset(data_path):
"""
检查Bonn数据集完整性并加载数据。
"""
subsets = ['A', 'B', 'C', 'D', 'E']
data_dict = {}
for subset in subsets:
file_path = os.path.join(data_path, f'{subset}.txt')
if not os.path.exists(file_path):
print(f"警告: 文件 {file_path} 不存在!")
continue
# Bonn数据集是纯文本,每行一个数据点
data = np.loadtxt(file_path)
data_dict[subset] = data
print(f"子集 {subset} 加载成功,形状: {data.shape}")
return data_dict
2. 数据预处理:从原始信号到干净片段
拿到原始EEG数据只是万里长征第一步。临床EEG记录充满了各种噪声和伪影,直接喂给模型无异于让它在垃圾堆里找金子。预处理的目标是提取出干净的、标准化的神经电生理信号。
核心预处理流程包括:
- 读取与解析:使用MNE库读取EDF等格式。
- 滤波去噪:应用带通滤波器(如0.5-40 Hz)去除高频肌电和低频漂移。

7354

被折叠的 条评论
为什么被折叠?



