CHB-MIT数据集实战指南:从数据预处理到癫痫检测模型构建

1次阅读
没有评论

共计 2023 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

1. 数据集背景

CHB-MIT 数据集是波士顿儿童医院收集的癫痫检测基准数据集,包含 22 名患者的长期头皮脑电记录(采样率 256Hz)。每个 EDF 文件包含 23 个电极通道信号(国际 10-20 系统布局),标注文件精确到秒级标记发作时段。该数据集特别适合研究:

CHB-MIT 数据集实战指南:从数据预处理到癫痫检测模型构建

  • 发作间期与发作期脑电模式差异
  • 不同发作类型的特征提取
  • 早期预警系统开发

2. 数据获取

从 PhysioNet 获取数据的标准流程:

  1. 访问 PhysioNet 官网(https://physionet.org/)
  2. 搜索 ”CHB-MIT Scalp EEG Database”
  3. 下载包含 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

通过本指南,您应该能够完整实现从原始脑电数据到分类模型的端到端流程。建议先从单个患者数据开始验证流程,再扩展到跨患者验证。

正文完
 0
评论(没有评论)