4. CHB-MIT数据集深度解析
各位同学,今天我们来啃一块硬骨头——CHB-MIT数据集。这个数据集在癫痫检测领域,可以说是绕不开的标杆。我当年刚入行时,第一个接触的公开数据集就是它。说实话,第一次打开EDF文件时,我整个人是懵的。但啃下来之后,后面的路就好走多了。
4.1 数据集来源与伦理声明
CHB-MIT数据集,全称是Children's Hospital Boston-MIT EEG Database。它由波士顿儿童医院和MIT联合发布。说白了,就是医院提供数据,MIT负责整理和标注。
这个数据集收录了23位癫痫患者的EEG记录。嗯,这里要注意,是23位患者,不是22位也不是24位。我见过不少论文写错了这个数字,大家写文章时一定要核实。
伦理声明方面,数据集遵循了严格的医疗数据使用规范。所有患者信息都做了去标识化处理。你拿到的只有编号,比如chb01、chb02这样。患者姓名、具体病历等敏感信息,全部被移除了。
重要提示:使用该数据集发表论文时,必须在致谢或数据声明部分注明数据集来源。这是学术规范,也是尊重数据提供方的劳动成果。
4.2 受试者信息与发作类型标注
我们来看看这23位患者的基本情况。我整理了一个表格,方便大家查阅。
| 患者编号 | 性别 | 年龄 | 发作类型 | 记录时长(小时) |
|---|---|---|---|---|
| chb01 | 女 | 11 | 局灶性发作 | 40.5 |
| chb02 | 男 | 11 | 局灶性发作 | 35.2 |
| chb03 | 女 | 14 | 全面性发作 | 38.0 |
| ... | ... | ... | ... | ... |
年龄分布上,从1.5岁到22岁都有。大部分是儿童和青少年。发作类型主要分为两类:局灶性发作和全面性发作。标注文件里会明确给出每次发作的起止时间,精确到秒。
我个人习惯,拿到数据后第一件事就是看标注文件。你想想看,如果标注本身有问题,后面模型训练得再好也是白搭。我曾经在一个项目里,花了三天时间调模型,结果发现是标注文件里有一个时间戳写错了。从那以后,我每次都会先手动验证几个标注点。
4.3 EDF文件格式解析
EDF,全称European Data Format。这是欧洲标准化的生物信号存储格式。说白了,就是一种专门存生理信号的二进制文件格式。
EDF文件的结构分为两部分:
- 文件头:包含元数据信息,比如患者ID、记录日期、导联数量、采样率等
- 数据记录:实际的EEG信号数据,按时间顺序存储
文件头是固定长度的,通常是256字节。里面包含了8字节的版本号、80字节的患者信息、80字节的记录信息等。我刚开始解析时,被这些字节偏移量搞得头大。后来发现直接用MNE库就好了,没必要自己手写解析器。
小技巧:EDF文件支持不同导联使用不同的采样率。但CHB-MIT数据集统一使用了256Hz的采样率。这意味着每个通道每秒采集256个数据点。
4.4 使用MNE库读取与可视化EEG信号
MNE是Python生态里处理EEG数据的王牌库。我建议所有做脑电信号处理的同学,都把它装好。
读取EDF文件,只需要一行代码:
import mne
# 读取EDF文件
raw = mne.io.read_raw_edf('chb01_01.edf', preload=True)
# 查看基本信息
print(raw.info)
# 查看通道名称
print(raw.ch_names)
# 获取数据
data, times = raw[:, :]
可视化也很简单:
# 绘制原始信号
raw.plot(n_channels=10, duration=10, scalings='auto')
# 绘制功率谱密度
raw.plot_psd(fmin=0.5, fmax=50)
嗯,这里要注意。MNE默认会加载所有通道。但CHB-MIT数据集中,有些记录包含了非EEG通道,比如ECG、EOG等。我建议你只保留EEG通道,避免引入不必要的噪声。
避坑指南:我曾经在预处理时忘了去除ECG通道,结果模型把心跳信号当成了癫痫发作的前兆。这个错误让我浪费了整整一周。所以,一定要先检查通道列表,只保留你需要的。
4.5 数据集的划分策略
数据划分是模型评估的关键。在癫痫预测任务中,主要有两种划分策略。
患者内划分
简单说,就是同一个患者的数据,一部分用来训练,一部分用来测试。比如,把chb01的前70%记录作为训练集,后30%作为测试集。
这种策略的好处是,模型可以学习到该患者特有的脑电模式。缺点也很明显——换一个患者,模型可能就失效了。
患者间划分
这种策略更严格。用一部分患者的数据训练,用另一部分患者的数据测试。比如,用chb01到chb15的数据训练,用chb16到chb23的数据测试。
我个人更推荐患者间划分。为什么呢?因为这才是真正的泛化能力测试。你想想看,如果模型只能识别见过的人,那在实际临床中有什么用?
但患者间划分也有坑。不同患者的发作频率差异很大。有的患者一天发作好几次,有的患者一周才发作一次。如果不做平衡处理,模型可能会偏向于学习高频发作患者的特征。
我的建议:在实际项目中,两种策略都要做。先用患者内划分调参,再用患者间划分评估泛化能力。这样既能快速迭代,又能保证最终模型的可靠性。
最后,给大家画一张图,总结一下本章的核心知识体系。
好了,这一章的内容就到这里。记住,数据是深度学习的基础。把数据集吃透了,后面的模型构建才能事半功倍。