共计 2023 个字符,预计需要花费 6 分钟才能阅读完成。
1. 数据集背景
CHB-MIT 数据集是波士顿儿童医院收集的癫痫检测基准数据集,包含 22 名患者的长期头皮脑电记录(采样率 256Hz)。每个 EDF 文件包含 23 个电极通道信号(国际 10-20 系统布局),标注文件精确到秒级标记发作时段。该数据集特别适合研究:

- 发作间期与发作期脑电模式差异
- 不同发作类型的特征提取
- 早期预警系统开发
2. 数据获取
从 PhysioNet 获取数据的标准流程:
- 访问 PhysioNet 官网(https://physionet.org/)
- 搜索 ”CHB-MIT Scalp EEG Database”
- 下载包含 EDF 文件和标注的 ZIP 压缩包
典型目录结构示例:
/chb01/
├── chb01_01.edf
├── chb01_01.seizures
├── chb01_02.edf
└── summary.txt
3. 预处理流程
3.1 EDF 文件读取
使用 MNE-Python 库加载数据:
import mne
raw = mne.io.read_raw_edf('chb01_01.edf', preload=True)
raw.plot(duration=5, n_channels=10) # 可视化前 10 通道 5 秒数据
3.2 信号滤波
实施带通滤波(0.5-40Hz)和 50Hz 工频陷波:
# 带通滤波
raw.filter(0.5, 40., fir_design='firwin')
# 陷波滤波
raw.notch_filter(np.arange(50, 251, 50), fir_design='firwin')
3.3 伪迹去除
独立成分分析 (ICA) 去除眼电伪迹:
ica = mne.preprocessing.ICA(n_components=15)
ica.fit(raw)
ica.exclude = [0, 1] # 根据拓扑图选择异常成分
ica.apply(raw)
4. 特征工程
4.1 时域特征
计算滑动窗口统计量:
import numpy as np
def extract_time_features(signal, window_size=256):
return {'mean': np.mean(signal[-window_size:]),
'std': np.std(signal[-window_size:])
}
4.2 频域特征
使用 Welch 方法计算 PSD:
from scipy import signal
f, psd = signal.welch(raw.get_data(), fs=256, nperseg=512)
4.3 非线性特征
样本熵计算(需安装 entropy 库):
from entropy import sample_entropy
sampen = sample_entropy(signal, m=2, r=0.2*np.std(signal))
5. 模型构建
PyTorch 实现 1D-CNN 分类器:
import torch
import torch.nn as nn
class EEGNet(nn.Module):
def __init__(self, n_channels=23):
super().__init__()
self.conv1 = nn.Conv1d(n_channels, 16, kernel_size=64)
self.pool = nn.MaxPool1d(8)
self.fc = nn.Linear(16*24, 2) # 输出发作 / 非发作
def forward(self, x):
x = torch.relu(self.conv1(x))
x = self.pool(x)
return self.fc(x.flatten(1))
6. 避坑指南
6.1 数据对齐问题
- 使用
mne.concatenate_raws()合并多文件时注意时间戳连续性 - 标注文件的时间单位可能是秒或样本点,需统一转换
6.2 采样率处理
- 原始数据均为 256Hz,但某些设备导出可能不同
- 使用
raw.resample(256)强制统一采样率
6.3 类别不平衡
- 发作时段通常只占 1%-5%
- 推荐采用加权交叉熵损失:
criterion = nn.CrossEntropyLoss(weight=torch.tensor([0.1, 0.9]) # 根据样本比例调整 )
7. 延伸思考
本案例技术栈可迁移到:
– 睡眠分期(Sleep-EDF 数据集)
– 情绪识别(DEAP 数据集)
– 运动想象(BCI Competition 数据)
关键调整点:
1. 修改频带范围(如睡眠分析关注 0.5-30Hz)
2. 增加通道特异性处理(如运动想象侧重 C3/C4 通道)
3. 调整网络深度(复杂任务需要更深层特征提取)
实验设置复现
确保结果可重复:
import random
torch.manual_seed(42)
np.random.seed(42)
random.seed(42)
超参数建议值:
– 学习率:1e-3(Adam 优化器)
– 批量大小:32
– 训练轮次:50
通过本指南,您应该能够完整实现从原始脑电数据到分类模型的端到端流程。建议先从单个患者数据开始验证流程,再扩展到跨患者验证。
正文完
发表至: 未分类
近三天内
