信息速览

You Snooze You Win(CinC 2018 睡眠觉醒)— PSG 微觉醒检测 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | 睡眠觉醒 CinC 2018 |
| 英文全称 | You Snooze You Win: The PhysioNet/Computing in Cardiology Challenge 2018 |
| 别名/简称 | CinC 2018、PhysioNet Challenge 2018、MGH Sleep Arousal |
| 疾病分类 | 睡眠-觉醒障碍(ICD-11 7A00-7A0Z);主要为阻塞性睡眠呼吸暂停 7A41 |
| SNOMED CT | 睡眠呼吸暂停 78275009;睡眠觉醒障碍 60380001 |
| 数据模态 | 睡眠 PSG(脑电 + 眼电 + 肌电 + 心电 + 血氧 + 呼吸努力 + 气流) |
| AI 任务类型 | 时序事件检测(逐样本二分类)、睡眠分期、多变量信号分类 |
| 样本总数 | 1,983 例整夜 PSG(训练 994 + 测试 989) |
| 数据大小 | 266.6 GB(未压缩);ZIP 下载 45.8 MB |
| 数据格式 | WFDB(MAT V4 信号 + .hea 头文件 + .arousal 标注 + −arousal.mat) |
| 许可证 | Open Data Commons Attribution License v1.0(ODC-BY 1.0) |
| 访问级别 | 开放 |
| DUO 标签 | NRES(无限制)、PUB(须公开发表) |
| 语言 | 英文(标注术语) |
| 首发日期 | 2018-02-21 |
| 最后更新 | 2019-04-17 |
| 发布机构 | PhysioNet / Computing in Cardiology(数据由 MGH 睡眠实验室贡献) |
| 官方主页 | https://physionet.org/content/challenge-2018/1.0.0/ |
| 下载地址 | https://physionet.org/content/challenge-2018/1.0.0/ |
| DOI | 10.13026/6phb-r450(v1.0.0);10.22489/CinC.2018.049(论文) |
| 引用次数 | 189+(ResearchGate,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方划分与标注完备、评分脚本开源,但需自行处理 WFDB/MAT 格式转换与 gross AUPRC 实现 |
| 页面状态 | published |
§0 E-E-A-T 与审核声明
医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(睡眠-觉醒障碍的 ICD-11/SNOMED CT 映射与流行病学)、§7 偏倚分析。审核确认本页面描述的觉醒定义与 AASM 评分标准一致,并已区分 Challenge 特有的目标觉醒窗口与临床常规觉醒判读。
数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。审核确认 §6 代码在 wfdb、scipy、numpy 标准环境下可运行,且坑点均来自该数据集真实特有的失败模式。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失负责。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CinC 2018 采用 Open Data Commons Attribution License v1.0(ODC-BY 1.0),任何人可自由访问、再分发与再利用,但必须保留署名。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? 1,983 位疑似睡眠障碍患者在美国马萨诸塞州总医院(MGH)睡了一整晚,全身电极记录下脑电、眼动、肌肉张力、心电、血氧、呼吸气流等 13 路信号,每秒钟 200 个点。7 位持证睡眠技师逐段判读波形,标出患者夜里每次"睡梦中突然惊醒一下"的时刻——即睡眠觉醒(arousal)。994 位患者的标注向全世界公开,另外 989 位被锁进保险箱,作为 2018 年一场国际算法竞赛的考卷。
为什么重要? 觉醒是睡眠质量的隐形杀手:正常人一夜醒来几十到上百次,每次仅数秒且本人无感,但睡眠被反复切断会导致白天嗜睡、注意力下降,并和高血压、肥胖、抑郁相关。难点在于一次整夜监测产生几百万个数据点,技师需 2 至 4 小时逐屏标注,成本极高且判读不完全一致。它更是少数同时提供多通道信号与逐样本标签的睡眠数据集——多数睡眠数据集只给 30 秒一段的分期标签,而它把标注精确到每个采样点。
我能用它做什么? 最直接的是训练觉醒检测模型,并把 gross AUPRC 与 2018 年 22 支参赛队伍对比——官方冠军 0.54,非官方最高 0.55,均值仅 0.28,说明这仍是开放难题。也可顺带做睡眠分期(同一标注含 W/N1/N2/N3/REM 五阶段)、呼吸事件检测,或作为预训练语料迁移到其他睡眠数据集。数据免费开放,无需任何申请审批。
§1.1 摘要
You Snooze You Win(“你打个盹就赢了”)是 PhysioNet 与 Computing in Cardiology(CinC)联合主办的 2018 年挑战赛主题,聚焦非呼吸暂停性睡眠觉醒的自动检测 Ghassemi et al., 2018, CinC, DOI 10.22489/CinC.2018.049。数据集由 MGH 睡眠实验室在睡眠科、临床神经生理计算实验室与临床数据动画中心的协作下提供,共 1,983 例整夜多导睡眠图(PSG) 记录;论文明确标注"1,983 PSG recordings",而挑战概览页以"1,985 subjects"口径描述同一批数据,两者相差 2 例,属于subjects与recordings的计数口径差异(详见 FACTS.md 纠错节)。
数据划分为公开训练集 994 例(含专家标注)与隐藏测试集 989 例(仅释放信号,标签永久保密以支持后续研究)。划分按呼吸暂停低通气指数(AHI)做分层以保证两集分布一致,Kolmogorov-Smirnov 检验 p = 0.97,且训练与测试无任何重复受试者。每例记录 13 路信号:6 路 EEG(国际 10/20 系统 F3-M2、F4-M1、C3-M2、C4-M1、O1-M2、O2-M1)、1 路 EOG(E1-M2)、1 路颏下 EMG(Chin1-Chin2)、1 路 ECG、1 路 SaO2、1 路口鼻气流(AIRFLOW)、2 路胸腹呼吸努力(CHEST、ABD),全部重采样至 200 Hz,除 SaO2 外单位为微伏。
标注由 7 位认证睡眠技师完成,每人独立负责一部分记录(每份 PSG 仅由一人判读),睡眠分期按 AASM 标准以 30 秒连续 epoch 划为 W/REM/N1/N2/N3,觉醒事件细分为 13 类(自发性、RERA、磨牙、低通气、低通气呼吸、中枢/阻塞/混合型呼吸暂停、发声、打鼾、周期性腿动、潮式呼吸、部分气道阻塞)。挑战引入"目标觉醒"的操作性定义:RERA 开始前 2 秒至结束后 10 秒,或非 RERA 非呼吸暂停觉醒开始前 2 秒至结束后 2 秒;受试者醒来或发生呼吸暂停/低通气觉醒前后 10 秒内划为不计分区。评测指标为 gross AUPRC(精确率-召回率曲线下面积,在整库层面计算而非逐记录平均)。22 支独立队伍参赛,最终 19 个条目进入正式评分,冠军 AUPRC = 0.54,非官方最高 0.55,全部条目均值 0.28。
§1.2 战略价值
维度一:逐样本时间分辨标注填补了睡眠数据集的标注粒度空白。 睡眠研究领域长期存在"标注粒度困境":SHHS、MESA、Sleep-EDF 等经典队列提供的是 30 秒 epoch 级的睡眠分期标签,而觉醒这类事件本身只持续 3 至 15 秒,天然落在单一 epoch 内部或被 epoch 边界切分。CinC 2018 用逐采样点(200 Hz)的三值向量解决了这个问题,把标签的时间分辨率提升了 6,000 倍。这带来两类新任务:一是真正的点级事件检测(event detection)而非段级分类(segment classification);二是可以严谨地研究觉醒前后的信号动态,例如心率变异性与皮层唤醒的因果时序。对任何需要精确定位生理事件、而非仅仅标注"这一段属于哪一类"的研究,该数据集都是难得的范本。
维度二:多通道、多模态、跨来源信号为表征学习提供天然测试床。 13 路信号覆盖了神经电生理(EEG)、眼动(EOG)、骨骼肌(EMG)、心血管(ECG)、呼吸力学(胸腹努力、气流)与气体交换(SaO2)六个生理子系统,所有通道严格时间同步且采样率归一。这使得同一份数据可以同时支撑:多模态融合策略的消融研究(加 EEG 提升多少?只用 ECG 能到什么程度?)、通道缺失场景下模型的鲁棒性评估、以及自监督预训练(掩码重建、对比学习)的表征质量检验。2018 年挑战赛的数据表明,冠军队与大量失败队伍之间的差距,很大程度上来自"如何让模型同时利用 EEG 的快速动态与呼吸信号的慢变趋势",这个多尺度对齐问题至今仍是时序表征学习的前沿议题。
维度三:开放许可与长尾生态使结果可复现、可比较。 数据集采用 ODC-BY 1.0,无需签署数据使用协议即可下载全部 266.6 GB 原始信号,评分脚本随数据一同开源,使 2018 年之后的工作可以在同一把尺子上量出真实增益。Braindecode 在 Zenodo 发布了标准化元信息包,EEGDash 以 nm000225 提供流式镜像,torch_ecg 内置 CINC2018 数据库类,SleePyCo 提供预处理脚本——一个数据集能被四个独立生态同时适配,通常意味着它已从"比赛数据"进化为"基础设施"。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注粒度 | 差异化特征 |
|---|---|---|---|---|
| CinC 2018(本词条) | 1,983 例整夜 PSG | 13 路 PSG(EEG/EOG/EMG/ECG/SaO2/呼吸) | 200 Hz 逐采样点 + 30 秒分期 | 唯一大规模提供逐样本觉醒三值标签;13 类事件枚举;标签永久隐藏测试集 |
| SHHS(Sleep Heart Health Study) | 约 6,400 例 | 全套 PSG | 30 秒 epoch 分期 + 事件级标注 | 社区队列而非临床转诊,心血管结局随访完整 |
| MESA Sleep | 约 2,000 例 | 全套 PSG | 30 秒 epoch 分期 | 多族裔队列,附带亚临床动脉粥样硬化影像 |
| Sleep-EDF Expanded | 197 例 | EEG/EOG/EMG(部分含事件记录) | 30 秒 epoch 分期 | 体量最小、最易上手,常作教学基线 |
| MASS / ISRUC-Sleep | 200 / 126 例 | 简化至全套 PSG | 30 秒 epoch 分期 | 健康与多种睡眠障碍并存的异质队列 |
| CAP Sleep Database | 108 例 | 简化 PSG | 30 秒分期 + 周期交替模式 | 唯一提供 CAP(周期性交替模式)相位标注 |
关键差异在于:上述数据集均以 30 秒 epoch 为最小标注单位,而 CinC 2018 的标签精确到采样点,且把"哪些区域不参与评分"显式编码为 −1。这使它更适合评估事件级检测指标(逐点 AUPRC、事件级 F1),传统数据集只能评估段级分类指标(epoch 准确率、Cohen’s kappa);代价是不提供随访结局、不含健康对照,且标签仅覆盖训练集一半。
§1.4 版本时间轴
| 日期 | 事件 | 说明 |
|---|---|---|
| 2018-02-20 | RECORDS 与标注文件定稿 |
记录清单 52.3 KB,标注初版冻结 |
| 2018-02-21 | PhysioNet 发布 v1.0.0 挑战数据 | 训练集与测试集同步开放,挑战赛启动 |
| 2018-03-26 | 发布 age-sex.csv |
人口学元数据(29.1 KB)补充开放 |
| 2018-04-07 | 提交系统与评分函数上线 | 示例条目、score 脚本开放 |
| 2018-04-13 / 04-23 | 非官方阶段截止(顶尖分 0.439)/ 官方阶段开始 | 每队官方阶段最多 2 个条目 |
| 2018-05-07 | 更新觉醒标注文件并发布 Matlab 评分 | 标注与评分口径对齐 |
| 2018-09-01 | 条目提交关闭 | 队伍选定最终条目 |
| 2018-09-26 | CinC 2018 会议公布获奖者 | 于会议闭幕式颁奖 |
| 2018-10-10 | 正式成绩与挑战论文发布 | 冠军 0.54 |
| 2019-04-17 | v1.0.0 最终整理 | 发布 new-arousals.zip、results.csv、challenge2018cinc.pdf |
| 2021-04-12 | 校验与哈希更新 | 发布 SHA256SUMS.txt(580.3 KB) |
§1.5 典型应用场景
场景一:觉醒检测算法基准测试。 最核心的用途。研究者可在 994 例训练集上训练、在 989 例测试集上评估(需依据官方评分脚本复现),并把 gross AUPRC 与论文 Table 3 的 19 个官方条目逐行对比。由于测试标签永久隐藏,社区常见替代做法是在训练集内部做交叉验证,或使用官方 results.csv 中记录的条目分数作为公开参照。
场景二:睡眠分期与觉醒的联合建模。 同一份 -arousal.mat 里同时含逐样本觉醒标记与睡眠阶段序列,可训练多任务模型,让分期任务为觉醒检测提供上下文先验(觉醒在 N2 期更易发生,在 REM 期定义不同),常见收益是减少睡眠-觉醒边界处的假阳性。
场景三:跨数据集迁移与预训练。 266.6 GB 原始信号足以支撑自监督预训练。社区实践是从本数据集中学习通用睡眠信号表征,再迁移到 SHHS、MESA、Sleep-EDF 等仅有段级标签的数据集上微调;EEGDash 的 nm000225 编号使这类实验的加载流程标准化。
场景四:呼吸事件与觉醒的时序关联分析。 非目标事件计数极为丰富(低通气 56,936、阻塞型呼吸暂停 32,547、中枢型 22,763、混合型 2,641),这为研究"呼吸事件后多久出现皮层觉醒""觉醒幅度与呼吸事件严重度的关系"提供了统计功效充足的样本。
场景五:多通道融合与通道消融研究。 13 路严格同步信号天然适合做模态贡献消融(只用 EEG 到什么水平?加 EMG 提升多少?单导联 ECG 退化程度?),结果可直接指导低成本可穿戴设备(往往只有单通道 EEG 或 PPG)的算法设计。
§2 医学背景
§2.1 ICD-11 与 SNOMED CT 编码映射
| 标签/概念 | ICD-11 编码 | SNOMED CT 编码 | 术语 |
|---|---|---|---|
| 核心疾病 | 7A41 | 78275009 | 阻塞性睡眠呼吸暂停(Obstructive sleep apnoea) |
| 数据主题 | 7A00-7A0Z | 60380001 | 睡眠-觉醒障碍(Sleep-wake disorders) |
| 相关表型 | 7A42 | 27405005 | 中枢性睡眠呼吸暂停(Central sleep apnoea) |
| 检查手段 | — | 79284008 | 多导睡眠图检查(Polysomnography) |
| 生理现象 | — | 24822000 | 睡眠觉醒(Sleep arousal) |
| 分期概念 | — | 24823005 / 24824004 | 快速眼动 / 非快速眼动睡眠(REM / NREM sleep) |
§2.1b SNOMED CT 映射补充说明
上表的 SNOMED CT 编码用于跨系统语义互操作,需要三点说明。第一,"睡眠觉醒"作为生理现象(24822000)与"睡眠-觉醒障碍"作为疾病实体(60380001)是两个不同层级的本体概念,数据集的标签属于前者,不要误映射为后者。第二,阻塞性睡眠呼吸暂停在本数据集中并非直接标签,而是纳入人群的背景诊断——受试者因疑似睡眠障碍转诊,但数据集的检出目标是觉醒而非呼吸暂停本身。第三,多导睡眠图检查(79284008)描述的是采集过程,可用于标注数据来源的医学操作,但不构成疾病标签。当把本数据集接入基于 FHIR 或 OMOP 的临床数据管道时,建议仅将 78275009 与 79284008 作为资源级元数据,避免在病例级映射中产生语义污染。
§2.2 疾病与临床背景
睡眠觉醒的生理定义。 觉醒(arousal)指睡眠过程中短暂插入的皮层清醒状态,之后睡眠立刻恢复,由美国睡眠医学会(AASM)定义为持续 3 秒以上的脑电频率突然加速(含 alpha、theta 或大于 16 Hz 频率成分)并伴有其他通道的同步变化。它与"醒来"(awakening)不同:觉醒通常只有 3 至 15 秒,本人无主观记忆;醒来则进入持续的 W 期,患者可能完全清醒。正常成人一夜发生数十次自发性觉醒属生理现象,当觉醒频率过高导致睡眠片段化才构成病理状态。
睡眠片段化的后果。 论文引言梳理了这一因果链:睡眠质量差与认知与运动功能受损、易怒、肥胖、抑郁及生活质量下降相关;睡眠片段化导致日间嗜睡、认知表现下降,并削弱睡眠的恢复功能。反过来,觉醒常是病理事件的结果而非原因:阻塞性睡眠呼吸暂停与低通气是首要诱因,RERA 及不足以构成呼吸暂停/低通气的轻微气道梗阻同样触发觉醒,此外磨牙、周期性腿动、疼痛、失眠乃至打鼾都可致觉醒。
流行病学背景。 论文 Table 1 给出该队列的完整临床画像:1,983 例受试者平均年龄 55 岁(标准差 14.4,范围 18-93),男性占 65%,平均 BMI 33(标准差 7.6,属肥胖区间),平均 AHI 19(标准差 14.4,属中度睡眠呼吸暂停),平均 Epworth 嗜睡评分 8.6(标准差 5.3)。合并症方面高血压 40.9%、助眠药 28.3%、抗抑郁药 26.1%、神经活性药 19.1%、苯二氮䓬类 16.1%、糖尿病 11.7%;就诊原因中诊断性检查 41.8%、分夜 CPAP 滴定 38.35%、整夜 CPAP 19.85%。这一分布说明该数据集反映的是中老年、超重、以呼吸暂停为主诉的临床转诊人群,而非一般人群。
§2.3 临床任务定义
| 任务类型 | 本数据集中的对应形式 | 临床意义 | 标签来源 |
|---|---|---|---|
| 筛查(Screening) | 从 PSG 快速标出可疑觉醒密集时段 | 辅助技师优先复核高风险区段 | 逐样本三值向量(+1/0/−1) |
| 检测(Detection) | 逐采样点判断该点是否落在目标觉醒区内 | 自动生成觉醒指数(ArI)的基础 | 目标觉醒窗口定义 |
| 分级(Staging) | 30 秒 epoch 划为 W/N1/N2/N3/REM | 计算睡眠结构与睡眠效率 | -arousal.mat 中的分期序列 |
| 事件归因(Attribution) | 区分自发性、RERA、PLM、打鼾等 13 类觉醒 | 指向不同的临床干预路径 | trXX-XXXX.arousal 事件标注 |
需要强调,本数据集的任务定义是二分类点级检测(目标觉醒 vs 非觉醒),而非 13 类多分类。13 类事件枚举仅存在于 .arousal 事件文件中,其中仅 RERA 与非呼吸暂停类事件参与目标觉醒构造,呼吸暂停与低通气类事件反而被划入不计分区。
§2.4 患者人群特征
| 特征 | 全体(n = 1,983) | 训练集(n = 994) | 测试集(n = 989) |
|---|---|---|---|
| 样本量 | 1,983 | 994 | 989 |
| 年龄(均值 ± 标准差) | 55 ± 14.4 | 55 ± 14.3 | 55 ± 14.4 |
| 男性占比(%) | 65 | 67 | 63 |
| BMI(均值 ± 标准差) | 33 ± 7.6 | 33 ± 7.8 | 33 ± 7.5 |
| AHI(均值 ± 标准差) | 19 ± 14.4 | 19 ± 14.6 | 18.9 ± 14.4 |
| Epworth 嗜睡评分(均值 ± 标准差) | 8.6 ± 5.3 | 8.5 ± 5.3 | 8.7 ± 5.3 |
| 记录 / 卧床 / 睡眠时长(小时,均值 ± 标准差) | 7.7 ± 0.7 / 7.5 ± 0.7 / 6.2 ± 1.2 | 7.7 ± 0.7 / 7.5 ± 0.7 / 6.2 ± 1.1 | 7.7 ± 0.7 / 7.5 ± 0.7 / 6.1 ± 1.2 |
| 高血压(%) | 40.9 | 41.0 | 40.6 |
| 使用助眠药 / 抗抑郁药(%) | 28.3 / 26.1 | 29.0 / 25.7 | 27.8 / 26.5 |
| 使用神经活性药物 / 苯二氮䓬类(%) | 19.1 / 16.1 | 20.8 / 16.9 | 17.5 / 15.4 |
| 糖尿病 / 阿片类(%) | 11.7 / 7.4 | 11.9 / 8.1 | 11.5 / 6.7 |
| 就诊类型:诊断性 / 分夜 CPAP / 整夜 CPAP(%) | 41.8 / 38.35 / 19.85 | 41.16 / 37.95 / 20.88 | 42.47 / 39.03 / 18.5 |
| 数据来源 | MGH 睡眠实验室(回顾性) | 同左 | 同左 |
| 时间范围 / 种族族裔 | 官方未披露 | — | — |
§2.5 临床价值
量化觉醒负荷。 觉醒指数(Arousal Index,每小时觉醒次数)是评估睡眠片段化的关键参数,与白天嗜睡、认知下降、心血管风险相关,但传统上依赖技师人工判读,耗时且存在判读者间差异。本数据集提供大规模、逐样本的觉醒金标准,使自动化觉醒指数计算的误差可被严格量化,这是把它推向临床流程的前提。
揭示呼吸事件之外的觉醒来源。 本挑战聚焦"非呼吸暂停性觉醒"。临床上部分患者 AHI 正常却主诉严重嗜睡,病因常是 RERA、周期性腿动或自发性觉醒。数据集把 RERA 单列为独立类别(训练集 43,822 次),使研究者能专门建模这类"亚临床"气道梗阻引起的觉醒,填补 AHI 指标覆盖不到的诊断盲区。
为可穿戴与家庭监测铺路。 临床 PSG 有 13 路信号,消费级设备通常只有单通道 EEG、PPG 或体动信号。本数据集可用于系统的通道消融研究,量化"降级到哪几路信号后性能仍可接受",给出家庭场景设备设计的下界要求。这类结论在小数据上不可靠,有了 1,983 例的规模才具备外推价值。
§2.6 金标准生成方式
| 维度 | 内容 |
|---|---|
| 划分方式 | 按 AHI 分层划分,训练 994 / 测试 989;KS 检验 p = 0.97;无重复受试者 |
| 标注方式 | 人工判读,7 位认证睡眠技师,每份 PSG 仅由一名评分员标注 |
| 标注者资质 | MGH 持证睡眠技师(certified sleep technologists),遵循 AASM 判读手册 |
| 标注粒度 | 睡眠分期:30 秒非重叠 epoch;觉醒:事件级起止时刻 + 逐采样点三值向量(200 Hz) |
| 标注内容 | 13 类觉醒事件 + 5 类睡眠分期(W/REM/N1/N2/N3) |
| 标注性质 | 单评分员制(非多评分员共识),无公开的评分者间一致性系数 |
| 标签可靠性 | 挑战赛后发布 new-arousals.zip(26.8 MB)更新版标注,覆盖初版 |
| 金标准局限 | 测试集 989 例标签永不公开;单评分员制意味着标签含个体判读偏好 |
| 质量保障 | 采集遵循 AASM 标准;Partners IRB 批准回顾性分析 |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 训练觉醒检测模型(首选) | v1.0.0 训练集 + new-arousals.zip 更新标注 |
约 135 GB + 26.8 MB | 只有训练集含标注;更新版标注修正了初版问题,应优先使用 |
| 快速原型验证 / 教学演示 | 单受试者子目录(如 training/tr04-0695/) |
约 130 MB / 例 | 一例 .mat 约 129.6 MB,足以跑通完整读取-训练-评分链路 |
| 睡眠分期任务 | v1.0.0 训练集 -arousal.mat |
约 135 GB | 分期序列与觉醒向量在同一文件中,无需额外下载 |
| 复现官方评分 | score2018.py + 自有预测结果 |
8.0 KB | 官方评分脚本是 gross AUPRC 的权威实现,勿自行改写 |
| 元数据 / 队列研究 | age-sex.csv + 论文 Table 1/2 |
29.1 KB | 仅含年龄与性别;BMI、AHI、ESS 等需查论文汇总表 |
| 云端流式加载(省存储) | EEGDash 镜像 nm000225 | 401.1 GB(服务端) | 通过 EEGDashDataset 按需拉取单例,避免下载全库 |
| 仅需模型与结果对比 | 论文 Table 3 + results.csv |
1.6 KB | 19 个官方条目的最终 AUPRC,做文献对标用 |
§3.1 模态详情
| 序号 | 信号名 | 模态类别 | 单位 | 采样率 | 通道说明 |
|---|---|---|---|---|---|
| 1 | F3-M2 | EEG(脑电图) | µV | 200 Hz | 左额区,国际 10/20 系统 |
| 2–6 | F4-M1 / C3-M2 / C4-M1 / O1-M2 / O2-M1 | EEG | µV | 200 Hz | 右额 / 左中央 / 右中央 / 左枕 / 右枕区 |
| 7 | E1-M2 | EOG(眼电图) | µV | 200 Hz | 左眼,对侧耳垂参考 |
| 8 | Chin1-Chin2 | EMG(肌电图) | µV | 200 Hz | 颏下肌 |
| 9 / 10 / 11 | ABD / CHEST / AIRFLOW | 呼吸努力 / 气流 | µV | 200 Hz | 腹部运动 / 胸部运动 / 口鼻气流 |
| 12 | ECG | 心电 | mV | 200 Hz | 右锁骨下至左外侧胸壁单导联 |
| 13 | SaO2 | 脉搏血氧 | % | 200 Hz | 由 sample-and-hold 上采样至 200 Hz |
信号共 13 路,覆盖神经、眼动、肌肉、心血管、呼吸与血氧六个子系统。原始数据由 64-bit 浮点转换为 16-bit 有符号整数(scale/offset 压缩)以控制体积,读取时必须经 .hea 头文件中的增益与基线参数还原物理单位,否则会得到数量级错误的数值。
§3.2 按子集样本数
| 子集 | 受试者数 | 标注可用性 | 信号时长 | 约占用空间 |
|---|---|---|---|---|
| training(训练集) | 994 | 觉醒 + 睡眠分期标注齐全 | 平均 7.7 小时/例 | 约 135 GB |
| test(测试集) | 989 | 仅信号,标签永久隐藏 | 平均 7.7 小时/例 | 约 133–135 GB |
| 合计 | 1,983 | 标注覆盃率约 50.1% | 累计约 15,261 小时 | 266.6 GB(未压缩) |
§3.3 文件格式
| 文件扩展名 | 内部格式 | 内容 | 读取方式(Python) |
|---|---|---|---|
.mat |
Matlab V4 | 13 路信号原始采样值(16-bit int) | wfdb.rdrecord |
.hea |
纯文本 | 信号名、单位、增益、基线、采样率、时长 | wfdb.rdrecord 自动解析 |
.arousal |
WFDB 标注格式 | 觉醒事件起止 + 睡眠分期序列 | wfdb.rdann |
-arousal.mat |
Matlab V7 结构 | 逐采样点三值向量(+1/0/−1)与睡眠阶段 | scipy.io.loadmat |
.vec |
纯文本(提交格式) | 逐采样点觉醒概率,每行一个浮点数 | 自定义解析 |
.csv / .txt |
逗号分隔 / 纯文本 | age-sex.csv(人口学)、results.csv(成绩)、RECORDS(清单) |
pandas.read_csv / open() |
§3.4 存储大小
| 项目 | 大小 | 说明 |
|---|---|---|
| 未压缩总量 | 266.6 GB | 官方文件列表标注(training 约 135 GB + test 约 133–135 GB) |
| ZIP 打包下载 | 45.8 MB | 仅为种子/清单层,不含信号主体 |
BitTorrent 种子 / new-arousals.zip / SHA256SUMS.txt |
3.0 MB / 26.8 MB / 580.3 KB | 种子、更新版标注、全库校验和 |
单例四件套(tr04-0695) |
129.6 MB / 460.6 KB / 666 B / 11.9 KB | 依次为 .mat / -arousal.mat / .hea / .arousal |
| 数据集元信息 | 29.1 KB | age-sex.csv |
§3.5 标注方式
本数据集的标注为全人工判读,不含任何自动或弱监督成分。流程分为三层:
第一层,睡眠分期。 技师将整夜 EEG 按 30 秒非重叠 epoch 逐段判读,依 AASM 手册划为 W、REM、N1、N2、N3;挑战概览页另列的第六类 “undefined” 覆盖信号缺失或无法判读区段。论文 Table 2 给出全体分布:Wake 29.3%、N1 19.5%、N2 51.3%、N3 13.8%、REM 15.3%,与临床睡眠结构一致(N2 占比最高)。
第二层,觉醒事件判读。 技师标记每次觉醒的起止时刻并归入 13 类之一:自发性、RERA、磨牙、低通气、低通气呼吸、呼吸暂停(中枢/阻塞/混合型)、发声、打鼾、周期性腿动、潮式呼吸、部分气道阻塞。分布极度不均衡——RERA 43,822 次居首,自发性仅 70 次,潮式呼吸 3 次、噪声 1 次。
第三层,目标觉醒向量构造。 挑战赛在事件标注之上定义了"目标觉醒"操作性标签,由官方预计算并写入 -arousal.mat,取值 +1(目标觉醒区)、0(非觉醒区,误判受罚)、−1(不计分区)。规则为:RERA 开始前 2 秒至结束后 10 秒;非 RERA、非呼吸暂停觉醒开始前 2 秒至结束后 2 秒;受试者醒来或呼吸暂停/低通气觉醒前后 10 秒内不计分。
关键点:参赛者拿到的是已构造好的目标觉醒向量,无需自己从事件文件重新推导,官方明确提示 “target arousals have been pre-computed for you”。
§3.6 标注者资质与一致性
| 项目 | 内容 |
|---|---|
| 标注者数量 | 7 名(论文 §2.2:“In total, seven scorers annotated the dataset”) |
| 人力配置 | 每份 PSG 由一名评分员独立完成判读,非多人共识;资质为 MGH 认证睡眠技师 |
| 遵循标准 | AASM 睡眠判读手册(睡眠分期)+ AASM 觉醒判读规则 |
| 一致性评估 | 官方未披露评分者间一致性系数(如 Cohen’s kappa) |
| 标注粒度 | 30 秒 epoch(分期)+ 事件级起止时刻 + 200 Hz 逐样本向量 |
| 备注 | 标注文件曾于 2018-05-07 更新,并最终以 new-arousals.zip 形式重构 |
由于采用单评分员制且未公开一致性数据,建模时应对标签噪声保持保守假设。文献中普遍报告的觉醒判读者间一致率在事件层面约为 0.6 至 0.8(Cohen’s kappa),这为本数据集的性能上限提供了一个参考尺度——接近 0.7 以上的 AUPRC 提升可能已经进入标签噪声主导的区间。
§3.7 采集周期
数据由 MGH 睡眠实验室以回顾性方式收集,论文明确说明 “Partners Institutional Review Board approved retrospective analysis of the MGH dataset without requiring additional consent”。具体采集年份区间官方未披露。可确认的时间锚点:2018-02-21 数据在 PhysioNet 首次开放;2019-04-17 v1.0.0 完成最终整理;文件时间戳显示信号创建于 2018-02-13 前后、标注更新至 2018-04-20。
§3.8 地域覆盖
数据全部来自单一中心:美国马萨诸塞州波士顿的 Massachusetts General Hospital 睡眠实验室(Sleep Division),并与计算临床神经生理实验室(CCNL)及临床数据动画中心(CDAC)协作。这意味着数据反映的是美国东北部三级医疗中心的临床实践与设备配置(电极类型、放大器型号、技师判读习惯),地域、种族、设备多样性均为零。跨地域应用前必须做外部验证。
§3.9 设备规格
| 信号 | 电极/传感器位置 | 参考电极 | 采样率 | 备注 |
|---|---|---|---|---|
| EEG × 6 | F3/F4/C3/C4/O1/O2(国际 10/20) | 对侧耳垂(M1/M2) | 200 Hz | 6 路蒙太奇,覆盖额/中央/枕区 |
| EOG × 1 | 左眼外眦 | M2 | 200 Hz | 单侧眼动 |
| EMG × 1 | 颏下(Chin1-Chin2) | 双极 | 200 Hz | 反映肌张力,觉醒时升高 |
| ECG × 1 | 右锁骨下近胸骨 + 左外侧胸壁 | 双极 | 200 Hz | 单导联 |
| SaO2 × 1 | 指端脉搏血氧 | — | 200 Hz(上采样) | 经 sample-and-hold 对齐 |
| 呼吸努力 × 2 + 气流 × 1 | 腹部(ABD)、胸部(CHEST)、口鼻(AIRFLOW) | — | 200 Hz | 呼吸感应体积描记类信号 |
设备品牌与型号(放大器、传感器厂商)官方未披露。所有信号原为 64-bit 浮点,发布时转换为 16-bit 有符号整数。除 SaO2(%)与 ECG(mV)外,其余信号单位为微伏。
§3.10 深度溯源链
| 层级 | 内容 | 可核实来源 |
|---|---|---|
| 原始临床记录 | MGH 睡眠实验室临床 PSG,回顾性提取 | 论文 §2.1 |
| 伦理审批 | Partners IRB 批准回顾性分析,豁免额外知情同意 | 论文 §2.1 |
| 判读与标注 | 7 名认证技师依 AASM 手册判读;受试者以 trXX-XXXX / teXX-XXXX 编码去标识 |
论文 §2.2 |
| 目标觉醒构造 | 官方按 2 s/10 s 窗口规则预计算三值向量 | 数据集文档 |
| 划分 | 按 AHI 分层(KS 检验 p = 0.97),无重复受试者 | 论文 §2.1 |
| 发布 | PhysioNet v1.0.0,ODC-BY 1.0,2018-02-21 | PhysioNet 页面 |
| 版本修订 | 2018-05-07 更新标注;2019-04-17 发布 new-arousals.zip 与最终文档 |
PhysioNet 文件清单 |
| 生态镜像 | Braindecode/Zenodo 元信息包;EEGDash nm000225;torch_ecg CINC2018 类 | 各自官方页面 |
§4 数据结构
§4.0 目录树
下载并解压 challenge-2018-1.0.0.zip(或经 wget/aws s3/BitTorrent 同步)后的典型目录结构如下。注意:官方 ZIP 下载包仅 45.8 MB,只含清单、评分脚本与示例条目,信号主体需另行通过 BitTorrent 或 S3 同步。
challenge-2018-1.0.0/
├── RECORDS # 全部记录名列表(52.3 KB,每行一个)
├── ANNOTATORS / age-sex.csv # 标注者名单(34 B)/ 年龄与性别元数据(29.1 KB)
├── SHA256SUMS.txt # 全库 SHA256 校验和(580.3 KB)
├── challenge2018cinc.pdf # 官方挑战论文(180.3 KB)
├── results.csv / unofficial-phase-results.csv # 官方最终成绩(1.6 KB)/ 非官方阶段成绩(1.5 KB)
├── new-arousals.zip # 更新版觉醒标注(26.8 MB)
├── score2018.py / score2018.m / score.py # Python(8.0 KB)/ Matlab(4.1 KB)/ 入口封装(1.7 KB)
├── sample.zip / sample-matlab.zip # Python 示例条目(21.2 KB)/ Matlab 示例条目(9.3 KB)
├── sample-v1.zip / sample-matlab-v1.zip # 早期版本示例
├── .challenge-2018.torrent # BitTorrent 种子(3.0 MB)
├── papers/ sources/ # 衍生论文与评分源码
├── training/ # 训练集(994 例,约 135 GB)
│ ├── tr03-0005/
│ │ ├── tr03-0005.mat # 13 路信号(Matlab V4,约 130 MB)
│ │ ├── tr03-0005.hea # WFDB 头文件(约 666 B)
│ │ ├── tr03-0005.arousal # 觉醒事件 + 睡眠分期(约 12 KB)
│ │ └── tr03-0005-arousal.mat # 逐采样点三值向量(约 460 KB)
│ ├── tr04-0695/ # 同结构,常作单例调试样例
│ └── ... # 共 994 个受试者子目录
└── test/ # 测试集(989 例,约 133 GB)
├── te01-0001/
│ ├── te01-0001.mat / .hea # 信号与头文件开放
│ └── (无 .arousal / -arousal.mat,标签永久隐藏)
└── ... # 共 989 个受试者子目录
命名规则:训练集目录以 tr 开头(trXX-XXXX),测试集以 te 开头(teXX-XXXX),后接 2 位站点码与 4 位序号。torch_ecg 用正则 ^tr\d{2}\-\d{4}.mat$ 与 ^te\d{2}\-\d{4}.mat$ 匹配。
§4.1 DAIMS 字段字典
下表描述核心数据实体 training_record(每行一例训练受试者)的字段。因数据为信号型而非表格型,字段语义映射到 WFDB 记录与标注向量的构成单元。
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
record_id |
Text | 受试者记录标识(目录名) | tr04-0695 |
主键,切分与去重 | 无 | 无 | trXX-XXXX 或 teXX-XXXX |
signal |
Float(N×13) | 13 路信号矩阵,N = 200 × 秒数 | −12.4 µV(示例采样点) | 模型输入 | 电极阻抗、运动伪迹、断电饱和 | 无(全时段有值) | 依赖通道:µV 或 % 或 mV |
fs |
Integer | 采样率 | 200 | 重采样基准 | 无 | 无 | 固定 200 Hz |
sig_name |
Text(13) | 通道名列表 | ["F3-M2", "F4-M1", ..., "SaO2"] |
通道选择与消融 | 无 | 无 | 13 个固定通道名 |
units |
Text(13) | 各通道物理单位 | µV / mV / % |
物理量还原校验 | 无 | 无 | 见 §3.1 |
gain / baseline |
Float(13) | 数字量转物理量的增益与基线 | gain=1000, baseline=0 |
wfdb.rdrecord 还原真值 |
各例可能不同,硬编码会致数值错误 | 无 | 实数 |
sleep_stage |
Integer(200 Hz) | 逐采样点睡眠阶段编码 | 2(对应 N2) |
分期任务标签 / 条件先验 | 30 秒 epoch 判读误差、边界错分 | 无(但含 undefined 类) |
0=W,1=N1,2=N2,3=N3,4=REM |
target_arousal |
Integer(200 Hz) | 逐采样点觉醒三值标记 | 1 / 0 / −1 |
主任务标签 | 单评分员判读差异 | −1 即不计分区(信息性缺失) | |
arousal_type |
Text | 事件级觉醒类别 | arousal_rera |
多任务辅助标签 / 归因分析 | 类别歧义(如 RERA 与 hypopnea 边界) | 无 | 13 类枚举 |
event_onset / event_duration |
Float | 事件起始时间与持续时长(秒) | 1234.5 / 8.2 |
事件级评估 | 判读时刻精度约 ±0.5 s | 无 | ≥ 0 / > 0 |
age / sex |
Integer / Text | 受试者年龄(岁)与性别 | 55 / male |
协变量 / 公平性分析 | 自报 | 无 | 18–93 / 二值 |
annotator |
Text | 判读者编号 | A03 |
标签噪声溯源 | 无 | 官方未在公开文件中披露 | 1–7 |
§4.2 标签分布
目标觉醒三值向量分布。 在训练集 994 例中,逐采样点标签只有三种取值,极端不均衡:
| 取值 | 含义 | 建模角色 | 相对规模 |
|---|---|---|---|
| +1 | 目标觉醒区 | 正类 | 极少数(RERA 事件 43,822 次为主) |
| 0 | 非觉醒区 | 负类(误判受罚) | 绝大多数 |
| −1 | 不计分区 | 训练时忽略,评估时排除 | 受试者醒来 / 呼吸事件周边 10 秒 |
由于 −1 在损失计算与评分中均被排除,实际参与训练与评估的有效样本远小于信号总长度。建模时必须显式构造掩码,否则模型会把不计分区计入损失,学到错误目标。
训练集事件计数(论文 Table 2)。
| 事件类型 | 计数 | 是否构成目标觉醒 |
|---|---|---|
| RERA(呼吸努力相关觉醒) | 43,822 | 是 |
| Spontaneous(自发性觉醒) | 70 | 是 |
| PLM(周期性腿动觉醒) | 36 | 是 |
| Bruxism(磨牙觉醒) | 30 | 是 |
| Snoring(打鼾觉醒) | 28 | 是 |
| Partial airway obstruction(部分气道阻塞) | 11 | 是 |
| Hypoventilation(低通气) | 4 | 是 |
| Cheyne-Stokes breathing(潮式呼吸) | 3 | 是 |
| Noise(噪声事件) | 1 | 是 |
| Hypopnea(低通气呼吸) | 56,936 | 否(划入不计分区) |
| Obstructive apnea(阻塞型呼吸暂停) | 32,547 | 否(划入不计分区) |
| Central apnea(中枢型呼吸暂停) | 22,763 | 否(划入不计分区) |
| Mixed apnea(混合型呼吸暂停) | 2,641 | 否(划入不计分区) |
| 睡眠阶段分布(论文 Table 2,全体百分比)。 |
| 睡眠阶段 | Wake | N1 | N2 | N3 | REM |
|---|---|---|---|---|---|
| 全体占比(%) | 29.3 | 19.5 | 51.3 | 13.8 | 15.3 |
| 训练集占比(%) | 28.0 | 19.6 | 51.0 | 14.0 | 15.5 |
| 测试集占比(%) | 31.0 | 19.0 | 51.7 | 13.8 | 15.2 |
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 训练集记录数 | 994 | 论文 §2.1 |
| 测试集记录数 | 989 | 论文 §2.1 |
| 平均每例记录 / 睡眠时长 | 7.7 ± 0.7 h / 6.2 ± 1.2 h | 论文 Table 1 |
| 累计信号时长 | 约 15,261 小时 | EEGDash nm000225 元数据 |
| 通道数 / 采样率 / 单例点数 | 13 路 / 200 Hz / 约 5,760,000 点 | 官方数据页;200 Hz × 8 h |
| 训练集目标觉醒事件总数 | 43,822(RERA)+ 182(其余 8 类) | 论文 Table 2 求和 |
| 参赛队伍数 / 冠军 AUPRC | 22(19 个最终条目)/ 0.54 | 论文 Abstract / Table 3 |
§4.4 数据层级
本数据集为四级层级结构,建模时需明确在哪一级做切分与聚合:
| 层级 | 实体 | 数量关系 | 建模含义 |
|---|---|---|---|
| L1 | 受试者(subject) | 1,983 名 | 划分与去重的最小单位;同一受试者只有一次记录,天然无患者级泄漏 |
| L2 | 记录(record) | 每受试者 1 例整夜 PSG | 训练/推理的输入单元 |
| L3 | 通道(channel) | 每记录 13 路 | 模态融合与消融的维度 |
| L4 | 采样点(sample) | 每记录约 5.5–5.8 M 点/通道 | 标签与预测的最小单位(200 Hz) |
由于每位受试者仅有一份记录,CinC 2018 结构上不存在临床数据集中常见的"同一患者跨训练/测试集"泄漏。论文亦明确确认训练与测试无重复受试者。取而代之的泄漏风险来自另一处:整夜信号若按时间窗口随机切分,同一夜相邻片段会同时落入训练与验证,造成严重的数据泄漏(详见 §5.3 与坑点 2)。
§4.5 缺失值与信息性缺失编码
| 缺失情形 | 编码方式 | 含义 | 处理建议 |
|---|---|---|---|
| 不计分区 | target_arousal = −1 |
受试者醒来、或呼吸暂停/低通气觉醒前后 10 秒 | 必须从损失与评估中排除,非普通缺失 |
| 未定义睡眠阶段 | sleep_stage = undefined(概览页第六类) |
信号缺失或无法判读的区段 | 分期任务中作为独立类或排除 |
| 测试集标签缺失 | 文件不存在(无 .arousal 与 -arousal.mat) |
989 例标签永久隐藏 | 不可用于有监督训练,仅可推理 |
| 通道饱和 / 断电 | 信号值触及 16-bit 整数边界 | 电极脱落或放大器饱和 | 检测并插值或置零,勿当真实生理值 |
| 测试集人口学缺失 | age-sex.csv 仅含年龄与性别 |
BMI/AHI/ESS 仅在论文汇总表;种族未发布 | 个体级 AHI 须另行申请;种族维度不可分析 |
−1 是本数据集最重要的"信息性缺失编码":它不是数据没采到,而是设计上规定不该评分(因为这些区域的觉醒判读在临床规则下本身不可靠)。忽略这一区别、把 −1 当作 0 处理的模型,会在评估中获得虚假的高分,因为相当比例的"假阳性"其实落在不计分区内。
§5 划分与使用建议
§5.1 官方划分
| 划分 | 样本数 | 标签可用性 | 划分依据 |
|---|---|---|---|
| training | 994 | 觉醒 + 分期标注齐全 | 与测试集按 AHI 分层,KS 检验 p = 0.97 |
| test | 989 | 仅信号,标签永久隐藏 | 同上 |
官方划分的关键性质有三点。第一,分层变量是 AHI 而非随机抽样,目的是保证两集的呼吸暂停严重度分布一致,避免模型把"测试集呼吸事件更少"误当作性能提升。第二,训练与测试无重复受试者,论文明确声明。第三,测试标签永久保密,挑战结束后仍未公开,官方称此举是为支持后续研究避免过拟合。
由于测试集不可用于有监督评估,社区实践几乎都以训练集 994 例为唯一可用标注数据,在其内部重新划分。
§5.2 社区惯例划分
| 划分方案 | 出处/背景 | 训练 : 验证 比例 | 适用场景 | 注意事项 |
|---|---|---|---|---|
| 随机 80/20 受试者级 | 通用做法 | 约 795 : 199 | 快速实验 | 必须按受试者切分,不可按窗口 |
| 五折受试者级交叉验证 | 论文对标常用 | 4 折训 / 1 折验 | 报告稳健性能 | 折间方差较大,需报置信区间 |
| 保留官方测试集用于最终提交 | 仅 2018 参赛者 | 994 训 / 989 测(无标签) | 复现竞赛成绩 | 现在无法获得测试集分数 |
| 时间顺序切分(前 80% / 后 20%) | 时序建模研究 | 按夜内时间 | 模拟在线推理 | 与随机切分结果差异显著 |
| 跨数据集迁移(train on CinC → test on SHHS) | 泛化性研究 | 994 训 / 外部测 | 检验域外泛化 | 需解决标签定义差异(见坑点 8) |
§5.3 泄漏风险(重点)
风险一:窗口级随机切分导致同夜泄漏(最严重)。 若把每例整夜信号切成 30 秒或 5 分钟窗口后随机分配到训练与验证集,则同一夜的相邻窗口会跨集分布。由于觉醒具有明显的时间聚集性(一次呼吸事件后常连续出现数个觉醒),模型会从验证集中"记住"训练集见过的同夜模式,验证 AUPRC 虚高 0.1 以上是常见现象。必须按受试者切分。
风险二:通道归一化统计量跨集计算。 若在整库层面计算各通道均值与标准差用于标准化,测试集信息会渗入训练。应当只从训练受试者统计归一化参数,再应用到验证与测试。
风险三:目标觉醒向量的 −1 混淆。 若把 −1 当作 0 或作为正类处理,等价于把"不计分区"的错误标签引入监督信号,模型会学到与任务无关的模式,且在官方评分下表现异常。这不是传统泄漏,但属于标签误用导致的评估失真。
风险四:用测试集表现调超参。 2018 年参赛者可提交 2 个条目查看测试集临时分数,这本身构成选择性偏差。论文 §6 明确指出部分条目存在非确定性行为,同一算法多次运行结果不同,说明当时的公开分数存在噪声,不能作为超参搜索的可靠信号。
风险五:与外部数据集的受试者重叠。 CinC 2018 与 SHHS、MESA 等数据集来自不同中心,理论上无重叠;但若研究者把 CinC 2018 的测试集信号用于自监督预训练,再在有标注的外部数据上微调,仍属合法的域外使用,需要明确声明。
§5.4 交叉验证建议
推荐采用受试者级 5 折交叉验证,并遵循以下要点:
- 折的划分使用固定随机种子并公开,例如
numpy.random.default_rng(2018),确保可复现;分层变量同时考虑 AHI 与性别,因为觉醒频率与呼吸暂停严重度、性别均相关,仅按 AHI 分层可能造成性别分布偏移。 - 每次报告 5 折的均值与标准差,而非仅报最优折。鉴于论文报告条目间 AUPRC 从 0.07 到 0.55 的巨大方差,单折结果几乎不具参考价值。
- 折内做患者级早停与模型选择,不要用折外数据挑选 epoch;并谨慎使用 group-aware 的分层,避免同一受试者的不同时间段跨折。
§5.5 外部验证建议
本数据集为单中心回顾性数据,外部验证不是可选项而是必需项。建议的验证路径:
| 验证路径 | 目标 | 需要注意的标签差异 |
|---|---|---|
| 在 MASS / ISRUC 上验证 | 检验跨中心泛化 | 这些数据集多为段级分期标签,需将觉醒任务降级为段级代理 |
| 在 SHHS / MESA 上验证 | 检验社区人群泛化 | 人群更健康、AHI 更低,觉醒频率分布不同 |
| 在自有临床 PSG 上验证 | 检验本地设备与流程适配 | 电极蒙太奇与采样率可能不同,需重采样 |
| 跨设备验证(可穿戴) | 检验低通道场景退化 | 通道数从 13 降至 1–3,需通道消融 |
| 时间漂移验证(同中心不同年份) | 检测判读标准变化 | 标签协议更新(如 new-arousals.zip)会影响一致性 |
外部验证的报告规范:必须同时给出内部(训练集折内)与外部指标,并明确说明外部数据集的觉醒定义是否与 Challenge 目标觉醒定义一致。若不一致,应报告事件级 F1 而非 gross AUPRC,因为 gross AUPRC 的定义强依赖评分区域划分规则。
§6 AI 就绪指南
§6.0 云端快速启动
若不想下载 266.6 GB 全库,推荐两条轻量路径:
路径 A:EEGDash 流式加载(推荐用于原型)。 EEGDash 以 nm000225 编号提供该数据集的镜像,可通过 Python API 按需拉取单例记录,返回 PyTorch / braindecode 数据集对象,无需本地保存全库。
# 路径 A:EEGDash 流式加载
pip install eegdash
python -c "
from eegdash import EEGDashDataset
ds = EEGDashDataset(dataset='nm000225', cache_dir='./cache')
print(len(ds), 'recordings')
"
路径 B:PhysioNet 官方单例子目录直取。 PhysioNet 允许按 HTTP 路径直接下载单个受试者目录,适合先跑通流程。
# 路径 B:仅取单例(约 130 MB),无需全库
base="https://physionet.org/files/challenge-2018/1.0.0/training/tr04-0695"
mkdir -p data/challenge-2018/training/tr04-0695 && cd data/challenge-2018/training/tr04-0695
for f in tr04-0695.mat tr04-0695.hea tr04-0695.arousal tr04-0695-arousal.mat; do curl -O -L "$base/$f"; done && ls -lh
云端环境建议至少 16 GB 内存(单例加载峰值约 8 GB),并将 cache_dir 指向高吞吐 SSD。
§6.1 快速上手
在写任何模型代码前,先用下面 20 行代码确认能正确读到信号与标签。这一步是本数据集最容易出错的环节,因为文件是 Matlab V4/V7 混合格式 + WFDB 头文件的组合,直接用 scipy.io.loadmat 读 .mat 信号文件会得到不完整的结构。
# 目录结构预期:data_root/challenge-2018/{split}/{record_id}/
# tr04-0695.mat(信号, Matlab V4) / .hea(WFDB 头)
# .arousal(事件标注) / -arousal.mat(逐样本三值向量 + 睡眠阶段)
# prefix 不带扩展名:wfdb.rdrecord 自动寻找 .mat + .hea;-arousal.mat 需手动拼完整名
# 最小可用子集:仅 tr04-0695 一例即可跑通全流程
import numpy as np, wfdb, scipy.io as sio
data_root, record_id, split = "./data", "tr04-0695", "training"
prefix = f"{data_root}/challenge-2018/{split}/{record_id}/{record_id}"
rec = wfdb.rdrecord(prefix) # 信号 + 头文件,p_signal 已还原物理单位
sig = rec.p_signal # (N, 13)
print("信号形状:", sig.shape, "采样率:", rec.fs, "通道:", rec.sig_name)
ann = sio.loadmat(prefix + "-arousal.mat")["data"] # Matlab V7 结构
labels = ann["arousal"][0, 0].ravel() # +1 / 0 / -1
stages = ann["sleep_stage"][0, 0].ravel()
assert len(labels) == sig.shape[0], "标签长度与信号长度不一致"
mask = labels != -1 # 不计分区必须屏蔽
print("有效样本比例: %.4f" % mask.mean())
预期的输出形如:信号形状: (5610000, 13) 采样率: 200 通道: ['F3-M2', ...],且 有效样本比例 通常在 0.7 至 0.9 之间。若 len(labels) 与 sig.shape[0] 不等,说明读错了文件(常见于把 .arousal 事件文件当成逐样本向量)。
§6.2 数据获取
| 获取方式 | 命令/地址 | 大小 | 是否需要申请 |
|---|---|---|---|
| 官方 ZIP(清单与脚本层) | https://physionet.org/content/challenge-2018/get-zip/1.0.0/ |
45.8 MB | 否 |
| wget 全量递归 | wget -r -N -c -np https://physionet.org/files/challenge-2018/1.0.0/ |
266.6 GB | 否 |
| AWS S3 同步 | aws s3 sync --no-request-payer s3://physionet-open/challenge-2018/1.0.0/ DEST |
266.6 GB | 否 |
| BitTorrent(推荐,可续传) | .challenge-2018.torrent(3.0 MB) |
266.6 GB | 否 |
| 更新标注 / EEGDash 流式 | new-arousals.zip ;EEGDashDataset(dataset="nm000225") |
26.8 MB / 按需 | 否 |
许可协议是 Open Data Commons Attribution License v1.0(ODC-BY 1.0),官方访问政策原文为 “Anyone can access the files, as long as they conform to the terms of the specified license”。无需 PhysioNet 凭证化培训、无需签署 DUA、无需 IRB 审批,这与 MIMIC 系列的申请流程形成鲜明对比。
# 推荐流程:先同步清单与脚本层,再按需拉取信号
mkdir -p data/challenge-2018
aws s3 sync --no-sign-request s3://physionet-open/challenge-2018/1.0.0/ data/challenge-2018/ \
--exclude "*" --include "*.csv" --include "*.py" --include "*.txt" --include "RECORDS" --include "*.pdf"
cd data/challenge-2018 && sha256sum -c SHA256SUMS.txt --ignore-missing 2>/dev/null | tail -5
# 再按需拉取若干完整受试者目录(示例:前 20 例训练集)
head -20 RECORDS | sed 's|^|training/|; s|$|/|' > /tmp/prefixes.txt
§6.3 预处理全流程
预处理分四步:格式转换 → 清洗 → 标准化 → 窗口化。下面给出可直接运行的最小实现。
"""CinC 2018 预处理:WFDB/MAT → 标准化 npz 窗口"""
import numpy as np, wfdb, scipy.io as sio, scipy.signal as ss
FS, WIN_SEC = 200, 300
WIN, STRIDE = FS * WIN_SEC, FS * WIN_SEC // 2 # 5 分钟窗,50% 重叠
CHANNELS = ["F3-M2", "F4-M1", "C3-M2", "C4-M1", "O1-M2", "O2-M1",
"E1-M2", "Chin1-Chin2", "ABD", "CHEST", "AIRFLOW", "ECG", "SaO2"]
def read_record(prefix):
"""返回 (信号 (N,13), 三值标签 (N,), 睡眠阶段 (N,))。"""
rec = wfdb.rdrecord(prefix)
sig = rec.p_signal.astype(np.float32)
idx = [rec.sig_name.index(c) if c in rec.sig_name else -1 for c in CHANNELS]
sig = np.stack([sig[:, i] if i >= 0 else np.zeros(len(sig), np.float32) for i in idx], axis=1)
ann = sio.loadmat(prefix + "-arousal.mat")["data"]
labels = ann["arousal"][0, 0].ravel().astype(np.int8)
stages = ann["sleep_stage"][0, 0].ravel().astype(np.int8)
n = min(len(sig), len(labels), len(stages))
return sig[:n], labels[:n], stages[:n]
def clean_signal(sig):
"""坏通道检测 + 60 Hz 陷波 + 0.3–35 Hz 带通(仅 EEG/EOG/EMG 前 8 路)。"""
out = sig.copy()
for c in range(out.shape[1]):
col = out[:, c]
if np.std(col) < 1e-6 or np.mean(np.abs(col) > 32000) > 0.01:
out[:, c] = 0.0 # 常数通道或 16-bit 饱和
b_n, a_n = ss.iirnotch(60.0, 30.0, fs=FS)
b_b, a_b = ss.butter(4, [0.3, 35.0], btype="bandpass", fs=FS)
for c in range(8):
out[:, c] = ss.filtfilt(b_b, a_b, ss.filtfilt(b_n, a_n, out[:, c]))
return out
def compute_stats(records, data_root, split="training"):
"""仅从训练集统计 mean/std,避免跨集信息泄漏。"""
acc, acc2, n = np.zeros(13), np.zeros(13), 0
for rid in records:
sig, _, _ = read_record(f"{data_root}/challenge-2018/{split}/{rid}/{rid}")
acc += sig.mean(axis=0) * len(sig)
acc2 += (sig ** 2).mean(axis=0) * len(sig)
n += len(sig)
mean = acc / n
return mean.astype(np.float32), np.sqrt(np.maximum(acc2 / n - mean ** 2, 0)).astype(np.float32)
def windowize(sig, labels, win=WIN, stride=STRIDE):
"""滑窗切分,返回信号窗、标签窗、有效掩码。"""
X, y, m = [], [], []
for s in range(0, len(sig) - win + 1, stride):
seg, lab = sig[s:s + win], labels[s:s + win]
valid = lab != -1
if valid.sum() < win * 0.1: # 有效样本过少则丢弃该窗
continue
X.append(seg); y.append((lab == 1).astype(np.float32)); m.append(valid)
return np.stack(X), np.stack(y), np.stack(m)
关键设计说明:
- 只对 EEG/EOG/EMG 通道做滤波(
range(0, 8))。呼吸与 SaO2 通道的有效频带低于 0.3 Hz 或为慢变直流信号,施加带通会破坏其生理形态。这是本数据集最容易被忽略的预处理细节。 - 饱和检测用
> 32000而非> 32767,给 16-bit 边界留出裕度,因为量化噪声会让实际饱和值略低于理论上限。 - 归一化统计量只从训练受试者计算。EEG 与 SaO2 的量纲差异巨大(µV vs %),若不归一化,SaO2 通道会主导梯度。
- 窗体有效样本低于 10% 直接丢弃,避免大面积不计分区的窗体污染训练。
§6.4 PyTorch DataLoader
"""CinC 2018 PyTorch Dataset + DataLoader(可直接运行)"""
import numpy as np, torch
from torch.utils.data import Dataset, DataLoader
class CinC2018Dataset(Dataset):
"""基于预处理好的 npz 窗口,每样本为 (13, T) 信号窗与同长标签/掩码窗。
npz_dir: 存放 {record_id}.npz 的目录(内含 X/y/m)
record_ids: 参与本 Dataset 的记录 ID(切分必须按受试者)
"""
def __init__(self, npz_dir, record_ids, mean, std, augment=False):
self.mean = torch.as_tensor(mean, dtype=torch.float32).view(13, 1)
self.std = torch.as_tensor(std, dtype=torch.float32).view(13, 1)
self.augment = augment
self.items = []
for rid in record_ids:
d = np.load(f"{npz_dir}/{rid}.npz")
self.items += list(zip(d["X"], d["y"], d["m"]))
def __len__(self):
return len(self.items)
def __getitem__(self, i):
x, y, m = self.items[i]
x = torch.as_tensor(x, dtype=torch.float32).t() # (13, T)
y = torch.as_tensor(y, dtype=torch.float32) # (T,)
m = torch.as_tensor(m, dtype=torch.bool) # (T,)
x = (x - self.mean) / (self.std + 1e-8) # 训练集统计量归一化
if self.augment:
if torch.rand(1) < 0.05: # 通道随机置零(模拟电极脱落)
x[torch.randint(0, x.shape[0], (1,))] = 0.0
x = x + torch.randn_like(x) * 0.01 # 小幅高斯噪声
return x, y, m
def collate(batch):
"""所有窗等长,直接 stack。"""
return (torch.stack([b[0] for b in batch]),
torch.stack([b[1] for b in batch]),
torch.stack([b[2] for b in batch]))
def build_loaders(npz_dir, train_ids, val_ids, mean, std, batch_size=32, num_workers=4):
tr = CinC2018Dataset(npz_dir, train_ids, mean, std, augment=True)
va = CinC2018Dataset(npz_dir, val_ids, mean, std, augment=False)
tr_loader = DataLoader(tr, batch_size=batch_size, shuffle=True, num_workers=num_workers,
collate_fn=collate, pin_memory=True, drop_last=True)
va_loader = DataLoader(va, batch_size=batch_size, shuffle=False, num_workers=num_workers,
collate_fn=collate, pin_memory=True)
return tr_loader, va_loader
if __name__ == "__main__":
train_ids = [f"tr03-{i:04d}" for i in range(5, 25)]
val_ids = [f"tr03-{i:04d}" for i in range(25, 30)]
tr_loader, va_loader = build_loaders(
"./npz", train_ids, val_ids, np.zeros(13, np.float32), np.ones(13, np.float32))
xb, yb, mb = next(iter(tr_loader))
print("批次信号:", tuple(xb.shape), "标签:", tuple(yb.shape), "掩码:", tuple(mb.shape))
# 预期输出: 批次信号: (32, 13, 60000) 标签: (32, 60000) 掩码: (32, 60000)
WIN_SEC = 300 时单窗长度为 60,000 采样点(13 × 60,000 float32 约 3.1 MB),批大小 32 约需 100 MB 显存/内存,24 GB 显存可轻松容纳更长的序列模型。
§6.5 领域特有坑点
⚠️ 坑点 1:把
.mat当普通 SciPy 文件读,信号数值全错(分类:预处理陷阱)问题:信号文件是 Matlab V4 格式,依赖同名
.hea头文件提供增益(gain)、基线(baseline)、单位与通道名。直接用scipy.io.loadmat("tr04-0695.mat")读出的只是 16-bit 整数原始值,通道维顺序与物理量纲均未还原,数值量级可能差 3 个数量级。更糟的是-arousal.mat是 Matlab V7 格式,两种格式混在同一目录,容易误以为"都是 mat 就用同一函数"。症状:loss 从一开始就 nan 或不收敛;EEG 幅值显示为数千而非数十微伏;SaO2 不是 0–100 的百分比而是上万。
解决:① 简单方法——信号一律用
wfdb.rdrecord(prefix)(不带扩展名),自动解析.hea并返回已还原物理单位的p_signal;逐样本标签用scipy.io.loadmat(prefix + "-arousal.mat")单独读取。② 进阶方法——手动校验physical = (digital - baseline) / gain,并断言第 13 通道(SaO2)落在 0–100 区间。③ SOTA 方法——用 torch_ecg 的CINC2018类或 SleePyCo 的prepare_physio2018.py,它们已封装格式差异。
参考:PhysioNet 2018 数据页 Table 5(https://www.physionetchallenges.org/2018/data/);torch_ecg CINC2018 源码。
⚠️ 坑点 2:按窗口随机切分,验证集分数虚高(分类:数据泄漏)
问题:整夜信号被切成大量 30 秒或 5 分钟窗口后,若按窗口随机分配到训练/验证集,同一夜的相邻窗口会跨集出现。觉醒具有强时间聚集性(一次呼吸事件后常连续出现数个觉醒,RERA 在训练集中多达 43,822 次),模型能通过"记住同一夜的模式"而非学习生理特征来提升验证指标。
症状:验证 AUPRC 达到 0.8 甚至更高,但论文冠军只有 0.54;换一批受试者测试时性能断崖式下跌;训练与验证 loss 曲线高度重合却无泛化。
解决:① 简单方法——切分前先按
record_id(受试者)划分,所有窗口继承其所属受试者的集别标签。② 进阶方法——用sklearn.model_selection.GroupKFold并传入groups=record_ids;窗体 50% 重叠时,同一受试者的所有窗归入同一集即可自然满足不跨集。③ SOTA 方法——报告时附上"同夜窗口级切分"与"受试者级切分"两组数字的差值作为泄漏严重度的量化诊断,差值超过 0.1 说明切分有严重问题。
参考:论文 §2.1 明确"no subjects in common between the training and test sets",官方划分本身就是受试者级。
⚠️ 坑点 3:把不计分区(−1)当作负类,评估结果失真(分类:标签理解)
问题:
-arousal.mat中的逐样本标签有三值:+1 目标觉醒、0 非觉醒(误判受罚)、−1 不计分区。−1 覆盖受试者醒来以及呼吸暂停/低通气觉醒前后 10 秒的区域,这些区域在官方评分中被完全排除。若建模时把 −1 当作 0(负类),会向模型注入大量"被明确规定不该学习的"监督信号。症状:按官方评分脚本评估时分数远低于自评分数;模型把受试者清醒段的信号特征当成"非觉醒"的学习目标;混淆矩阵中清醒段被大量误判。
解决:① 简单方法——在损失函数中传入掩码:
loss = F.binary_cross_entropy_with_logits(logits[mask], targets[mask])。② 进阶方法——窗口化时若某窗有效样本(label != -1)占比低于阈值(如 10%)则整窗丢弃;训练与评估始终携带掩码张量。③ SOTA 方法——复现官方评分时直接调用score2018.py,确保 gross AUPRC 的整库累加口径与−1排除规则完全一致。
参考:PhysioNet 2018 数据页对三值向量的定义(https://www.physionetchallenges.org/2018/data/);论文 §3–§4。
⚠️ 坑点 4:误以为需要自己推导目标觉醒窗口(分类:标签理解)
问题:
.arousal事件文件包含 13 类觉醒事件的起止时刻,而文档描述了"RERA 前 2 秒至后 10 秒、非 RERA 觉醒前 2 秒至后 2 秒、醒来/呼吸事件周边 10 秒不计分"的复杂规则。研究者常花费大量精力从事件文件重新推导目标觉醒向量,结果与官方预计算版本不一致。症状:自建标签与
-arousal.mat正类位置对不上;用自建标签训练后无法与论文分数比较。解决:① 简单方法——直接使用
-arousal.mat中的预计算向量,官方明确声明 “target arousals have been pre-computed for you”。② 进阶方法——若确需从事件文件重建(例如自定义窗口规则),先用一例子样本验证自建向量与官方向量的 IoU 应接近 1.0,再全量处理。③ SOTA 方法——把事件级标注作为多任务辅助目标(预测 13 类事件),主任务仍用官方三值向量,避免主标签口径漂移。
参考:PhysioNet 2018 数据页标注说明(https://www.physionetchallenges.org/2018/data/)。
⚠️ 坑点 5:gross AUPRC 与逐记录 AUPRC 混用,无法与论文对比(分类:评估误用)
问题:官方指标是 gross AUPRC——对每个概率阈值 j(j/1000),精确率与召回率都在整个测试库上计算,而非对每条记录单独算 AUPRC 再取平均。两者数值差异显著,直接混用会得出无法与论文 Table 3 对比的分数。
症状:自评 AUPRC 与官方
results.csv中同款模型分数差 0.05 以上;用sklearn.metrics.average_precision_score逐记录平均得到的结果与官方评分脚本不一致。解决:① 简单方法——直接调用官方
score2018.py,输入逐样本概率向量目录,不要用 sklearn 默认实现。② 进阶方法——理解公式AUPRC = Σ_j p_j (r_j − r_{j+1}),其中p_j = |A ∩ P_j ∩ N| / |P_j ∩ N|、r_j = |A ∩ P_j ∩ N| / |A ∩ N|,N为不计分区集合;实现时把全库样本的概率与标签拼接后再累加。③ SOTA 方法——同时报告 gross AUPRC 与受试者级平均 AUPRC,并明确标注口径。
参考:论文 §4;PhysioNet 评分说明(https://physionet.org/content/challenge-2018/1.0.0/)。
⚠️ 坑点 6:对呼吸与血氧通道施加标准 EEG 滤波,破坏生理信号(分类:预处理陷阱)
问题:标准睡眠信号预处理管线会对所有通道施加 0.3–35 Hz 带通,但 ABD、CHEST、AIRFLOW 的呼吸成分主要在 0.1–0.5 Hz,SaO2 是慢变百分比信号(几乎直流),施加 0.3 Hz 高通会把它们的主体成分直接滤除。
症状:呼吸通道滤波后几乎变成平坦直线或纯噪声;以呼吸努力为输入的模型性能显著低于纯 EEG 模型;SaO2 通道标准差趋近于 0。
解决:① 简单方法——只对 EEG(6 路)、EOG、EMG 共 8 路做 0.3–35 Hz 带通与 60 Hz 陷波,呼吸与 SaO2 通道仅做去趋势或保留原样。② 进阶方法——呼吸通道单独设 0.05–1 Hz 带通,SaO2 只做异常值剔除(生理范围外的值置 NaN 后线性插值)。③ SOTA 方法——按通道类型配置独立的预处理分支,在通道维度拼接后再送入模型,让网络自行学习跨频段交互。
参考:PhysioNet 2018 数据页信号表(Table 4);SleePyCo 预处理脚本(https://deepwiki.com/gist-ailab/SleePyCo/3.4-physio2018-preprocessing)。
⚠️ 坑点 7:直接下载 266.6 GB 全库导致存储与 IO 失败(分类:工程陷阱)
问题:数据 Repository 的 web 层是 45.8 MB,但完整信号达 266.6 GB(训练 135 GB + 测试 133 GB),且 ZIP 包不含信号主体。研究者常误以为下载 ZIP 即可开始,或在小容量云盘上直接 wget 全库导致磁盘写满、BitTorrent 长时间挂起。
症状:解压后找不到
/training信号目录;磁盘写满后进程被终止;单例加载内存峰值超预期。解决:① 简单方法——先仅下载
RECORDS、age-sex.csv、score2018.py、示例条目(合计不足 1 MB),用单例tr04-0695(约 130 MB)跑通全流程后再决定是否拉取全库。② 进阶方法——用 BitTorrent(.challenge-2018.torrent,3.0 MB)支持断点续传与按文件挑选,或用aws s3 sync加--exclude/--include只同步需要的记录前缀。③ SOTA 方法——用 EEGDash 的EEGDashDataset(dataset="nm000225")流式加载,本地只缓存当前 batch 需要的记录,彻底规避本地存储需求。
参考:PhysioNet 数据页文件列表(https://physionet.org/content/challenge-2018/1.0.0/);EEGDash nm000225(https://huggingface.co/datasets/EEGDash/nm000225)。
⚠️ 坑点 8:把训练集内部交叉验证分数当作测试集成绩报告(分类:评估误用)
问题:官方测试集 989 例标签永久隐藏,任何"复现"都无法获得真实测试分数。研究者只能在训练集 994 例上做受试者级交叉验证,但常把交叉验证 AUPRC 直接与论文 Table 3 的测试集 AUPRC 并列比较,造成"我的模型超过冠军"的错误结论。
症状:报告中出现"我们的方法 AUPRC 0.75,显著优于冠军 0.54"这类不可比断言;审稿人要求测试集分数时无法提供。
解决:① 简单方法——明确区分"训练集交叉验证 AUPRC"与"官方测试集 AUPRC",在表格中单独列出并用脚注说明不可直接比较;训练集交叉验证通常显著偏高,因为它与超参选择共享同一批数据。② 进阶方法——报告时附上官方
results.csv中可比条目的分数及其算法描述,说明差异来源(模型结构、通道使用、预训练等)。③ SOTA 方法——通过外部数据集(SHHS、MESA、MASS)做真实泛化评估,用域外性能替代不可得的官方测试集性能作为主要证据,并公开完整评估协议。
参考:论文 §2.1(“The test set labels … will remain so to enable follow-up works”);PhysioNetresults.csv。
§6.6 数据增强
| 增强方式 | 安全等级 | 说明 | 建议参数 |
|---|---|---|---|
| 通道随机置零(模拟电极脱落) | ✅ 安全 | PSG 中电极脱落极常见,与真实失效模式一致 | 概率 5%,单次置 1–2 路 |
| 小幅高斯噪声 | ✅ 安全 | 模拟放大器噪声,量级需远小于信号幅值 | σ = 0.01(归一化后) |
| 时间平移(窗内小幅抖动) | ✅ 安全 | 改变事件在窗内的位置,不改变标签语义 | ±1 秒以内 |
| 幅度缩放(每通道独立 0.9–1.1) | ✅ 安全 | 模拟电极阻抗差异导致的增益漂移 | 比例 0.9–1.1 |
| 通道随机丢弃(只保留 3–5 路) | ✅ 安全 | 用于训练对通道缺失鲁棒的模型 | 训练后期逐步加大 |
| 随机裁切 + 拼接不同记录片段 | ⚠️ 谨慎 | 会产生不合生理的过渡边界,可能引入伪特征 | 仅用于自监督预训练 |
| 时间反转 / 频率轴掩码(SpecAugment 风格) | ❌ 危险 | 觉醒的生理时序(呼吸事件先于觉醒)被破坏;高频掩码会抹去 alpha/theta 频段 | 禁用或极窄 |
| 跨受试者混音(mixup) / 生成式合成觉醒 | ❌ 危险 | 混合不同患者的信号后标签语义不明确;生成模型易合成不符合 AASM 定义的伪觉醒 | 仅限研究并严格验证 |
核心原则:增强必须尊重觉醒事件的时序因果结构(呼吸事件 → 皮层觉醒),凡是破坏这一先后关系的增强都属危险类。
§6.7 模型推荐
| 模型类型 | 代表架构 | 输入形式 | 相对表现 | 推荐场景 |
|---|---|---|---|---|
| 卷积时序网络 | 1D-CNN / ResNet-1D | 原始信号窗(13 × T) | 中高 | 基线首选,训练快 |
| 时序卷积网络 | TCN(因果卷积 + 空洞) | 长窗(5 分钟) | 高 | 需要长感受野、可并行 |
| 序列标注网络 | U-Net(1D 编码-解码) | 长窗 | 高(挑战赛前 10 名多用) | 逐样本密集预测,首选 |
| 循环网络 | BiLSTM / GRU | 特征序列 | 中 | 与 CNN 前端组合 |
| Transformer | 时序 Transformer / Performer | 长窗 patch | 高(需大显存) | 数据充足或预训练后 |
| 混合架构 | CNN + BiLSTM + Attention | 原始信号 | 高 | 挑战赛冠军采用的典型范式 |
| 多任务网络 | 觉醒检测 + 睡眠分期双头 | 共享编码器 | 高 | 利用分期上下文降低假阳性 |
| 传统机器学习 / 单通道轻量模型 | 梯度提升树 / 小型 CNN(仅 C3-M2) | 频带功率、HRV 特征 / 单通道 | 低-中 / 中(明显低于多通道) | 可解释性基线 / 可穿戴设备部署 |
选型建议:从 U-Net 1D 或 TCN 起步,逐样本输出;确认基线后可加入睡眠分期多任务头;最终如需冲榜再上 Transformer。论文 §6 指出前 10 名中 8 个使用神经网络,但底部 10 名中也有 4 个使用神经网络,说明架构选择远比"是否用深度学习"重要。
§6.8 硬件需求
| 任务规模 | 最小配置 | 推荐配置 | 说明 |
|---|---|---|---|
| 单例调试 | 8 GB 内存,无 GPU | 16 GB 内存 | 单例 .mat 约 130 MB,加载峰值约 8 GB |
| 全库预处理 | 300 GB 存储 + 32 GB 内存 | 1 TB NVMe + 64 GB 内存 | 需容纳 266.6 GB 原始 + npz 缓存 |
| 训练 1D-CNN 基线 | 8 GB 显存 | 16 GB 显存 | 批大小 32、窗长 30 秒 |
| 训练 U-Net / TCN(5 分钟窗) | 16 GB 显存 | 24–40 GB 显存 | 长窗显存占用随长度线性增长 |
| 训练 Transformer | 24 GB 显存 | 80 GB 显存或多卡 | 注意力复杂度随窗长平方增长 |
| 全库推理(994 例) | 8 GB 显存 | 16 GB 显存 | 推理显存约为训练的 1/3 |
存储提示:原始 266.6 GB 加上标准化后的 npz 缓存(float32 约为原始 2 倍)后可达 800 GB 量级,建议在预处理阶段直接做 int16 量化的 npz 以节省空间。
§6.9 评估指标实现
"""CinC 2018 官方指标:gross AUPRC(整库层面,排除不计分区)"""
import numpy as np
def gross_auprc(y_true, y_score, n_thresholds=1000):
"""y_true: 1=目标觉醒, 0=非觉醒(−1 必须已剔除);y_score: 概率。"""
y_true = np.asarray(y_true).ravel()
y_score = np.asarray(y_score).ravel()
assert y_true.shape == y_score.shape
assert set(np.unique(y_true)).issubset({0, 1}), "存在未剔除的 −1 不计分区"
n_pos = (y_true == 1).sum()
if n_pos == 0:
return float("nan")
auprc, prev_recall = 0.0, 1.0
for j in range(1, n_thresholds + 1):
sel = y_score >= j / n_thresholds
if sel.sum() == 0:
continue
tp = (y_true[sel] == 1).sum()
recall = tp / n_pos
auprc += (tp / sel.sum()) * (prev_recall - recall) # precision × Δrecall
prev_recall = recall
return float(auprc)
def event_level_f1(onset_true, onset_pred, tol=3.0):
"""事件级 F1:起止时刻差在 tol 秒内视为命中。"""
used, tp = set(), 0
for op in sorted(onset_pred):
for i, ot in enumerate(sorted(onset_true)):
if i not in used and abs(op - ot) <= tol:
tp += 1; used.add(i); break
fp, fn = len(onset_pred) - tp, len(onset_true) - tp
prec = tp / (tp + fp) if tp + fp else 0.0
rec = tp / (tp + fn) if tp + fn else 0.0
return 2 * prec * rec / (prec + rec) if prec + rec else 0.0
使用要点:调用前必须先把 −1 位置从 y_true 与 y_score 中同步剔除;官方粒度是 1000 个阈值,粒度变化会轻微改变结果。事件级 F1 在 tol = 3 秒时的口径与临床觉醒判读精度大致对应,通常与点级 AUPRC 高度相关但更易解释。
§6.10 MLOps 笔记
| 环节 | 建议做法 | 理由 |
|---|---|---|
| 数据版本 | 固定使用 v1.0.0,并记录 SHA256SUMS.txt 校验结果 |
数据曾于 2018-05 更新标注,版本漂移会破坏可比性 |
| 标签版本 | 显式声明使用初版标注还是 new-arousals.zip |
两者正类位置存在差异 |
| 实验追踪 / 检查点 | 记录 record_id 列表、随机种子、归一化统计量哈希;按折保存最佳模型并附混淆计数(TP/FP/FN) | 受试者级切分是结果可比的前提;gross AUPRC 由混淆计数推导,便于复算 |
| 推理服务 | 输入 13 通道 200 Hz 原始信号,输出逐样本概率 | 服务内完成全部预处理,不假设上游已归一化 |
| 漂移监控与伦理 | 监控通道数、饱和比例、SaO2 分布;部署前做跨中心验证 | 训练人群以中老年男性为主,直接部署有公平性风险 |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 选择偏倚(人群) | 全部为 MGH 睡眠实验室的临床转诊患者,表现为中老年(均值 55 岁)、超重(BMI 均值 33)、男性为主(65%)、AHI 中度升高(均值 19),非社区人群 | 高 | 跨人群外部验证;在 SHHS/MESA 等社区队列上重测 |
| 选择偏倚(就诊类型) | 41.8% 为诊断性检查、58.2% 涉及 CPAP 滴定(分夜或整夜),后者睡眠结构受正压治疗影响 | 中 | 按就诊类型分层分析;报告仅诊断性子集的性能 |
| 单中心偏倚 | 数据全部来自一家美国东北部三级医院,设备、技师判读风格、患者构成均单一 | 高 | 跨中心外部验证;与 MASS/ISRUC 等异构队列对比 |
| 标签偏倚(单评分员) | 7 名技师各判读一部分,每份 PSG 仅一人判读,未公开评分者间一致性 | 中-高 | 保守估计性能上限;报告事件级 F1 时说明判读噪声 |
| 类别不平衡偏倚 | 正类(目标觉醒)在样本级占比极低,且事件类型高度集中于 RERA(43,822 次)与自发性(70 次)之比约 626:1 | 高 | 使用 AUPRC(对不平衡不敏感)而非准确率;分层采样;类权重 |
| 任务定义偏倚 | 14.5% 的训练集标签为 −1 不计分区,且不计分区非随机分布(集中在呼吸事件与清醒段),可能系统性地移除"难例" | 中 | 显式建模掩码;报告有效样本覆盖率 |
| 性别与时间偏倚 | 男性占 65%,削弱女性样本建模质量;采集年份未披露,无法评估标准演进 | 中 | 按性别分组报告性能;仅作单时点快照使用 |
§7.2 标注质量
标注流程的可靠性来源。 标注由 7 名 MGH 认证睡眠技师完成,遵循 AASM 判读手册,睡眠分期以 30 秒非重叠 epoch 判读,觉醒事件标注起止时刻。挑战赛还发布了更新版标注 new-arousals.zip(26.8 MB),说明组织方在赛程中识别并修正了初版标注的问题——这一修订行为本身是质量治理的正面信号。
标注质量的已知弱点。 第一,单评分员制意味着每份 PSG 只被一人判读,没有交叉复核,标签中嵌入了该技师的判读习惯;官方未公布评分者间一致性系数(如 Cohen’s kappa)。第二,觉醒判读本身的主观性较高,文献中报告的觉醒事件级判读者间一致率通常在 kappa 0.6–0.8 之间,即人类专家也无法完全一致。第三,13 类事件的边界存在歧义,例如 RERA 与低通气呼吸的区分依赖呼吸事件的幅度阈值;训练集中 RERA 达 43,822 次而部分类别仅个位数(潮式呼吸 3 次、噪声 1 次),罕见类别的标注可靠性无法通过统计检验。
对建模的实际含义。 标签噪声为性能设置了事实上限。当模型在受试者级交叉验证中达到 AUPRC 0.6 以上时,进一步提升可能已进入"学习判读者偏好"而非"学习生理规律"的区间。建议在报告中诚实地讨论这一上限,而非无限追求指标提升。
§7.3 泛化性风险
| 应用场景 | 失效风险 | 证据 |
|---|---|---|
| 社区人群筛查(AHI 较低、无主诉) | 高 | 训练人群 AHI 均值 19 且均为临床转诊,健康人群的觉醒模式分布不同 |
| 儿科睡眠监测 | 极高 | 队列年龄范围 18–93 岁,完全不含儿童;儿童觉醒判读标准与成人不同 |
| 女性为主的队列 | 高 | 男性占 65%,女性样本的建模质量未经验证 |
| 其他品牌 PSG 设备 / 可穿戴单通道设备 / HSAT | 中-高至高 | 单中心设备配置不可迁移;13 通道降级到 1–3 通道的退化幅度未量化;HSAT 通常不含 EEG |
| 亚洲/欧洲人群 | 中-高 | 单中心美国数据,颅面结构与呼吸暂停表型存在人群差异 |
| 同中心不同年份 | 中 | 判读标准可能随 AASM 手册改版而变化,标注版本间已见差异 |
§7.4 伦理考量
伦理审批与知情同意。 论文明确说明 “The Partners Institutional Review Board approved retrospective analysis of the MGH dataset without requiring additional consent”,即数据使用经正规 IRB 审查并获批豁免额外知情同意,符合回顾性研究在去标识化前提下的通行伦理标准。
隐私保护措施。 公开数据以 trXX-XXXX / teXX-XXXX 编码标识受试者,不包含姓名、出生日期、病历号等直接标识符;人口学信息仅释放年龄与性别(age-sex.csv,29.1 KB)。信号波形本身不含可识别个体的信息,但 EEG 存在理论上被用于个体识别的可能性,在开放共享语境下属低但非零风险。
开放共享的正当性与使用者责任。 数据集采用 ODC-BY 1.0 许可,任何人可自由获取与再利用,仅需保留署名;这一政策与睡眠医学领域"算法可复现性差、各研究自行划分数据无法比较"的长期痛点直接相关。使用者仍应避免:尝试重新识别个体;将模型直接用于临床诊断而不做外部验证;在未说明人群局限性的情况下发布"睡眠觉醒检测准确率 X%"这类笼统结论——模型性能在儿科、女性、社区人群上的退化是已知风险,部署时必须在目标人群中重新验证。
§7.5 公平性
| 维度 | 数据现状 | 潜在不公平 | 建议检查 |
|---|---|---|---|
| 性别 | 男性 65%、女性 35%;训练集 67%/33%,测试集 63%/37% | 女性样本量较小,模型在女性上的灵敏度可能系统性偏低 | 按性别分组报告 AUPRC 与灵敏度,检查差距是否超过 0.05 |
| 年龄 | 均值 55 岁,范围 18–93 岁 | 年轻受试者样本稀疏,老年受试者的觉醒基线频率天然更高 | 按年龄段(18–40 / 41–60 / 61+)分层评估 |
| 体型 / 呼吸暂停严重度 | BMI 均值 33(肥胖区间);AHI 均值 19(标准差 14.4) | 正常体重与低 AHI 人群样本少,模型可能偏向呼吸驱动觉醒 | 按 BMI 与 AHI 分层评估,特别关注 AHI < 5 的亚组 |
| 就诊类型 | 41.8% 诊断性,58.2% 涉及 CPAP | CPAP 滴定患者处于治疗中,其觉醒模式不同于未治疗者 | 按就诊类型分组评估 |
| 种族/族裔 | 官方未披露 | 无法评估种族维度的公平性 | 明确声明该维度不可评估,属数据局限 |
实践建议:在任何基于本数据集的模型报告中,至少给出性别与年龄两个维度的分组指标。若某亚组样本量不足(如女性测试折样本过少),应报告置信区间而非点估计,避免把统计噪声误读为公平或不公平。
§7.6 数据漂移
| 漂移类型 | 表现 | 监测方法 | 应对 |
|---|---|---|---|
| 标注版本漂移 | 初版标注与 new-arousals.zip 的正类位置存在差异 |
固定标签版本并记录哈希 | 所有实验统一使用同一版本;论文中显式声明 |
| 设备漂移 | 同中心更换放大器或电极后,信号幅值与噪声特征变化 | 监控各通道均值/标准差与饱和比例 | 重新计算归一化统计量;必要时做域适应 |
| 人群漂移 | 转诊标准变化导致人群 AHI 分布迁移 | 监控输入 AHI 代理(呼吸事件密度) | 按新人群重新校准决策阈值 |
| 判读标准与概念漂移 | AASM 手册改版或治疗手段变化改变觉醒定义与病因结构 | 与相近时代中心对比、监控 RERA 占比 | 重建标签、重新训练并更新先验 |
| 信号质量漂移 | 居家监测替代实验室监测导致伪迹比例上升 | 监控信噪比与坏通道比例 | 引入质量分级与拒绝机制 |
特别提示:本数据集的采集年份未披露,因此无法建立时间序列来直接测量漂移。使用者应把数据集视为"某一时点的单中心快照",在长期部署中建立独立的漂移监控,而不是假设训练分布会保持稳定。
§7.7 DAIMS 24 项评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 信号为 (N 采样点 × 13 通道) 标准宽格式,无需长宽转换 |
| 2 | 唯一标识 | ✅ | 受试者以 trXX-XXXX / teXX-XXXX 唯一编码,1,983 例无重复 |
| 3 | 特殊字符 | ✅ | 文件与目录名仅含字母、数字与连字符,无空格或非 ASCII 字符 |
| 4 | 重复行 | ✅ | 每位受试者仅一份记录,无重复记录 |
| 5 | 缺失编码 | ✅ | 明确使用 −1 表示"不计分区",语义清晰且文档完整 |
| 6 | 标签标识 | ✅ | 三值向量(+1/0/−1)定义明确,睡眠分期与事件类型枚举完备 |
| 7 | 罕见类分组 | ⚠️ | 13 类事件中多类为个位数(潮式呼吸 3、噪声 1),无法单独建模;主任务已通过目标觉醒定义把它们合并为二分类 |
| 8 | 偏倚评估 | ⚠️ | 官方文档未做系统性偏倚分析;本 Wiki §7.1 依据论文 Table 1/2 补充了人群、性别、类别不平衡等偏倚说明 |
| 9 | 数据字典 | ✅ | PhysioNet 数据页提供信号表(Table 4)、文件表(Table 5)与字段说明 |
| 10 | 信息性缺失解释 | ✅ | "不计分区"的构造规则在论文 §3 与数据页中完整说明 |
| 11 | 设备记录 | ⚠️ | 描述了电极位置、参考电极、采样率与单位,但放大器与传感器品牌型号未披露 |
| 12 | 共线性 | ⚠️ | 6 路 EEG 与 2 路呼吸努力之间存在高度相关;官方未提供共线性说明,需自行做通道相关性分析 |
| 13 | 编码映射 | ✅ | 提供睡眠分期编码与 13 类觉醒事件枚举,可直接映射到 AASM 术语 |
| 14 | 时间戳处理 | ✅ | 事件级标注含起始时刻与时长;逐样本向量以 200 Hz 索引,时间基一致 |
| 15 | 划分建议 | ✅ | 官方提供按 AHI 分层的固定划分(994/989),KS 检验 p = 0.97 |
| 16 | 泄漏讨论 | ⚠️ | 论文仅声明训练/测试无重复受试者;未讨论窗口级切分泄漏,本 Wiki §5.3 补充了五类泄漏风险 |
| 17 | 标签分布 | ✅ | 论文 Table 2 完整给出 13 类事件计数与睡眠阶段分布 |
| 18 | 测量偏倚 | ⚠️ | 单评分员制、无公开一致性系数,标签含判读偏好;官方未评估 |
| 19 | 外部验证建议 | ❌ | 官方未提供外部验证方案;测试集标签永久隐藏,社区无法在官方测试集上验证 |
| 20 | 版本记录 | ✅ | 版本号 1.0.0,文件时间戳与发布日志完整(2018-02 至 2021-04) |
| 21 | 预处理脚本 | ✅ | 提供 score2018.py / score2018.m / score.py,另有 sample.zip 与 sample-matlab.zip 可运行示例 |
| 22 | 合规要求 | ✅ | ODC-BY 1.0 许可清晰,开放获取无需申请;论文以 CCAL 3.0 发布 |
| 23 | 多模态对齐 | ✅ | 13 路信号全部重采样至 200 Hz 并严格同步,SaO2 经 sample-and-hold 对齐 |
| 24 | 去标识化 | ✅ | 编码化受试者 ID,仅释放年龄与性别;IRB 批准回顾性分析 |
DAIMS 评分:20 / 24
评分解读:优秀——数据格式、标注编码、划分方案与合规文档达到教科书级水准,开放许可与官方预处理脚本使其在可复现性上超过绝大多数临床数据集。扣分的 4 项几乎全部落在"官方未主动提供"的分析层:外部验证建议缺失(且测试标签永久隐藏使外部验证在官方口径下不可行)、偏倚与测量误差的系统性评估缺失、共线性未说明、部分设备信息未披露。
对你意味着什么:CinC 2018 的 20 个 ✅ 项意味着你可以直接开跑,不必花时间清洗格式或破解标签语义——三级编码(受试者/记录/采样点)、明确的三值标签、官方评分脚本都已就位,这是它远比多数临床数据集好用的原因。但 4 个 ⚠️/❌ 项提醒你三件必须自己做的事:第一,外部验证要自己设计,因为官方测试集永远拿不到分数,跨中心验证(SHHS/MESA/MASS)是唯一可信的泛化证据;第二,偏倚与公平性要自己分析,官方完全不提供,而该队列 65% 男性、均值 55 岁的特征必然导致亚组性能差异,不报告就是不诚实;第三,通道共线性要自己检查,6 路 EEG 与 2 路呼吸努力高度相关,盲目堆叠通道可能只是在重复同一信息,通道消融实验比堆通道更能说明模型真正学到了什么。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| EEGDash nm000225 镜像 | NEMAR / EEGDash | 数据加载与通道一致性验证 | 13 通道、200 Hz、1,983 记录 | 无变化(同一数据的镜像) | 确认镜像元信息与官方一致(15,261.2 小时、401.1 GB) |
| Braindecode 标准化元信息包 | Braindecode / Zenodo | 元数据可用性验证 | age-sex.csv 与睡眠记录表 | 无变化 | 提供标准的 sleep_records.csv 与 SHA1 校验,便于复现数据准备 |
| SleePyCo 预处理管线 | gist-ailab | 单通道 C3-M2 睡眠分期 | 100 Hz 重采样、30 秒 epoch | 通道降级 | 证明该数据集可降级用于单通道睡眠分期任务 |
| torch_ecg CINC2018 类 | Torch-ECG | 数据库接口兼容性 | 13 类觉醒事件枚举 | 无变化 | 内建 sleep_stage_names 与 arousal_types,可作为标签映射参照 |
| 挑战赛衍生论文(Physiological Measurement 焦点专刊) | 多个参赛团队 | 相同任务的独立方法复现 | 各团队自报 AUPRC | 官方未统一口径 | 官方鼓励用更新后的测试结果提交,但测试标签仍不公开 |
| 重要说明:本数据集的"外部验证"在官方口径下不存在标准答案——989 例测试集标签永久隐藏,任何声称在官方测试集上取得分数的复现都不可核实。上表所列均为生态适配与工具链验证,而非严格的域外性能验证。真正的外部验证必须使用完全独立的第三方队列(如 SHHS、MESA、MASS),且需明确处理觉醒定义差异。 |
§8 基准性能与生态
§8.1 官方排行榜
下表为 2018 年挑战赛官方阶段(Official Phase)最终成绩,直接引用论文 Table 3。所有分数均在完整测试集(989 例)上以 gross AUPRC 计算,口径一致、可直接横向比较;但它们与任何在训练集上做交叉验证得到的分数不可直接比较(原因见坑点 8)。除冠军条目外,各条目的完整引用均为同一篇挑战论文(Ghassemi et al., 2018, CinC, DOI 10.22489/CinC.2018.049),源码见数据包的 papers/ 目录。
| 排名 | 团队/模型 | AUPRC | 关键技术 |
|---|---|---|---|
| 1 | Howe-Patterson, Pourbabaee & Benard | 0.54 | 深度学习多通道觉醒检测 |
| 2 | Kristjánsson, Þráinsson, Ragnarsdóttir, Marinósson, Gunnlaugsson, Finnsson, Jónsson, Helgadóttir & Ágústsson | 0.45 | 神经网络集成 |
| 3 | He, Wang, Liu, Zhao, Yuan, Li & Zhang | 0.43 | 深度序列模型 |
| 4 | Varga, Görög & Hajas | 0.42 | 梯度提升与神经网络的组合 |
| 5 | Patane, Ghiasi, Scilingo & Kwiatkowska | 0.40 | 生理信号特征工程 + 学习模型 |
| 6 | Miller, Ward & Bambos | 0.36 | 时序分类模型 |
| 6 | Warrick & Homsi | 0.36 | 卷积神经网络 |
| 8 | Bhattacharjee, Das, Choudhury & Banerjee | 0.29 | 深度学习 |
| 8 | Szalma, Bánhalmi & Bilicki | 0.29 | 信号处理 + 机器学习 |
| 10 | Parvaneh, Rubin, Samadani, Prakash & Katuwal | 0.21 | 特征工程方法 |
| 11 | Plešinger, Nejedly, Viscor, Andrla, Halámek & Jurák | 0.20 | 信号处理管线 |
| 12 | Zabihi, Rad, Särkkä, Kiranyaz, Katsaggelos & Gabbouj | 0.19 | 神经网络 |
| 13 | Schellenberger, Shi, Mai, Wiedemann, Steigleder, Eskofier, Weigel & Kölpin | 0.14 | 雷达/非接触传感延伸方法 |
| 14 | Li, Cao, Zhong & Pan | 0.10 | 深度模型 |
| 15 | Jia, Yu, Yan, Zhao, Xu, Hu, Wang & You | 0.10 | 混合方法 |
| 16 | Shen | 0.07 | 基础方法 |
| 非官方 1 | Li & Guan(错过摘要截止) | 0.55 | 深度学习(非官方最高分,论文 Table 3 脚注 †) |
| 非官方 2 / 3 | Bilal, Khan, Khan, Qureshi, Saleem & Kamboh ;Wang, Wang & Li | 0.15 / 0.07 | — |
必须注意的三点比较前提:
- 官方排名依据四舍五入到两位小数的 AUPRC 颁奖(论文 §5 原文:“We rounded to two decimal places for awarding prizes”),因此第 6 名与第 8 名出现并列,实际原始分数存在细微差异。
- 非官方条目 Li & Guan 的 0.55 高于官方冠军 0.54,但因错过摘要提交截止而被排除在正式排名之外。论文 §6 特别提到这一情况与冠军的 0.54 共同"表明自动觉醒检测是可实现的"。
- 全部条目均值 0.28、范围 0.07–0.55(论文 §6),方差极大。这说明该任务的难度很高,且不同方法之间的差距更多来自工程细节(预处理、通道选择、训练策略)而非架构本身的新颖性。
§8.2 SOTA 总结与选型建议
任务难度定位。 0.54 的冠军 AUPRC 意味着在召回全部觉醒样本的同时,查准率只能维持在约一半水平;若换算为常见的事件级 F1,大致对应 0.5 上下。考虑到人类专家的判读者间一致率上限(kappa 0.6–0.8),以及本数据集单评分员标注带来的额外噪声,该任务的实际可提升空间有限——能达到 0.6 以上的方法已接近标签噪声上限。
性能差异的主要来源与选型建议。 论文 §6 指出:22 支队伍中 13 个最终条目使用神经网络,前 10 名中 8 个、底部 10 名中 4 个也使用神经网络——"是否用深度学习"不是决定因素,真正的区分点在于是否充分利用多通道信息、是否处理极端类别不平衡、是否正确屏蔽不计分区、以及感受野是否匹配觉醒的持续时间尺度(3–15 秒)。若以复现 0.5 为目标,推荐 U-Net 1D 或 TCN 逐样本输出,配合加权二元交叉熵与掩码,输入 13 通道 30 秒至 5 分钟窗口;若要超越冠军,重点应放在更长的时间上下文、多任务学习(同时预测呼吸事件与睡眠分期)与自监督预训练。
§8.3 评测协议
| 协议要素 | 官方设定 | 复现建议 |
|---|---|---|
| 指标定义 | gross AUPRC(整库层面计算精确率-召回率曲线) | 直接调用 score2018.py,勿自行实现 |
| 阈值粒度 | j/1000,j = 1…1000 | 保持 1000,粒度变化会轻微改变结果 |
| 评分区域 | 仅 +1 与 0 区域;−1 不计分区排除 | 评估前同步剔除 −1 |
| 预测形式 | 逐采样点概率(.vec 文本文件,每行一个概率) | 模型输出需做 sigmoid 并保证长度与信号一致 |
| 数据长度不符处理 | 过短截断、过长补零;条目运行失败视为全零向量输出 | 严格保证输出长度 |
| 计算预算 | 1.2×10^13 CPU 指令(约 3.5 小时),但未纳入计分 | 复现时无需受此限制,但应报告推理耗时 |
| 提交次数 | 官方阶段每队最多 2 个条目 | 无(当前无提交入口) |
| 结果可比性 | 仅官方测试集分数可比 | 训练集交叉验证分数须标注口径 |
§8.4 相关数据集
| 数据集 | 关系 | 规模 | 主要差异 |
|---|---|---|---|
| SHHS(Sleep Heart Health Study) | 同为 PSG 睡眠研究,可作外部验证 | 约 6,400 例 | 社区队列、30 秒 epoch 标签、含随访结局 |
| MESA Sleep | 外部验证候选 | 约 2,000 例 | 多族裔、附带心血管影像 |
| Sleep-EDF Expanded | 教学与快速基线 | 197 例 | 通道少、体量小 |
| MASS(Montreal Archive of Sleep Studies) | 外部验证候选 | 200 例 | 健康与多种睡眠障碍混合 |
| ISRUC-Sleep | 外部验证候选 | 126 例 | 分组明确(健康/两组障碍) |
| CAP Sleep Database | 觉醒相关研究 | 108 例 | 提供周期性交替模式相位标注 |
| MrOS Sleep Study | 大规模预训练语料 | 逾 5,000 例 | 老年男性队列,与 CinC 2018 人群部分重叠 |
§8.5 关键论文
-
Ghassemi MM, Moody BE, Lehman LH, Song C, Li Q, Sun H, Mark RG, Westover MB, Clifford GD. You Snooze, You Win: the PhysioNet/Computing in Cardiology Challenge 2018. 2018 Computing in Cardiology Conference (CinC), 2018, Vol. 45, pp. 1–4. DOI 10.22489/CinC.2018.049. — 挑战赛官方描述论文,定义了数据、任务、目标觉醒规则与 gross AUPRC 指标,并给出 19 支队伍的最终成绩与局限性的完整讨论。任何使用该数据集的工作都应引用此文。
-
Goldberger A, et al. PhysioBank, PhysioToolkit, and PhysioNet: Components of a new research resource for complex physiologic signals. Circulation, 2000, 101(23): e215–e220. — PhysioNet 平台奠基论文,所有 PhysioNet 资源的标准引用。
-
Pollard T, et al. PhysioNet as a global platform for biomedical research. Nature Health, 2026, 1(8): 792–795. DOI 10.1038/s44360-026-00096-z. — PhysioNet 平台最新描述,可作为平台级引用。
-
Braindecode(Zenodo). SleepPhysionetChallenge2018 meta information [Data set]. Zenodo, 2024. — 标准化元信息包,提供
age-sex.csv、sleep_records.csv与训练/测试 SHA1 校验和,使数据准备流程可复现。 -
Perslev M, et al. U-Sleep: resilient high-frequency sleep staging. npj Digital Medicine, 2021, 4:72. — 高频率睡眠分期代表性工作,其在多个 PSG 数据集(含 PhysioNet 2018)上的迁移评估为多数据集联合建模提供了范式。
-
Supratak A, Guo Y. TinySleepNet: An Efficient Deep Learning Model for Sleep Stage Scoring based on Raw Single-Channel EEG. EMBC 2020. — 单通道轻量建模代表,对"从 13 通道降级到单通道"的性能代价提供了量化基线。
-
Phan H, Mikkelsen K. Automatic sleep staging of EEG signals: recent development, challenges, and future directions. Physiological Measurement, 2022, 43(4): 04TR01. — 领域综述,整理睡眠信号自动分析的方法脉络,并讨论觉醒检测与睡眠分期的关系。
§8.6 社区活跃度
| 指标 | 现状 | 说明 |
|---|---|---|
| 挑战赛参赛队伍 | 22 支(论文 Abstract) | 2018 年最终评分 19 个条目 |
| 提交与用户数 | 624 次提交、34 名用户;37 个有效评分提交(24 名用户) | 其中 82% 为 dry-run 兼容性测试 |
| 论文引用量 | 189+(ResearchGate,截至 2026-09) | IEEE Xplore 显示 66 次被引,两平台口径不同 |
| 生态适配项目 | 至少 4 个(EEGDash、Braindecode/Zenodo、torch_ecg、SleePyCo) | 说明数据集已被工具链广泛接受 |
| 数据下载量 | 官方未披露 | PhysioNet 项目页面仅显示浏览计数 |
| 衍生专刊 / 挑战延续 | Physiological Measurement 焦点专刊(2019);PhysioNet Challenge 2026 仍以 PSG 为主题 | 后者任务改为预测认知障碍,数据与主题相关 |
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| PhysioNet 官方页面 | 数据与文档 | https://physionet.org/content/challenge-2018/1.0.0/ | 浏览 523 次 | 权威来源,含完整文件清单与评分脚本 |
| 官方挑战赛主页 | 规则与结果 | https://moody-challenge.physionet.org/2018 | — | 完整的赛程公告与最终排名 |
| PhysioNet 数据页(镜像) | 数据说明 | https://www.physionetchallenges.org/2018/data/ | — | 信号表(Table 4)与文件读取函数表(Table 5) |
| EEGDash nm000225 | 流式数据集 | https://huggingface.co/datasets/EEGDash/nm000225 | 上月下载 5 次 | 免下载全库,PyTorch/braindecode 友好 |
| Braindecode 元信息包 | 元数据 | https://zenodo.org/records/13823458 | 浏览 30 / 下载 185 次 | 标准化 sleep_records.csv 与校验和 |
| torch_ecg CINC2018 | 数据库类 | https://torch-ecg.readthedocs.io/en/latest/_modules/torch_ecg/databases/physionet_databases/cinc2018.html | — | 已封装格式差异,含标签枚举参照 |
| SleePyCo 预处理 | 预处理脚本 | https://deepwiki.com/gist-ailab/SleePyCo/3.4-physio2018-preprocessing | — | 提供 C3-M2 单通道与 100 Hz 重采样完整管线 |
| 官方评分脚本 | 评估代码 | score2018.py(8.0 KB)/ score2018.m(4.1 KB) |
— | gross AUPRC 的权威实现,勿自行改写 |
§9 相关资源与引用
§9.1 官方资源
| 资源 | 地址 | 说明 |
|---|---|---|
| PhysioNet 数据页面(v1.0.0) | https://physionet.org/content/challenge-2018/1.0.0/ | 权威下载入口,含完整文件清单与许可说明 |
| 挑战赛主页 / 概览页 | https://moody-challenge.physionet.org/2018 ;https://physionet.org/challenge/2018/ | 赛程公告、官方成绩、规则与截止时间;公告时间线 |
| 数据说明页 | https://www.physionetchallenges.org/2018/data/ | 信号表(Table 4)、文件表(Table 5)、三值向量定义 |
| 官方挑战论文 | https://doi.org/10.22489/CinC.2018.049 | 数据、任务、指标与局限性的权威描述 |
| 论文 PMC 全文 | https://pmc.ncbi.nlm.nih.gov/articles/PMC8596964/ | 免费全文(PMC8596964 / PMID 34796237) |
| 数据集 DOI | https://doi.org/10.13026/6phb-r450(v1.0.0)/ https://doi.org/10.13026/1q9b-ge17(最新版) | 版本化引用标识 |
| 评分脚本与更新标注 | score2018.py / score2018.m;new-arousals.zip(26.8 MB) |
随数据包发布,覆盖初版标注 |
§9.2 教程与社区资源
| 资源 | 类型 | 适用场景 |
|---|---|---|
| EEGDash 文档(https://eegdash.org) | 流式加载教程 | 免下载全库的原型开发 |
| Braindecode 文档(https://braindecode.org/) | 深度学习工具链 | 睡眠信号模型实现参考 |
| torch_ecg 文档 / SleePyCo 预处理说明 | 数据库接口与管线 | 标签枚举、格式转换与单通道分期 |
| PhysioNet 社区论坛 | 讨论 | 挑战赛期间的官方答疑存档 |
§9.3 BibTeX 引用
@inproceedings{ghassemi2018snooze,
title = {You Snooze, You Win: the PhysioNet/Computing in Cardiology Challenge 2018},
author = {Ghassemi, Mohammad M and Moody, Benjamin E and Lehman, Li-wei H and
Song, Christopher and Li, Qiao and Sun, Haoqi and Mark, Roger G and
Westover, M Brandon and Clifford, Gari D},
booktitle = {2018 Computing in Cardiology Conference (CinC)},
volume = {45},
pages = {1--4},
year = {2018},
publisher = {IEEE},
doi = {10.22489/CinC.2018.049}
}
@misc{challenge2018data,
title = {You Snooze You Win: The PhysioNet/Computing in Cardiology Challenge 2018},
author = {Moody, Benjamin E and Ghassemi, Mohammad M and Lehman, Li-wei H and
Mark, Roger G and Clifford, Gari D},
year = {2018},
publisher = {PhysioNet},
version = {1.0.0},
doi = {10.13026/6phb-r450},
url = {https://physionet.org/content/challenge-2018/1.0.0/}
}
@article{goldberger2000physionet,
title = {PhysioBank, PhysioToolkit, and PhysioNet: Components of a new research
resource for complex physiologic signals},
author = {Goldberger, Ary L and Amaral, Luis AN and Glass, Leon and Hausdorff, Jeffrey M
and Ivanov, Plamen Ch and Mark, Roger G and Mietus, Joseph E and Moody, George B
and Peng, Chung-Kang and Stanley, H Eugene},
journal = {Circulation},
volume = {101},
number = {23},
pages = {e215--e220},
year = {2000}
}
@article{pollard2026physionet,
title = {PhysioNet as a global platform for biomedical research},
author = {Pollard, Tom and Moody, Benjamin E and Lehman, Li-wei H and Gow, Brian J and
Fernandes, Chrystinne and Xie, Chen and Johnson, Alistair and Mark, Roger G and
Heldt, Thomas},
journal = {Nature Health},
volume = {1},
number = {8},
pages = {792--795},
year = {2026},
doi = {10.1038/s44360-026-00096-z}
}
§9.4 引用指南
使用本数据集时,必须同时引用挑战赛论文与数据资源本身。官方给出的标准做法是:引用 Ghassemi 等 2018 年的 CinC 论文说明数据来源与任务定义,引用 PhysioNet 资源条目(DOI 10.13026/6phb-r450)说明具体数据版本,并附带 Goldberger 等 2000 年的 PhysioNet 平台标准引用。
具体规范:
- 版本要写清:注明使用 v1.0.0,并说明是否使用了
new-arousals.zip更新标注,因为不同版本的正类位置存在差异。 - 划分要写清:说明是使用官方 994/989 划分,还是自行做受试者级交叉验证,并给出折数与随机种子。
- 指标要写清:明确标注是 gross AUPRC 还是逐记录平均 AUPRC,前者才可与论文 Table 3 对比。
- 局限要写清:提及单中心临床转诊人群(中老年、超重、男性为主)、单评分员标注、测试标签永久隐藏这三点局限,避免读者高估结论的普适性。
- 许可要遵守:ODC-BY 1.0 要求保留署名,任何再分发或衍生数据集都需注明原始来源与许可。
§10 AI 使用声明卡
§10.1 AI 参与范围
| 环节 | AI 参与方式 | 人工介入 |
|---|---|---|
| 事实检索 | 使用联网检索工具查阅 PhysioNet 官方页面、挑战赛论文 PDF、PMC 全文与生态项目文档 | 编辑部逐条核对来源 URL 与数值 |
| 章节撰写 | 依据 WRITER_BRIEF 与 WRITER_CONSTITUTION 生成初稿 | 编辑部审定医学表述与结构完整性 |
| 代码编写 | 生成 §6 的预处理、DataLoader 与评估指标代码 | 审核代码逻辑与 API 正确性 |
| 坑点提炼 | 从官方文档、论文 limitations 与生态项目实现中归纳 | 审核坑点的真实性与可操作性 |
| 队列数据核对 | 逐项比对生产队列条目与官方来源 | 编辑部确认纠错结论 |
§10.2 输入来源列表
- Ghassemi MM, Moody BE, Lehman LH, Song C, Li Q, Sun H, Mark RG, Westover MB, Clifford GD. You Snooze, You Win: the PhysioNet/Computing in Cardiology Challenge 2018. Computing in Cardiology, 2018, 45: 1–4. DOI 10.22489/CinC.2018.049. https://doi.org/10.22489/CinC.2018.049
- 论文 PMC 全文(PMC8596964 / PMID 34796237)。https://pmc.ncbi.nlm.nih.gov/articles/PMC8596964/
- 官方挑战论文 PDF。https://moody-challenge.physionet.org/2018/papers/challenge2018cinc.pdf
- PhysioNet 数据集页面 v1.0.0。https://physionet.org/content/challenge-2018/1.0.0/
- PhysioNet 挑战赛主页。https://moody-challenge.physionet.org/2018
- PhysioNet 数据说明页(信号表 Table 4 / 文件函数表 Table 5)。https://www.physionetchallenges.org/2018/data/
- PhysioNet 挑战赛概览页。https://physionet.org/challenge/2018/
- PhysioNet 单例记录页面(
tr04-0695文件清单)。https://www.physionet.org/content/challenge-2018/1.0.0/training/tr04-0695/ - EEGDash 数据集镜像 nm000225(含 API 说明)。https://huggingface.co/datasets/EEGDash/nm000225 ;https://eegdash.org/api/dataset/eegdash.dataset.NM000225.html
- Braindecode / Zenodo 元信息包。https://zenodo.org/records/13823458
- torch_ecg CINC2018 数据库类源码。https://torch-ecg.readthedocs.io/en/latest/_modules/torch_ecg/databases/physionet_databases/cinc2018.html
- SleePyCo Physio2018 预处理说明。https://deepwiki.com/gist-ailab/SleePyCo/3.4-physio2018-preprocessing
- Goldberger A, et al. PhysioBank, PhysioToolkit, and PhysioNet. Circulation, 2000, 101(23): e215–e220.
- Pollard T, et al. PhysioNet as a global platform for biomedical research. Nature Health, 2026, 1(8): 792–795. DOI 10.1038/s44360-026-00096-z
- Emory OpenEmory 论文记录(许可与资助信息)。https://open.library.emory.edu/concern/publications/9e0f2f7f-9612-47be-8189-6bd72de4ee16
- ResearchGate 论文引用统计(189 次引用,截至 2026-09)。https://www.researchgate.net/publication/330842996
- IEEE Xplore 作者页论文引用统计(66 次被引)。https://ieeexplore.ieee.org/author/37085547070
§10.3 生成方式说明
本词条的叙事文本、结构化表格、代码示例与坑点条目由 AI 依据上述公开来源生成初稿,所有数值(规模、比例、指标、文件大小、时间戳)均在生成后与官方来源逐条比对。凡官方未披露的字段(如具体采集年份区间、种族构成、设备品牌型号、评分者间一致性系数)一律标注为"官方未披露",未做任何推测性填充。
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1.0 30 秒速览与通俗叙事 | 千方病案医学编辑部 | 医学表述审查与术语核对 | ✅ 已通过 |
| §2.1 ICD-11 与 SNOMED CT 映射 | 千方病案医学编辑部 | 编码双重核对 | ✅ 已验证 |
| §2.2 疾病背景与流行病学数字 | 千方病案医学编辑部 | 与论文 Table 1/2 交叉比对 | ✅ 已验证 |
| §2.4 患者人群特征表 | 千方病案医学编辑部 | 与论文 Table 1 逐格核对 | ✅ 已验证 |
| §3.1 信号模态与通道参数 | 千方病案医学编辑部 | 与官方信号表 Table 4 逐项核对 | ✅ 已验证 |
| §4.1 DAIMS 字段字典 | 千方病案医学编辑部 | 与 WFDB 规范及官方文件说明比对 | ✅ 已通过 |
| §4.2 标签分布与事件计数 | 千方病案医学编辑部 | 与论文 Table 2 逐行核对 | ✅ 已验证 |
| §6.1–§6.4 代码示例 | 千方病案医学编辑部 | 逻辑审查与 API 正确性核对 | ✅ 已通过 |
| §6.5 八个坑点 | 千方病案医学编辑部 | 与官方文档及生态实现对照 | ✅ 已通过 |
| §7.1–§7.6 偏倚、泛化、伦理与公平性 | 千方病案医学编辑部 | 依据论文 Table 1/2 推导核对 | ✅ 已通过 |
| §7.7 DAIMS 24 项评分 | 千方病案医学编辑部 | 逐项复核并核对官方文档 | ✅ 已通过 |
| §8.1 官方排行榜 | 千方病案医学编辑部 | 与论文 Table 3 逐行核对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0–§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.5 公平性分析、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核日期
最后人工审核日期:2026-09-05(与 §0 审核日期一致)。
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- Sleep-EDF — 共享标签:生理信号 / 睡眠信号 / 时序数据
- mass — 共享标签:生理信号 / 睡眠信号 / 时序数据
- TUH EEG-Corpus — 共享标签:生理信号 / 时序数据 / 目标检测
- WESAD — 共享标签:生理信号 / 目标检测
- MIMIC-IV-Waveform — 共享标签:生理信号 / 时序数据
- SICdb — 共享标签:生理信号 / 时序数据
- mhealth — 共享标签:生理信号 / 时序数据
- isruc-sleep — 共享标签:生理信号 / 睡眠信号
- shhs — 共享标签:生理信号 / 睡眠信号
- mros-sleep — 共享标签:生理信号 / 睡眠信号
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

