信息速览
INFOBOX — BIDSleep 数据集一屏速览
维度 内容 本质 消费级 Apple Watch(IHR+加速度)与 Dreem 2 EEG 参考标签逐夜配对的多夜开放数据集 团队 University of Massachusetts Amherst(通讯资深作者 Joyita Dutta,生物医学工程系) 论文 IEEE Trans Biomed Eng. 2026 Apr;73(4):1596–1608(doi:10.1109/TBME.2025.3612158) 平台 PhysioNet(Open Access),Maintained by the MIT Laboratory for Computational Physiology 规模 47 名健康成人 × 至多 7 夜 = 253 夜;每夜 3 文件 模态 Apple Watch PGG 瞬时心率(约 0.2 Hz)+ 三轴加速度;Dreem 2 EEG 30 秒 epoch 睡眠分期 标签 AASM 标准 5 类:Wake / N1 / N2 / N3 / REM(+Unknown);自动 dreem_label + 专家 expert_label 双份 版本 v1.0.1(2026-09-25 更新作者名单);首发 v1.0.0(2026-05-12) DOI 版本 DOI 10.13026/rees-1092;latest 10.13026/hace-p847 许可 ODC-By v1.0(归属型开放许可) 一句话 想做"手表数据猜睡眠分期",这是目前少有的带 EEG 参考标签、开放直取、多夜配对的干净验证集
§0 导读:这个数据集解决什么问题
一句话定位:BIDSleep 数据集把消费级智能手表能拿到的两种信号——瞬时心率(Instantaneous Heart Rate, IHR)与三轴加速度计(accelerometry)——和一份研究级 EEG 设备给出的睡眠分期金标签逐夜对齐,让"用可穿戴信号推断睡眠阶段"这件事第一次有了开放、多夜、可复核的验证底座。
它要回答的痛点:
- 消费级设备的睡眠报告是黑箱。Apple Watch、Fitbit 这类手表都会给出"深睡/浅睡/REM"的摘要,但底层算法是厂商私有且不透明的,研究者无法审计、无法复现、无法改进。BIDSleep 直接发布原始 IHR 与加速度序列,绕开黑箱。
- 缺可穿戴信号 + EEG 金标签的配对公开数据。传统睡眠分期金标准是多导睡眠图(Polysomnography, PSG),成本高、导联多、难做大规模多夜研究。市场上要么只有手表自报标签(无金标准),要么只有临床 PSG(非可穿戴信号)。把两者配对的开放数据极少。
- 单夜数据无法研究夜间的个体内变异。睡眠随夜波动,只测一晚的算法很难评估跨夜稳定性。本数据集每人最多 7 夜,天然支持多夜分析。
一句话结论:如果你要做可穿戴睡眠分期——尤其是"心率 + 运动 → 睡眠阶段"这条技术路线——BIDSleep 是一个绕不开的开放验证集。但它不是 PSG,参考标签来自 Dreem 2 头带,只有一名专家复核,样本仅 47 人健康成人——用它当"金标准"时必须清楚这些边界。
§1 数据集速览:十问十答
| # | 问题 | 答案 |
|---|---|---|
| 1 | 官方全名是什么? | A Multi-Night Instantaneous Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels |
| 2 | 谁做的、哪里找? | UMass Amherst(通讯 Dutta)→ PhysioNet 开放获取,DOI 10.13026/rees-1092 |
| 3 | 多少人、多少夜? | 47 名健康成人,每人至多 7 夜,共 253 夜 |
| 4 | 有哪些信号? | Apple Watch:IHR(约 0.2 Hz)+ 三轴加速度;Dreem 2:EEG 衍生睡眠分期 |
| 5 | 标签怎么来的? | Dreem 2 自动评分(AASM 标准,30 秒 epoch)+ 单一专家逐 epoch 复核修正 |
| 6 | 分几类? | 5 类:Wake / N1 / N2 / N3 / REM(外加 Unknown 编码 5) |
| 7 | 文件长什么样? | 每夜 3 文件:hr.csv、motion.csv、labels.mat;每受试者一个文件夹 |
| 8 | 许可与费用? | ODC-By v1.0 归属型开放许可,免费,署名即可用 |
| 9 | 需要申请吗? | 不需要申请,Open Access 直取(但存在按地区的内容限制,见 §6) |
| 10 | 最该注意什么? | 参考标签是 Dreem 2 非 PSG;单专家无交叉验证;健康成人小样本,泛化需谨慎 |
速记卡(30 秒决策):
- ✅ 适合:可穿戴睡眠分期算法开发与验证、心率+运动多模态建模、消费级设备可靠性研究、跨多夜泛化研究。
- ⚠️ 慎用:需要临床级 PSG 金标签的任务、需要睡眠障碍人群样本的任务、需要大样本统计推断的任务。
- ❌ 不适合:把 Dreem 标签当作绝对真值(ground truth)做临床结论。
§2 数据构成与规格
2.1 规模、来源与机构构成
BIDSleep 的规模可以一句话概括:47 名健康成人,每人至多 7 夜,累计 253 夜。数据集物理组织为 47 个受试者级文件夹,每个文件夹装 3 至 7 夜原始数据。
| 维度 | 数值 | 说明 |
|---|---|---|
| 受试者数 | 47 | 健康成人志愿者,社区广告传单招募 |
| 单人夜数 | 3–7(至多 7) | 个体间不一致,非每人都拿到 7 夜 |
| 总夜数 | 253 | 全数据集累计 |
| 文件夹数 | 47 | 一个受试者一个目录 |
| 每夜文件数 | 3 | hr.csv / motion.csv / labels.mat |
| epoch 分辨率 | 30 秒 | AASM 标准睡眠分期步长 |
| 阶段类别 | 5(+Unknown) | Wake/N1/N2/N3/REM |
来源机构:University of Massachusetts Amherst。页面作者机构标注中,通讯资深作者 Joyita Dutta 归属该校生物医学工程系(Profile jd293952);Tzu-An Song 标注为 “The Department of Biomedical Engineering at the University of Massachusetts Amherst”(Profile bidslab);Yubo Zhang、Ziyuan Zhou 均标注 “University of Massachusetts Amherst”。
双口径提示:页面 Abstract 与 Methods 段写研究方案由 “University of Massachusetts Lowell Institutional Review Board” 批准,而作者机构全部标注为 Amherst。此 IRB 机构标注与作者机构不一致未在页面澄清,本节按原文双写存照(详见 §10 存照清单)。
2.2 三类文件的格式与字段
每夜(subject-night)固定三个文件,等价于"两种设备、三种模态":
hr.csv —— 瞬时心率(IHR)
- 来源:Apple Watch 的 PPG(光电容积脉搏波)传感器,经 HealthKit 输出。
- 单位:bpm(每分钟心跳数)。
- 采样率:约 0.2 Hz(即约 5 秒一个点,非连续波形,而是离散的瞬时心率点)。
- 每行含一个时间戳,Unix 时间(秒,带亚秒精度)。
motion.csv —— 三轴加速度计
- 来源:Apple Watch。
- 内容:x、y、z 三轴加速度数据。
- 每行含一个 Unix 时间戳(秒,带亚秒精度)。
labels.mat —— 睡眠分期标签(MATLAB 格式)
recStart:记录起点时间戳。dreem_label:Dreem 设备自动睡眠分期,整数编码 0=Wake, 1=N1, 2=N2, 3=N3, 4=REM, 5=Unknown。expert_label:睡眠专家手工修正分期,编码与上面一致。
关键设计:
dreem_label与expert_label双双保留。这意味着研究者既能复现"直接用 Dreem 自动标签"的基线,也能对比"专家修正标签"的影响——一个很实用的自带消融维度。
2.3 时间对齐:三行公式搞定跨设备同步
跨设备数据集最棘手的是时间对齐。BIDSleep 用同一部 Apple iPhone 同时接收两台设备的数据,建立共同时间参考,尽量降低错位。对齐逻辑清晰且可复现:
hr.csv/motion.csv的时间戳是 Unix 时间(自 1970-01-01 UTC 起的秒数,浮点、亚秒精度)。labels.mat的recStart是记录起点(原始为 Unix 时间,存储时转成 US/Eastern 时区的可读格式)。- 第 k 个睡眠 epoch 的时间区间为:
第 1 个 epoch: [recStart, recStart + 30s)
第 k 个 epoch: [recStart + 30×(k−1), recStart + 30×k)
- 给定任一 IHR/加速度时间戳 t,其对应 epoch 序号 k = floor((t − recStart) / 30) + 1。
Python 转换示例(页面给出):
import datetime
import pytz
dt = datetime.datetime.strptime("2021-12-02 23:11:25", "%Y-%m-%d %H:%M:%S")
dt = pytz.timezone("US/Eastern").localize(dt)
unix_time = dt.timestamp()
对齐三步走:① 把 recStart 转成 Unix 时间;② 每个标签对应 recStart 之后一个 30 秒 epoch;③ 用公式把任意信号时间戳映射到睡眠阶段索引。
2.4 完整性保证
页面明确声明:所有 subject-night 文件夹均完整,都含预期的三个文件(motion.csv、hr.csv、labels.mat),三种模态对每个 subject-night 文件夹全部可得。即"无跨夜缺模态",检索者可放心假设结构齐整。
2.5 与库内睡眠条目的边界
库内已有 6 条睡眠相关条目,但全部是临床/研究级多导睡眠图(PSG)多通道数据:
| 库内条目 | rid | 模态 | 与 BIDSleep 的区别 |
|---|---|---|---|
| sleep-edf | 73 | PSG(EEG/EOG/EMG) | 无可穿戴信号、无手表数据 |
| isruc-sleep | 262 | PSG | 同上,临床队列 |
| cinc-2018-sleep | 493 | PSG + 挑战赛 | 无 Apple Watch |
| hmc-sleep-staging | 654 | PSG | 无消费级设备 |
| mesa-sleep | 302 | PSG(MESA 队列) | 无手表数据 |
| mros-sleep | 292 | PSG(MrOS 队列) | 无手表数据 |
边界结论:BIDSleep 是库内唯一"消费级 Apple Watch(PPG-IHR + 加速度)+ Dreem 2 EEG 参考标签、多夜配对、开放直取"的数据集。它不是任何一条的别名或版本,模态与设备定位根本不同——库内其余条目测的是"设备上的多通道生理信号",BIDSleep 测的是"手表能给的两路信号 vs EEG 参考"。检索者若找"手表数据睡眠分期",应直达本条。
2.6 想自己复现?先认清三个数字
要用好这份数据,记住三个关键数字:0.2 Hz(IHR 采样率,稀疏)、30 秒(标签 epoch,粗粒度)、253 夜(规模,非海量)。稀疏的 IHR、粗粒度的分期,意味着特征工程的空间很大,而样本量注定它适合验证而非训大模型。
§3 采集协议与设备
3.1 两台设备、两种角色
BIDSleep 的采集设计是一个"参考设备 + 待测设备"的配对结构:
| 角色 | 设备 | 采集内容 | 定位 |
|---|---|---|---|
| 待测(信号源) | Apple Watch | IHR(PPG 衍生)+ 三轴加速度 | 消费级设备 |
| 参考(标签源) | Dreem 2 EEG Headband | EEG → AASM 睡眠分期 | 研究级设备 |
Apple Watch 端:研究者自定义了一个 WatchOS 应用,名为 BIDSleep,用于连续记录瞬时心率与三轴加速度。这也解释了数据集名"BIDSleep"的来源——它是采集 App 的名字。
Dreem 2 EEG 头带端:作为睡眠分期的参考。标签按 AASM(American Academy of Sleep Medicine,美国睡眠医学会)标准生成,30 秒 epoch 分辨率,共 Wake/N1/N2/N3/REM 五类。
术语首现:AASM = American Academy of Sleep Medicine(美国睡眠医学会),其分期标准是当代睡眠分期的通用规范。
3.2 采集流程:在家、同机、同步
- 参与者在家中睡眠时同时佩戴 Apple Watch 与 Dreem 2 EEG 头带。
- 为确保两台设备对齐,两台设备的数据都经同一部 Apple iPhone 记录——同一时钟参考,最小化错位。
- 参与者每人佩戴至多 连续 7 夜。
为什么"同机"重要:跨设备研究中,时钟漂移会导致标签与信号错位。用同一部手机做时间参考,是一种低成本的工程保证。页面把这点明确写进了协议。
3.3 参考标签的产生:自动 + 单专家复核
BIDSleep 的分期标签走了"自动评分 → 单专家复核"两步:
- Dreem 2 自动评分:Dreem 设备生成 30 秒 epoch 的自动 hypnogram(睡眠图),记为
dreem_label。 - 专家复核:Dreem 的全部 EEG 信号及其自动 hypnogram 由一名受训睡眠专家逐 epoch 复核,检查信号质量、解决伪迹。复核按 AASM 指南进行,特别关注模糊转换期与生理上不合理的阶段序列(借助相邻 epoch 的上下文信息)。修正后的标签记为
expert_label。
关键局限(页面自曝):由于只有一名评分者,未进行评分者间裁决(no inter-scorer adjudication)。这意味着标签虽经专家修正,但缺少第二人交叉验证,一致性无从量化——这是使用该数据集时必须记住的边界。
3.4 纳入与排除:健康成人,自报筛选
入组:一般健康成人,无已知会显著影响睡眠生理的睡眠或心血管疾病。
排除:
- 未治疗的严重睡眠障碍:如阻塞性睡眠呼吸暂停(Obstructive Sleep Apnea, OSA)、失眠障碍、发作性睡病等此前已确诊且未治疗/未管理的情况。
- 重大心血管疾病:如心律失常、心力衰竭、冠心病等需持续医疗管理的心脏相关疾病史。
筛选方式:仅凭自报健康问卷与研究对象招募程序,未做额外临床诊断检测。招募不区分性别或族裔,通过研究广告传单从当地社区招募,所有参与者签署书面知情同意。
含义:这是一个"干净"的健康成人队列——好处是信号不受病理干扰,适合验证算法在健康人群的表现;局限是无法评估模型在睡眠障碍或心血管病人群上的表现。想要临床泛化结论的研究者需要另找数据。
§4 任务、标签体系与推荐用法
4.1 核心任务:可穿戴睡眠分期
BIDSleep 支持的核心任务是睡眠分期(sleep staging):仅凭 Apple Watch 的瞬时心率(IHR)+ 三轴加速度,把每个 30 秒 epoch 判到 5 个睡眠阶段之一,以 Dreem 2 EEG 标签为参考。
这是一个典型的多模态生理信号分类任务:
- 输入:两路稀疏时序信号(IHR 约 0.2 Hz、加速度计三轴)。
- 输出:5 类。
- 参考:Dreem 2 专家修正标签(如采用)或 Dreem 自动标签。
页面还列出更宽的支持面:
- 可穿戴睡眠分期方法的开发与验证;
- 心率与运动信号的多模态建模;
- 消费级可穿戴设备用于睡眠研究的可靠性调查;
- 跨设备、跨多夜记录的泛化性研究。
4.2 标签编码表
| 编码 | 阶段 | AASM 全称 |
|---|---|---|
| 0 | Wake | 清醒 |
| 1 | N1 | 非快速眼动 1 期 |
| 2 | N2 | 非快速眼动 2 期 |
| 3 | N3 | 非快速眼动 3 期(慢波睡眠) |
| 4 | REM | 快速眼动期 |
| 5 | Unknown | 未知/不可判定 |
双标签对照价值:dreem_label 是设备自动评分,expert_label 是专家逐 epoch 修正。研究者可以:
- 直接用
dreem_label复现"纯自动参考"基线; - 用
expert_label检验"专家介入"对模型评估的影响; - 对比两者差异,量化 Dreem 自动评分在过渡期的误差。
4.3 推荐用法:按受试者划分,避免数据泄漏
页面给出的最重要用法建议是按受试者级(subject level)分析(例如按参与者做交叉验证),而不要跨夜混合数据,以避免数据泄漏(data leakage)。
为什么这条重要:同一受试者的多夜数据高度相关(个人的心率模式、睡眠习惯有强个体特征)。若把同一人的不同夜分到训练集和测试集,模型可以"记住这个人"而虚高测试性能。按受试者划分才是真实泛化的评估方式。
作者的训练方式:作者自己的研究按 per-night(逐夜) 训练;但页面鼓励后续研究探索利用个体内多夜信息的方法,并指出本数据集很适合支撑这类分析。
一句话:想做得比 автор更聪明,就用多夜信息做个体内建模;想做得更严谨,就按受试者划分避免泄漏。
4.4 三种建模范式(给不同目标的检索者)
| 目标 | 建议做法 | 数据用法 |
|---|---|---|
| 复现可穿戴分期基线 | 逐夜分类,IHR+加速度特征 | 用 dreem_label 或 expert_label 之一 |
| 研究跨夜稳定性 | 同一受试者多夜一致性分析 | 充分利用 3–7 夜 |
| 研究个体自适应 | 个体内少样本微调 / 无监督自适应 | 按受试者留一 |
| 评估专家修正影响 | 双标签对照 | 同时载入 dreem_label 与 expert_label |
§5 数据集定位与评估全景
5.1 它不是什么:没有官方排行榜
需要明确:BIDSleep 不是挑战赛数据集,不附带官方排行榜、官方 train/test 划分或统一评测协议。它是作为开放验证资源发布的。
这意味着:
- 检索者需要自定划分(强烈建议按受试者);
- 指标需自选(常见如 accuracy、macro-F1、Cohen’s kappa、per-stage F1);
- 没有官方基线数字可直接对标。
5.2 方法学血缘:两篇作者前作
BIDSleep 的方法学脉络清晰可追:
| 文献 | 年份 | 期刊 | 与本数据集关系 |
|---|---|---|---|
| Song TA, Chowdhury SR, Malekzadeh M, 等. AI-driven sleep staging from actigraphy and heart rate | 2023 | PLoS One 18:1–29 | 前作:证明加速度计+心率分期可行 |
| Song TA, Zhang Y, Zhou Z, 等. AI-driven sleep staging using instantaneous heart rate and accelerometry: Insights from an Apple Watch study | 2026 | IEEE TBME 73(4):1596–1608 | 本数据集的原始论文 |
谱系解读:2023 年的 PLoS One 研究奠定了"用活动记录(actigraphy)+ 心率做睡眠分期"的技术路线;2026 年的 IEEE TBME 论文把这条路线专门搬到 Apple Watch 场景,并发布了本数据集。页面明确把这两篇列为"prior work has demonstrated the feasibility"的支撑。
5.3 与 PSG 参考的差距
BIDSleep 的参考标签来自 Dreem 2 头带,页面自己承认:“it is not equivalent to full polysomnography”(它不等价于完整多导睡眠图),过渡期 epoch 可能出现轻微差异(minor discrepancies)。
这是使用该数据集最需要内化的一条:
- Dreem 2 是研究级 EEG 设备,比手表的自报标签可靠得多,但它仍非临床 PSG。
- 没有 EOG(眼电)、EMG(肌电)等 PSG 全套导联,REM 判定等依赖 EEG 的环节可能不如完整 PSG。
- 因此,不要把 Dreem 标签神化为绝对真值;把它理解为"高质量但不完美的参考标准"。
§6 获取与许可:开放但有地区限制
6.1 许可:ODC-By v1.0
| 项目 | 内容 |
|---|---|
| 许可类型 | Open Data Commons Attribution License v1.0(ODC-By v1.0) |
| 许可性质 | 归属型开放许可——可用、可改、可再分发,只需署名 |
| 是否 NC | 否 |
| 是否 ND | 否 |
| 是否需申请 | 否(Open Access) |
| Access Policy | Anyone can access the files, as long as they conform to the terms of the specified license |
ODC-By 的含义:这是数据库领域的归属型开放许可,约束比 CC BY 更贴合"数据/数据库"客体。它不禁止商业使用,也不禁止衍生;唯一硬性要求是保留归属(attribution)。相较于库内一些请求制数据集(如 PANDA 的注释掩码 upon qualified request),BIDSleep 的门槛低得多。
6.2 必须完成的引用(三重引用义务)
PhysioNet 页面明确了引用要求,使用本数据应同时引用三项:
① 数据集本体(PhysioNet 官方 APA 格式):
Song, T., Zhang, Y., Zhou, Z., & Dutta, J. (2026). A Multi-Night Instantaneous
Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels (version 1.0.1).
PhysioNet. RRID:SCR_007345. https://doi.org/10.13026/rees-1092
② 原始论文(additional original publication):
Song, T.-A., Zhang, Y., Zhou, Z., Hou, L., Malekzadeh, M., Behzad, A., & Dutta, J.
(2025). AI-driven sleep staging using instantaneous heart rate and accelerometry:
Insights from an Apple Watch study. IEEE Transactions on Biomedical Engineering.
https://doi.org/10.1109/TBME.2025.3612158
③ PhysioNet 平台标准引用:
Pollard, T., Moody, B. E., Lehman, L., Gow, B., Fernandes, C., Xie, C., Johnson, A.,
Mark, R. G., & Heldt, T. (2026). PhysioNet as a global platform for biomedical
research. Nature Health. https://doi.org/10.1038/s44360-026-00096-z
署名提示:ODC-By 要求署名,PhysioNet 要求三重引用。两者叠加,实际义务至少在方法或数据可用性小节列明"数据集版本 DOI + 原始论文 + 平台引用"。
6.3 版本链与双 DOI
| 版本 | 日期 | 变更 |
|---|---|---|
| v1.0.0 | 2026-05-12 | 初始发布 |
| v1.0.1 | 2026-09-25 | 更新作者名单 |
| DOI | 指向 |
|---|---|
| 10.13026/rees-1092 | 版本化(当前 1.0.1) |
| 10.13026/hace-p847 | latest(最新版) |
检索建议:写论文引具体版本用 rees-1092(可复现);想始终指向最新用 hace-p847。
6.4 地区限制:开放许可 vs 实际不可下载
抓取时点一个必须存照的现象:Access Policy 声明"Anyone can access",许可也是开放的 ODC-By;但页面 Files 区实际显示:
“Data Not Available — Data is not available in your region due to legal or policy restrictions.”
即本沙箱/所在区域因法律或政策限制无法直接下载。这与开放许可声明并存,非许可变更,而是地区性内容限制。检索者若遇到下载被拦,属平台按地区策略管控,可尝试从允许地区访问。
6.5 AI-Ready 可获取性光谱对照
把 BIDSleep 放进库内可获取性光谱:
| 类型 | 代表条目 | 获取门槛 |
|---|---|---|
| 完全开放直取 | bidsleep-dataset(本条) | 最低,ODC-By,双击下载 |
| 开放平台直取 | sleep-edf(73) 等 PhysioNet 数据集 | 低 |
| 需注册/协议 | 部分大型队列 | 中 |
| 请求制 | panda-plus 注释掩码 | 高,需邮件申请 |
结论:BIDSleep 属可获取性最高的一档,对 AI-Ready 友好——检索者与自动化流程都能以最小摩擦接入。
§7 数据生命周期与治理
7.1 伦理审查与去标识
| 环节 | 内容 |
|---|---|
| 伦理审查 | 研究方案经 Institutional Review Board(IRB)审查批准(机构标注双口径,见 §10) |
| 知情同意 | 全体参与者签署书面知情同意 |
| 去标识 | 公开释放前按机构与伦理指南对数据去标识处理 |
| 利益冲突 | 作者声明无利益冲突 |
| 资助 | 部分由 NIH 资助(R21AG068890、R01AG082354、P30AG073107)+ Dreem Jury’s Prize |
7.2 平台治理
- 托管平台:PhysioNet,Maintained by the MIT Laboratory for Computational Physiology。
- 平台资助:NIH 的 NIBIB、NHLBI 与 NIH Office of the Director(U24EB037545、R01EB030362)。
- 平台 RRID:SCR_007345。
- 访问控制:Open Access,按许可条款即可访问(附带地区性内容限制)。
7.3 版本维护
数据集已进入版本化维护:v1.0.0 首发 → v1.0.1 更新作者名单。版本化 DOI 与 latest DOI 并存,符合 PhysioNet 的标准实践。检索者应记录所用版本,保证可复现。
7.4 引用传染风险提示
由于 ODC-By 归属要求 + PhysioNet 三重引用要求,下游模型或论文若使用本数据却只引了论文、没引数据集 DOI,会产生归属不完整的问题。建议在模型卡、数据可用性声明中三引齐全(版本 DOI + 论文 DOI + 平台引用)。
§8 AI-Ready 评估(DAIMS)
采用 DAIMS(Data & AI Maturity Scorecard) 五维框架对各维度打分(1–5 分)。BIDSleep 的画像如下。
| 维度 | 评分 | 依据 |
|---|---|---|
| 可获取性(Accessibility) | 5 | ODC-By 开放许可,Open Access 无需申请,直取;仅存地区性内容限制(非许可限制) |
| 文档完备性(Documentation) | 4 | PhysioNet 页面含 Abstract/Background/Methods/Data Description/Usage Notes/Release Notes/Ethics/References;对齐公式与 Python 示例完备;但人口学细节、类别分布未披露,扣分 |
| 数据质量与标注(Quality & Annotation) | 3 | 参考为 Dreem 2 EEG(非 PSG);单专家复核、无评分者间裁决;双标签(自动+专家)是加分项 |
| 标准化程度(Standardization) | 4 | AASM 标准分期、MATLAB/CSV 通用格式、Unix 时间戳、清晰文件名约定;但 labels.mat 用 MAT 需特殊读取,非纯文本友好 |
| 可复现性(Reproducibility) | 4 | 版本化 DOI、明确对齐公式、四十七受试者结构规整、文件完整;扣分在无官方划分/基线 |
综合评估:BIDSleep 是一个可获取性与文档优良、质量边界明确的开放数据集。它最大的价值在"开放+配对+多夜",最大的局限在"参考标签非 PSG + 单专家 + 小样本"。DAIMS 均分约 4.0/5,是一份高 AI-Ready 友好度的资源——前提是使用者理解其标注边界。
8.1 适合谁 / 不适合谁
适合:
- 做可穿戴睡眠分期的算法团队;
- 研究心率+运动多模态建模的研究者;
- 评估消费级手表睡眠监测可靠性的验证研究;
- 研究多夜/个体内睡眠变异的研究者。
不适合:
- 需要临床级 PSG 金标签的临床诊断模型;
- 需要睡眠障碍(OSA 等)或心血管病人群样本的任务;
- 需要大样本统计推断或人群流行病学结论的任务;
- 把 Dreem 标签当绝对真值的应用。
§9 与库内条目的关系
9.1 家族图谱
BIDSleep 在库内的"邻居"主要是睡眠信号类,但模态不同——它们是"多导睡眠图(PSG)多通道",BIDSleep 是"消费级手表两路信号"。
生理信号
├── 睡眠信号
│ ├── sleep-edf (73) PSG: EEG/EOG/EMG
│ ├── isruc-sleep (262) PSG 临床队列
│ ├── cinc-2018-sleep (493) PSG 挑战赛
│ ├── hmc-sleep-staging (654) PSG
│ ├── mesa-sleep (302) PSG (MESA 队列)
│ ├── mros-sleep (292) PSG (MrOS 队列)
│ └── bidsleep-dataset (本条) 可穿戴 IHR+加速度 ← 唯一消费级设备配 EEG 参考
├── 可穿戴传感
│ └── wearable-exam-stress (807) 可穿戴体检应激
└── 心电信号
└── (apnea-ecg 等) ECG 衍生
9.2 检索路径建议
- 找"手表睡眠分期" → 直达 bidsleep-dataset(库内唯一)。
- 找"PSG 睡眠分期" → sleep-edf / isruc-sleep / hmc-sleep-staging / mesa-sleep / mros-sleep。
- 找"睡眠挑战赛" → cinc-2018-sleep。
- 找"可穿戴生理监测" → bidsleep-dataset(睡眠)+ wearable-exam-stress(应激)。
9.3 建议互链点(库内条目 + rid)
| 目标条目 | rid | 互链理由 |
|---|---|---|
| sleep-edf | 73 | PSG vs 可穿戴的参考对照 |
| cinc-2018-sleep | 493 | 睡眠分期挑战赛对照 |
| hmc-sleep-staging | 654 | 睡眠分期方法学对照 |
| isruc-sleep | 262 | 睡眠队列对照 |
| mesa-sleep | 302 | 大型队列 PSG 对照 |
| mros-sleep | 292 | 大型队列 PSG 对照 |
| wearable-exam-stress | 807 | 可穿戴传感主题相邻 |
9.4 辨析要点(防别名误判)
- bidsleep-dataset ≠ 任何 PSG 睡眠数据集:设备、模态、人群定位均不同。
- bidsleep-dataset 不是 sleep-edf 的衍生版:无版本继承关系,采集独立。
- 名称来源:数据集名取自采集 App “BIDSleep”(WatchOS 应用),非 BIDS 格式标准(虽然名字含 BIDS,但页面未声称采用 BIDS 数据组织规范——不要误读为 BIDS 标准数据集)。
§10 避坑清单:已踩过与易踩的坑
坑 1:把 Dreem 2 标签当成 PSG 金标准。 页面明确写 Dreem 2 “is not equivalent to full polysomnography”。它缺 EOG/EMG 等导联,过渡期可能轻微偏差。用它做临床结论会越界——它是"高质量参考",不是"绝对真值"。
坑 2:忽略单专家复核的局限。 标签只有一名受训专家复核,无评分者间裁决。这意味着标签一致性未量化。做标签质量敏感的研究时,应主动报告这一局限,或对
dreem_label与expert_label的差异做敏感性分析。
坑 3:跨夜混合导致数据泄漏。 同一受试者多夜数据高度相关。页面明确建议按受试者级划分(如按参与者交叉验证),不要随机跨夜切分。违反此条会虚高测试性能。
坑 4:把 IHR 当连续波形处理。 IHR 采样率约 0.2 Hz(约 5 秒一个点),是离散的瞬时心率点,不是连续 ECG/PPG 波形。误当波形做频谱分析会出错;应把它当作稀疏时间序列,先做插值/聚合。
坑 5:时间对齐算错 epoch。 对齐依赖
recStart与三行公式k = floor((t − recStart)/30) + 1。recStart原始为 Unix 时间但存储可能为 US/Eastern 可读格式,须先统一时区再换算,否则整体偏移一个时区(数小时)。
坑 6:以为数据集有官方划分和排行榜。 没有。BIDSleep 不是挑战赛数据集,需自定划分与指标;别期待官方 train/test 划分或 baseline 数字。
坑 7:忽视地区下载限制。 抓取时点页面 Files 区显示 “Data Not Available — Data is not available in your region”。开放许可不代表任何地区都能下载;遇到拦截属地区策略,非许可问题。
坑 8:误读数据集名为 BIDS 标准。 “BIDSleep” 是采集 App 名,页面未声称采用 BIDS(Brain Imaging Data Structure)组织规范。文件名是 hr.csv/motion.csv/labels.mat,非 BIDS 命名。
坑 9:把健康成人样本泛化到临床人群。 排除睡眠障碍与心血管病,筛选仅凭自报。模型在此数据上表现好,不代表在 OSA 或老年/慢病人群上表现好。
坑 10:只引论文不引数据集。 ODC-By 归属 + PhysioNet 三重引用是硬义务。只引 IEEE TBME 论文、漏引数据集 DOI 与平台引用,会造成归属不完整。
§7 bis 深度剖析:为什么"心率 + 运动"能分期?
这一节回答一个核心问题:不测脑电,凭什么用心率和手部运动推断睡眠阶段? 理解这点,才能用好 BIDSleep 的两路信号。
7b.1 生理学基础
睡眠分期虽由脑电决定,但睡眠过程伴随**自主神经系统(Autonomic Nervous System, ANS)**的系统性变化,而这些变化会"泄漏"到心率与运动信号中:
| 睡眠阶段 | 心率特征 | 自主神经状态 | 运动特征 |
|---|---|---|---|
| Wake(清醒) | 心率高且波动大 | 交感占优 | 体动多、频繁 |
| N1(入睡期) | 心率下降、开始平稳 | 副交感渐升 | 体动减少 |
| N2(浅睡) | 心率低、较平稳 | 副交感主导 | 体动少 |
| N3(慢波深睡) | 心率最低、最平稳 | 副交感最强 | 体动极少 |
| REM(快速眼动) | 心率升高且变异大 | 交感阵发激活 | 肌张力缺失但可有眼动/微动 |
关键洞察:心率与运动在**深睡(N3)与清醒(Wake)**两端最容易区分(一个心率最低最静,一个心率最高最动),而 N2 与 REM 的区分最难(两者心率都不高,REM 靠"心率变异性升高 + 无体动"间接识别)。这解释了为什么可穿戴分期在 N2/REM 上误差最大。
7b.2 IHR 为什么是"瞬时"而非连续
Apple Watch 的 PPG 传感器并非持续采样。系统在特定时刻(typically 数分钟一次,本数据集页面给出约 0.2 Hz)记录一个瞬时心率点。页面明确 IHR 是 “at specific time points”。
工程含义:
- 你不能对它做高频频谱分析(奈奎斯特频率仅约 0.1 Hz);
- 但你可以用它构造逐 epoch 的统计特征:均值、标准差、分位数、趋势;
- 心率变异性(HRV)类特征在 0.2 Hz 采样下受限,只能做粗粒度代理。
7b.3 加速度计的角色
三轴加速度计捕捉手腕运动。它的核心贡献是:
- 区分"动"与"静"——最直接的 Wake/N3 判别器;
- 提供"活动计数(activity count)"这类经典活动记录(actigraphy)特征;
- 与心率互补:心率捕捉自主神经,运动捕捉骨骼肌活动。
补充说明:腕部加速度计不是金标准活动记录仪(如 Actiwatch 戴在非优势手腕特定位置),佩戴位置与松紧会影响信号,这是所有腕表研究的共性局限。
7b.4 双信号融合的建模价值
BIDSleep 提供两路信号,天然支持多模态融合研究:
| 融合方式 | 做法 | 适用 |
|---|---|---|
| 早期融合 | 拼接 IHR 与加速度特征再分类 | 简单基线 |
| 晚期融合 | 各自建模后集成 | 稳健 |
| 注意力融合 | 用注意力机制动态加权两模态 | 前沿方法 |
| 时序建模 | LSTM/Transformer 直接吃原始序列 | 端到端 |
为什么这份数据适合做融合研究:两路信号时间戳统一、同机同步、逐夜完整,省去了大量数据清洗与对齐的脏活。
7b.5 一个诚实的期望管理
即使有 EEG 参考,可穿戴分期的上限受参考质量约束。Dreem 2 非 PSG,单专家无交叉验证,因此模型能达到的最高一致性本身就有天花板。研究者应报告相对于何种参考的何种指标,而非宣称"达到临床精度"。
§9 bis 复现指南:从零跑通 BIDSleep
这一节给出一份可操作的复现路径,帮检索者快速上手。
9b.1 环境与依赖
# 建议 Python 3.9+
pip install pandas numpy scipy scikit-learn
# 深度学习可选
pip install torch
读取 labels.mat 用 scipy.io.loadmat;CSV 用 pandas.read_csv。
9b.2 数据下载与组织
bidsleep/
├── sub-001/
│ ├── night-1/{hr.csv, motion.csv, labels.mat}
│ ├── night-2/...
│ └── night-7/...
├── sub-002/...
└── sub-047/...
注意:本沙箱区域受限无法下载;请从允许地区经 PhysioNet 获取(DOI 10.13026/rees-1092)。
9b.3 特征工程骨架
对每个 30 秒 epoch,从两路信号提取特征:
import numpy as np
def epoch_features(hr_vals, acc_xyz, epoch_len=30):
f = {}
if len(hr_vals):
f["hr_mean"] = np.mean(hr_vals)
f["hr_std"] = np.std(hr_vals)
f["hr_min"] = np.min(hr_vals)
f["hr_max"] = np.max(hr_vals)
mag = np.linalg.norm(acc_xyz, axis=1) # 合加速度模
f["acc_mean"] = np.mean(mag)
f["acc_std"] = np.std(mag)
f["acc_energy"] = np.sum(mag ** 2)
return f
9b.4 划分与评估
from sklearn.model_selection import GroupKFold
# groups = subject_id —— 关键:按受试者分组,防泄漏
gkf = GroupKFold(n_splits=5)
for tr, te in gkf.split(X, y, groups=subject_ids):
... # 训练与评估
9b.5 报告清单(建议)
- 划分方式(受试者级/LOSO);
- 参考标签选择(dreem_label 还是 expert_label);
- 指标(accuracy、macro-F1、kappa、per-stage F1);
- 是否合并 Unknown;
- 跨夜稳定性(同受试者各夜方差);
- 明确的局限声明(非 PSG、单专家、健康成人)。
§12 相关研究脉络与延伸阅读
12.1 睡眠分期技术演进四阶段
| 阶段 | 时期 | 代表方法 | 金标准 |
|---|---|---|---|
| 视觉分期 | 1968– | Rechtschaffen & Kales;后 AASM | PSG |
| 自动 PSG 分期 | 2000s– | 机器学习 + PSG 多导联 | PSG |
| 可穿戴分期 | 2010s– | 活动记录 + 心率(如本数据集前作) | PSG / 头带 |
| 消费级 + 深度 | 2020s– | 深度模型 + 手表信号 | 头带/PSG 参考 |
BIDSleep 处于第三到第四阶段的交界:它以消费级设备(Apple Watch)为信号源,以研究级头带(Dreem 2)为参考,正是"可穿戴分期"走向"深度模型验证"的产物。
12.2 与相关公开资源的差异
| 资源类型 | 代表 | BIDSleep 的不同 |
|---|---|---|
| 临床 PSG 队列 | sleep-edf、MESA、MrOS | BIDSleep 用可穿戴信号而非多导联 |
| 挑战赛 | CinC 2018 | BIDSleep 无官方排行榜 |
| 手表自报数据 | 厂商导出 | BIDSleep 提供原始信号 + 独立 EEG 参考 |
| 单夜研究 | 多数 | BIDSleep 每人至多 7 夜 |
12.3 可延伸的方法学方向
- 个体自适应:用同人历史夜微调模型(数据集支持个体内多夜)。
- 标签噪声学习:利用 dreem_label 与 expert_label 差异做噪声鲁棒学习。
- 跨设备迁移:以 BIDSleep 为源域,迁移到其他手表/头带。
- 自监督预训练:用大量无标签 IHR+加速度做预训练,再用 253 夜微调。
- 不确定性建模:在参考本身不完美时,输出分期置信度而非硬标签。
12.4 引用此数据集时的学术诚实清单
- [ ] 是否声明了参考标签为 Dreem 2 而非 PSG?
- [ ] 是否声明了单专家复核、无评分者间裁决?
- [ ] 是否按受试者划分、避免数据泄漏?
- [ ] 是否三引齐全(数据集 DOI + 论文 + 平台)?
- [ ] 是否说明了样本仅为健康成人、泛化受限?
§11 总结
11.1 三句话总结
- BIDSleep 是库内唯一"消费级 Apple Watch(IHR+加速度)+ Dreem 2 EEG 参考标签"多夜配对的开放数据集,47 名健康成人、253 夜,ODC-By 开放许可。
- 它的价值在"开放 + 配对 + 多夜":绕开厂商黑箱、提供金标准参照、支持个体内多夜分析,是可穿戴睡眠分期的理想验证底座。
- 它的边界在"参考非 PSG + 单专家 + 小样本 + 健康人群":适合算法开发与验证,不适合临床诊断结论或人群推断。
11.2 适合谁
- 可穿戴睡眠分期算法开发者与验证研究者;
- 心率+运动多模态建模团队;
- 消费级设备睡眠监测可靠性研究者;
- 多夜/个体内睡眠变异研究者。
11.3 不适合谁
- 需要临床级 PSG 金标签的诊断模型;
- 需要睡眠障碍或心血管病人群样本的任务;
- 需大样本统计推断的流行病学研究;
- 把 Dreem 标签当绝对真值的应用。
11.4 30 秒决策卡
┌─────────────────────────────────────────────────────────┐
│ BIDSleep 数据集 · 30 秒决策 │
├─────────────────────────────────────────────────────────┤
│ 是什么:Apple Watch(IHR+加速度) + Dreem2 EEG 标签,多夜配对│
│ 规模:47 人 × 至多 7 夜 = 253 夜,每夜 3 文件 │
│ 标签:AASM 5 类(30s epoch),双份(自动+专家修正) │
│ 许可:ODC-By v1.0,开放直取(有地区下载限制) │
│ DOI:10.13026/rees-1092 (v1.0.1) │
│ 论文:IEEE TBME 2026;73(4):1596–1608 │
│ 用之前想三件事: │
│ 1) 参考是 Dreem2 非 PSG; │
│ 2) 单专家无交叉验证; │
│ 3) 按受试者划分防泄漏。 │
│ 适合:可穿戴睡眠分期开发/验证 │
│ 不适合:临床诊断金标准任务 │
└─────────────────────────────────────────────────────────┘
FAQ(高频问答 24 问)
A. 基础认知
Q1. BIDSleep 到底是什么?
A:一个开放数据集:47 名健康成人多夜同时佩戴 Apple Watch 与 Dreem 2 头带,发布 Apple Watch 的瞬时心率(IHR)与三轴加速度,配 Dreem 2 EEG 的 AASM 睡眠分期标签。
Q2. 名字 BIDSleep 什么意思?
A:源自研究者自定义的 WatchOS 采集应用名 “BIDSleep”,不是 BIDS 数据标准。
Q3. 谁做的?
A:University of Massachusetts Amherst,通讯资深作者 Joyita Dutta(生物医学工程系)。
Q4. 发表在哪儿?
A:PhysioNet 平台;原始论文见 IEEE Transactions on Biomedical Engineering 2026;73(4):1596–1608。
Q5. 多少人多少夜?
A:47 名健康成人,每人至多 7 夜,共 253 夜。
B. 数据与获取
Q6. 怎么获取?
A:PhysioNet Open Access,ODC-By 许可下直取,DOI 10.13026/rees-1092。
Q7. 要付费吗?要申请吗?
A:免费,不需申请(但存在地区性下载限制)。
Q8. 许可是什么?能商用吗?
A:ODC-By v1.0,归属型开放许可,允许商用、允许衍生,只需署名。
Q9. 文件长什么样?
A:每受试者一个文件夹,含 3–7 夜;每夜 hr.csv、motion.csv、labels.mat 三文件。
Q10. 数据完整吗?
A:页面声明所有 subject-night 文件夹均完整,三模态齐全。
Q11. 为什么下载不到?
A:本沙箱所在区域因法律或政策受限(“Data Not Available”),非许可问题,可换允许地区访问。
C. 数据内容
Q12. IHR 是什么?采样率多少?
A:Instantaneous Heart Rate,Apple Watch 的 PPG 传感器经 HealthKit 输出的瞬时心率,约 0.2 Hz。
Q13. 加速度计几轴?
A:三轴(x, y, z)。
Q14. 标签分几类?
A:5 类 Wake/N1/N2/N3/REM,外加 Unknown(编码 5)。
Q15. epoch 多长?
A:30 秒,AASM 标准。
Q16. 有几个标签版本?
A:两个——dreem_label(设备自动)与 expert_label(专家修正)。
Q17. 专家是谁?几个人?
A:一名受训睡眠专家,逐 epoch 复核;仅一人,故无评分者间裁决。
Q18. 时间戳什么格式?
A:Unix 时间(秒,亚秒精度);recStart 存储时转 US/Eastern 时区。
D. 使用与方法
Q19. 怎么划分训练/测试?
A:强烈建议按受试者级划分(如留一受试者),避免跨夜数据泄漏。
Q20. 有官方划分和基线吗?
A:没有。它不是挑战赛数据集,需自定划分与指标。
Q21. 能用来训大模型吗?
A:253 夜规模偏小,更适合验证与微调,不适合从零训大模型。
Q22. 能用到临床吗?
A:不建议直接做临床结论;参考标签是 Dreem 2 非 PSG,且为健康成人样本。
E. 生产与库内
Q23. 和 sleep-edf 有什么区别?
A:sleep-edf 是 PSG 多导睡眠图;BIDSleep 是消费级手表 IHR+加速度配 EEG 参考。模态与设备根本不同。
Q24. 引用要注意什么?
A:三重引用——数据集 DOI + 原始论文 + PhysioNet 平台引用。
事实清单(硬事实 28 条)
- 官方全名:A Multi-Night Instantaneous Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels。
- slug:bidsleep-dataset。
- 平台:PhysioNet(Open Access)。
- 当前版本:v1.0.1。
- 首发版本:v1.0.0(2026-05-12)。
- v1.0.1 日期:2026-09-25(更新作者名单)。
- 版本 DOI:10.13026/rees-1092。
- Latest DOI:10.13026/hace-p847。
- 平台 RRID:SCR_007345。
- 作者:Tzu-An Song、Yubo Zhang、Ziyuan Zhou、Joyita Dutta。
- 机构:University of Massachusetts Amherst。
- 通讯资深作者:Joyita Dutta。
- 原始论文:IEEE Trans Biomed Eng 2026 Apr;73(4):1596–1608。
- 论文 DOI:10.1109/TBME.2025.3612158。
- 前作:PLoS One 2023(actigraphy + heart rate)。
- 参与人数:47 名健康成人。
- 总夜数:253 夜。
- 单人夜数:3–7(至多 7)。
- 受试者文件夹:47 个。
- 每夜文件:3 个(hr.csv / motion.csv / labels.mat)。
- IHR 采样率:约 0.2 Hz。
- 加速度计:三轴。
- 标签类别:Wake/N1/N2/N3/REM + Unknown。
- epoch 分辨率:30 秒。
- 标签标准:AASM。
- 参考设备:Dreem 2 EEG headband。
- 待测设备:Apple Watch(应用 BIDSleep)。
- 许可:Open Data Commons Attribution License v1.0(ODC-By v1.0)。
术语表(18 条)
| 术语 | 英文 | 释义 |
|---|---|---|
| 瞬时心率 | Instantaneous Heart Rate (IHR) | Apple Watch 经 PPG 输出的离散心率点,约 0.2 Hz |
| 加速度计 | Accelerometry | 三轴运动传感信号 |
| 睡眠分期 | Sleep Staging | 把睡眠划分为若干阶段的任务 |
| AASM | American Academy of Sleep Medicine | 美国睡眠医学会,睡眠分期标准制定方 |
| 多导睡眠图 | Polysomnography (PSG) | 睡眠分期金标准,含 EEG/EOG/EMG 等多导联 |
| 脑电图 | Electroencephalography (EEG) | 记录脑电活动;Dreem 2 用于分期 |
| 光电容积脉搏波 | Photoplethysmography (PPG) | 手表测心率的原理 |
| 睡眠图 | Hypnogram | 睡眠阶段随时间的阶梯曲线 |
| 睡眠阶段 | sleep stage | Wake/N1/N2/N3/REM |
| 慢波睡眠 | slow wave sleep | 对应 N3 |
| 快速眼动期 | REM | 快速眼动睡眠期 |
| 阻塞性睡眠呼吸暂停 | OSA | 常见睡眠障碍,本数据集排除 |
| 数据泄漏 | data leakage | 训练/测试信息混入导致的虚高性能 |
| 评分者间裁决 | inter-scorer adjudication | 多名评分者交叉校验;本数据集未做 |
| 归属许可 | Attribution License | 要求署名的开放许可 |
| ETH Zurich 格式 | MAT file | MATLAB 数据文件格式(labels.mat) |
| CRF | — | 本数据集不使用(无电子病历) |
| 消费级设备 | consumer-grade device | 如 Apple Watch,非临床设备 |
附录
附录 A:条目信息速查卡
| 字段 | 值 |
|---|---|
| slug | bidsleep-dataset |
| 官方名 | A Multi-Night Instantaneous Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels |
| 版本 | v1.0.1 |
| DOI | 10.13026/rees-1092 |
| 平台 | PhysioNet |
| 机构 | University of Massachusetts Amherst |
| 规模 | 47 人 / 253 夜 / 每夜 3 文件 |
| 模态 | IHR + 三轴加速度 + Dreem2 EEG 睡眠分期 |
| 标签 | AASM 5 类(双份:自动+专家) |
| 许可 | ODC-By v1.0 |
| 论文 | IEEE TBME 2026;73(4):1596–1608 |
| 抓取时点 | 2026-10-09 |
附录 B:DAIMS 评估全表
| 维度 | 分数 | 简述 |
|---|---|---|
| 可获取性 | 5 | ODC-By 开放直取(有地区限制) |
| 文档完备性 | 4 | 结构详尽,缺人口学与分布细节 |
| 数据质量与标注 | 3 | Dreem2 非 PSG,单专家无裁决 |
| 标准化程度 | 4 | AASM 标准 + 通用格式,MAT 需特殊读取 |
| 可复现性 | 4 | 版本 DOI + 对齐公式,无官方划分 |
| 综合 | 4.0/5 | 高 AI-Ready 友好度,边界清晰 |
附录 C:逐项证据链自证
| 硬事实 | 来源(一手) |
|---|---|
| 47 人 / 253 夜 | PhysioNet 页面 Abstract 与 Data Description |
| 每夜 3 文件 | PhysioNet 页面 Data Description |
| 0.2 Hz IHR | PhysioNet 页面 Data Description |
| AASM 30 秒 epoch | PhysioNet 页面 Abstract / Methods |
| ODC-By v1.0 | PhysioNet 页面 License 区 |
| DOI 10.13026/rees-1092 | PhysioNet 页面 DOI 区 |
| IEEE TBME 2026 | PhysioNet 页面引用区 |
| v1.0.1 2026-09-25 | PhysioNet 页面 Versions 区 |
附录 D:数据获取决策树
想要可穿戴睡眠分期数据?
├─ 需要 EEG 参考标签? ── 是 ─┐
│ └─ 需要多夜? ── 是 → bidsleep-dataset ✅
│ └─ 否 → 也可考虑本条(截单夜)
├─ 需要临床 PSG 金标准? ── 是 → sleep-edf / isruc-sleep / hmc-sleep-staging
├─ 需要睡眠挑战赛? ── 是 → cinc-2018-sleep
└─ 需要睡眠障碍人群? ── 是 → 本数据集不适合(健康成人)
附录 E:标签编码与对齐规范
标签编码(dreem_label / expert_label):
0 = Wake
1 = N1
2 = N2
3 = N3
4 = REM
5 = Unknown
时间对齐:
epoch k 区间 = [recStart + 30×(k−1), recStart + 30×k) 秒
时间戳 t → k = floor((t − recStart) / 30) + 1
附录 F:数据加载骨架(Python,示意)
import pandas as pd
import scipy.io as sio
# 每夜三文件
hr = pd.read_csv("sub-XX/night-Y/hr.csv") # timestamp(unix), hr(bpm)
acc = pd.read_csv("sub-XX/night-Y/motion.csv") # timestamp(unix), x, y, z
lab = sio.loadmat("sub-XX/night-Y/labels.mat") # recStart, dreem_label, expert_label
rec_start = float(lab["recStart"])
dreem_labels = lab["dreem_label"].ravel() # 0..5
expert_labels = lab["expert_label"].ravel()
# 把任意时间戳映射到 epoch
def to_epoch(t):
return int((t - rec_start) // 30) + 1
附录 G:推荐评估协议骨架
1. 按受试者划分(Leave-One-Subject-Out 或 GroupKFold on subject_id)
2. 逐 epoch(30s)预测,标签 0..5(可合并 Unknown)
3. 指标建议:accuracy、macro-F1、Cohen's kappa、per-stage F1
4. 对照组:dreem_label vs expert_label 两种参考分别评估
5. 报告跨夜稳定性(同一受试者各夜性能方差)
附录 H:三重引用模板
数据集:
Song, T., Zhang, Y., Zhou, Z., & Dutta, J. (2026). A Multi-Night Instantaneous
Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels (version 1.0.1).
PhysioNet. RRID:SCR_007345. https://doi.org/10.13026/rees-1092
原始论文:
Song, T.-A., Zhang, Y., Zhou, Z., Hou, L., Malekzadeh, M., Behzad, A., & Dutta, J.
(2025). AI-driven sleep staging using instantaneous heart rate and accelerometry:
Insights from an Apple Watch study. IEEE Trans Biomed Eng.
https://doi.org/10.1109/TBME.2025.3612158
平台:
Pollard, T., et al. (2026). PhysioNet as a global platform for biomedical research.
Nature Health. https://doi.org/10.1038/s44360-026-00096-z
§13 使用指南(扩充):从下载到建模的完整代码路径
本节是 §9 bis 复现指南的工程化扩充。目标:让一个拿到 DOI 的研究者,能在最短时间内把 253 夜数据装进内存、对齐成"epoch 级特征表 + 标签列",并跑通一次按受试者划分的基线。所有代码仅依赖 pandas / numpy / scipy,深度学习部分可选 torch。
13.1 三种下载路径对比
PhysioNet 内容既有 Web 界面也有命令行工具,选择取决于你的运行环境与是否需要脚本化:
| 路径 | 命令/方式 | 适用场景 | 注意 |
|---|---|---|---|
| Web 直下 | 浏览器打开 https://physionet.org/content/bidsleep-dataset/ 点 Files 区 |
单次人工获取 | 受地区限制时会被拦 |
| wget 镜像 | wget -r -N -c -np https://physionet.org/files/bidsleep-dataset/1.0.1/ |
服务器批量下载 | 保留目录结构,可断点续传 |
| PhysioNet CLI | 官方凭证化下载(需注册账号) | 需要鉴权/大文件 | 本数据集为 Open Access,通常免凭证 |
| 库内镜像 | 部分机构镜像站同步 | 内网 | 需确认版本为 1.0.1 |
下载后应校验的目录结构(PhysioNet 标准布局):
bidsleep-dataset-1.0.1/
├── LICENSE.txt # ODC-By v1.0 原文
├── RECORDS # 受试者清单(若提供)
├── SHA256SUMS.txt # 校验和(若提供)
├── subject-01/
│ ├── night-1/
│ │ ├── hr.csv
│ │ ├── motion.csv
│ │ └── labels.mat
│ ├── night-2/
│ └── ...
├── subject-02/
└── ...(共 47 个 subject 目录)
版本一致性提醒:下载后务必记录实际版本号(1.0.0 还是 1.0.1)。v1.0.1 仅更新作者名单,数据文件内容不变,但引用时应写对版本 DOI(
10.13026/rees-1092对应 1.0.1)。
13.2 用 wfdb 读取(可选路径)
虽然 BIDSleep 是 CSV + MAT 而非 WFDB 二进制格式,但 PhysioNet 生态里 wfdb 包仍是常用工具。需要注意:本数据集不使用 .hea/.dat 的 WFDB 记录格式,wfdb.rdrecord 直接读会失败。wfdb 在此处的角色主要是从 PhysioNet 拉取文件:
# 方式一:用 wfdb 的下载工具拉取整个目录(需要网络与权限)
import os
import wfdb
from wfdb import io as wfdb_io
# wfdb 提供 wfdb.dl_database 用于按记录批量下载(此处仅示意流程)
# 由于本数据集非 WFDB 记录格式,优先用下面的 requests / pandas 方式
def list_subject_dirs(root):
return sorted(
d for d in os.listdir(root)
if d.startswith("subject-") and os.path.isdir(os.path.join(root, d))
)
def list_night_dirs(subject_dir):
return sorted(
d for d in os.listdir(subject_dir)
if d.startswith("night-") and os.path.isdir(os.path.join(subject_dir, d))
)
# 例:遍历结构,确认文件完整(每夜 3 文件)
def audit_completeness(root):
missing = []
total_nights = 0
for sub in list_subject_dirs(root):
for night in list_night_dirs(os.path.join(root, sub)):
total_nights += 1
nd = os.path.join(root, sub, night)
for fn in ("hr.csv", "motion.csv", "labels.mat"):
if not os.path.exists(os.path.join(nd, fn)):
missing.append((sub, night, fn))
return total_nights, missing
n_nights, miss = audit_completeness("bidsleep-dataset-1.0.1")
print(f"总夜数: {n_nights}, 缺失文件: {len(miss)}")
assert n_nights == 253, f"预期 253 夜,实际 {n_nights} 夜"
完整性断言:页面声明所有 subject-night 均完整,故上述断言
total_nights == 253应当成立。若你的副本不满足,说明下载不完整或被截断。
13.3 用 pandas 读取 IHR 与加速度计
CSV 是本数据集的"轻量"模态,pandas 一行即可读入。关键是要预处理时间戳并建立 datetime 索引,方便后续按 epoch 切片。
import pandas as pd
import numpy as np
def load_hr(path, tz="US/Eastern"):
"""读取 hr.csv —— 瞬时心率(IHR,约 0.2 Hz)"""
df = pd.read_csv(path)
# 列名约定(视实际文件而定,常见为 timestamp / hr 或 time / IHR)
tcol = "timestamp" if "timestamp" in df.columns else df.columns[0]
vcol = [c for c in df.columns if c != tcol][0]
df = df.rename(columns={tcol: "timestamp", vcol: "hr"})
# Unix 秒(含亚秒)→ UTC datetime
df["dt"] = pd.to_datetime(df["timestamp"], unit="s", utc=True)
# 如需本地时区展示(recStart 展为 US/Eastern),可转换
df["dt_local"] = df["dt"].dt.tz_convert(tz)
df = df.sort_values("timestamp").reset_index(drop=True)
return df
def load_motion(path, tz="US/Eastern"):
"""读取 motion.csv —— 三轴加速度计(x, y, z)"""
df = pd.read_csv(path)
tcol = "timestamp" if "timestamp" in df.columns else df.columns[0]
axis_cols = [c for c in df.columns if c != tcol][:3]
ren = {tcol: "timestamp"}
for i, c in enumerate(axis_cols):
ren[c] = ["x", "y", "z"][i]
df = df.rename(columns=ren)
df["dt"] = pd.to_datetime(df["timestamp"], unit="s", utc=True)
df["dt_local"] = df["dt"].dt.tz_convert(tz)
# 合加速度模(常用特征)
df["acc_mag"] = np.sqrt(df["x"]**2 + df["y"]**2 + df["z"]**2)
df = df.sort_values("timestamp").reset_index(drop=True)
return df
hr = load_hr("bidsleep-dataset-1.0.1/subject-01/night-1/hr.csv")
acc = load_motion("bidsleep-dataset-1.0.1/subject-01/night-1/motion.csv")
print("IHR 点数:", len(hr), ",首点:", hr["dt_local"].iloc[0])
print("加速度点数:", len(acc))
采样率自检:IHR 约 0.2 Hz(平均每 5 秒一个点),可用于快速判断数据是否异常。
def estimate_rate(df):
if len(df) < 2:
return 0.0
span = df["timestamp"].iloc[-1] - df["timestamp"].iloc[0]
return (len(df) - 1) / span if span > 0 else 0.0
print("IHR 估计采样率: %.3f Hz(预期 ≈0.2)" % estimate_rate(hr))
print("加速度估计采样率: %.3f Hz" % estimate_rate(acc))
13.4 读取睡眠分期标签(labels.mat)
labels.mat 是 MATLAB 文件,用 scipy.io.loadmat 读取。三个变量:recStart、dreem_label、expert_label。
import scipy.io as sio
def load_labels(path):
"""读取 labels.mat —— recStart + dreem_label + expert_label"""
m = sio.loadmat(path)
rec_start = float(np.asarray(m["recStart"]).ravel()[0])
dreem = np.asarray(m["dreem_label"]).ravel().astype(int) # 0..5
expert = np.asarray(m["expert_label"]).ravel().astype(int) # 0..5
return rec_start, dreem, expert
rec_start, dreem, expert = load_labels("bidsleep-dataset-1.0.1/subject-01/night-1/labels.mat")
print("记录起点(Unix):", rec_start)
print("epoch 数:", len(dreem), "→ 覆盖时长: %.1f 分钟" % (len(dreem) * 30 / 60))
print("dreem 标签分布:", dict(zip(*np.unique(dreem, return_counts=True))))
print("expert 标签分布:", dict(zip(*np.unique(expert, return_counts=True))))
recStart时区陷阱:recStart原始是 Unix 时间(UTC 基准),但页面在展示时转成 US/Eastern。读取时float(np.asarray(...))拿到的是原始数值,请勿再叠加一次时区偏移,否则整体错位数小时。若 MAT 里存的是"字符串形式的美东时间",则需先按 §2.3 的公式用 pytz 转回 Unix。
13.5 标签对齐:把信号切进 30 秒 epoch
对齐是本数据集的核心操作。核心公式:epoch 序号 k = floor((t − recStart) / 30) + 1(1 起)。下面给出向量化实现与逐 epoch 特征聚合。
def assign_epoch(df, rec_start, epoch_len=30):
"""把每行信号的时间戳映射到 epoch 序号(1 起)"""
k = np.floor((df["timestamp"].values - rec_start) / epoch_len).astype(int) + 1
df = df.copy()
df["epoch"] = k
return df
def labels_to_series(rec_start, labels, epoch_len=30):
"""标签数组 → 以 epoch 序号为索引的 Series"""
idx = np.arange(1, len(labels) + 1)
return pd.Series(labels, index=idx, name="label")
hr_e = assign_epoch(hr, rec_start)
acc_e = assign_epoch(acc, rec_start)
lab = labels_to_series(rec_start, expert) # 用 expert_label 作为参考
# 查看对齐后,epoch 与标签的覆盖情况
print("IHR epoch 范围:", hr_e["epoch"].min(), "→", hr_e["epoch"].max())
print("标签 epoch 范围:", lab.index.min(), "→", lab.index.max())
# 有效 epoch(标签不为 Unknown=5 且落在记录范围内)
valid = lab[lab != 5]
print("有效(非 Unknown)epoch 数:", len(valid))
13.6 逐 epoch 特征聚合表
把稀疏信号聚合成"每个 30 秒 epoch 一行"的特征表,这是喂给任何分类器的标准输入。下面给出一个可扩展的骨架。
def build_epoch_table(hr_e, acc_e, labels, epoch_len=30):
rows = []
epochs = labels.index.values
for k in epochs:
f = {"epoch": k, "label": int(labels.loc[k])}
h = hr_e.loc[hr_e["epoch"] == k, "hr"].values
a = acc_e.loc[acc_e["epoch"] == k, "acc_mag"].values
if len(h):
f["hr_mean"] = float(np.mean(h))
f["hr_std"] = float(np.std(h))
f["hr_min"] = float(np.min(h))
f["hr_max"] = float(np.max(h))
f["hr_range"] = float(np.max(h) - np.min(h))
f["hr_n"] = len(h)
if len(a):
f["acc_mean"] = float(np.mean(a))
f["acc_std"] = float(np.std(a))
f["acc_max"] = float(np.max(a))
f["acc_energy"] = float(np.sum(a ** 2))
rows.append(f)
return pd.DataFrame(rows)
feat = build_epoch_table(hr_e, acc_e, lab)
feat = feat.dropna(subset=["hr_mean", "acc_mean"]).reset_index(drop=True)
print(feat.head())
print("特征表规模:", feat.shape)
进阶特征建议(在骨架之上加列):
| 特征类型 | 例子 | 说明 |
|---|---|---|
| IHR 分位数 | p10 / p50 / p90 | 抵抗离群点 |
| IHR 趋势 | epoch 内线性斜率 | 判断心率升/降 |
| IHR 一阶差分 | 相邻点差的均值 | 粗略活动度 |
| 运动计数 | 超阈值的样本数 | actigraphy 经典量 |
| 跨 epoch 上下文 | 前/后 3 个 epoch 的均值 | 睡眠阶段有强时间连续性 |
| 昼夜先验 | 距 recStart 的分钟数 | 后半夜更可能深睡 |
时间上下文很关键:睡眠阶段具备强序列性(N1 常夹在 Wake 与 N2 之间,N3 多出现在前半夜)。只做逐 epoch 独立分类会浪费这一先验;建议用滑窗或序列模型(LSTM / 1D-CNN / Transformer)承上启下。
13.7 双标签拼接:把 dreem 与 expert 同时装进表
def build_epoch_table_dual(hr_e, acc_e, rec_start, dreem, expert):
base = build_epoch_table(hr_e, acc_e, labels_to_series(rec_start, expert))
dser = labels_to_series(rec_start, dreem)
base["dreem_label"] = base["epoch"].map(dser)
base["expert_label"] = base["label"]
return base
feat2 = build_epoch_table_dual(hr_e, acc_e, rec_start, dreem, expert)
# 统计两版标签不一致的 epoch 比例(量化自动 vs 专家差异)
diff = (feat2["dreem_label"] != feat2["expert_label"]).mean()
print("dreem_label 与 expert_label 不一致比例: %.2f%%" % (diff * 100))
13.8 按受试者划分的训练骨架(防泄漏)
from sklearn.model_selection import GroupKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, cohen_kappa_score, f1_score
# 假设 multifeat 为全部受试者、全部夜的合并特征表,含 subject_id 列
X = feat2.drop(columns=["epoch", "label", "dreem_label", "expert_label"]).values
y = feat2["expert_label"].values # 参考 = 专家修正
groups = np.array([1] * len(feat2)) # 示例:此处需填真实 subject_id
gkf = GroupKFold(n_splits=5)
accs, kappas, f1s = [], [], []
for tr, te in gkf.split(X, y, groups=groups):
clf = RandomForestClassifier(n_estimators=200, random_state=0, n_jobs=-1)
clf.fit(X[tr], y[tr])
pred = clf.predict(X[te])
accs.append(accuracy_score(y[te], pred))
kappas.append(cohen_kappa_score(y[te], pred))
f1s.append(f1_score(y[te], pred, average="macro"))
print("ACC=%.3f Kappa=%.3f MacroF1=%.3f" %
(np.mean(accs), np.mean(kappas), np.mean(f1s)))
务必把示例里的
groups换成真实受试者编号。若误用随机 KFold,同一受试者的不同夜会同时出现在训练与测试集,导致指标虚高(§4.3 与坑 3)。
13.9 一个最小端到端脚本(可直接改写运行)
import os, numpy as np, pandas as pd, scipy.io as sio
from sklearn.model_selection import GroupKFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, cohen_kappa_score
ROOT = "bidsleep-dataset-1.0.1"
EPOCH = 30
def one_night(sub, night):
nd = os.path.join(ROOT, sub, night)
hr = pd.read_csv(os.path.join(nd, "hr.csv"))
acc = pd.read_csv(os.path.join(nd, "motion.csv"))
m = sio.loadmat(os.path.join(nd, "labels.mat"))
rec = float(np.asarray(m["recStart"]).ravel()[0])
y = np.asarray(m["expert_label"]).ravel().astype(int)
return hr, acc, rec, y
def featurize(hr, acc, rec, y):
tc_hr, tc_acc = hr.columns[0], acc.columns[0]
hr_k = np.floor((hr[tc_hr].values - rec) / EPOCH).astype(int) + 1
acc_t = acc[[c for c in acc.columns if c != tc_acc][:3]].values
acc_k = np.floor((acc[tc_acc].values - rec) / EPOCH).astype(int) + 1
acc_mag = np.linalg.norm(acc_t, axis=1)
rows = []
for k in range(1, len(y) + 1):
h = hr.loc[hr_k == k, hr.columns[1]].values
a = acc_mag[acc_k == k]
if len(h) == 0 or len(a) == 0:
continue
rows.append([np.mean(h), np.std(h), np.min(h), np.max(h),
np.mean(a), np.std(a), np.sum(a**2), int(y[k-1])])
return rows
def rows_for(sub):
out = []
base = os.path.join(ROOT, sub)
for night in sorted(os.listdir(base)):
if not night.startswith("night-"):
continue
hr, acc, rec, y = one_night(sub, night)
for r in featurize(hr, acc, rec, y):
out.append([sub] + r)
return out
all_rows = []
subjects = sorted(d for d in os.listdir(ROOT) if d.startswith("subject-"))
for s in subjects:
all_rows += rows_for(s)
cols = ["subject", "hr_mean", "hr_std", "hr_min", "hr_max",
"acc_mean", "acc_std", "acc_energy", "y"]
df = pd.DataFrame(all_rows, columns=cols)
X = df.drop(columns=["subject", "y"]).values
y = df["y"].values
g = df["subject"].values
for tr, te in GroupKFold(n_splits=5).split(X, y, g):
clf = RandomForestClassifier(n_estimators=200, random_state=0, n_jobs=-1).fit(X[tr], y[tr])
pred = clf.predict(X[te])
print("ACC %.3f Kappa %.3f" % (accuracy_score(y[te], pred), cohen_kappa_score(y[te], pred)))
13.10 常见读取报错的排查表
| 报错/现象 | 可能原因 | 处理 |
|---|---|---|
KeyError: 'recStart' |
MAT 变量名不符 | print(sio.loadmat(p).keys()) 确认变量名 |
| 特征大量 NaN | 该 epoch 无 IHR 点(稀疏) | 前向填充或跳过该 epoch |
| epoch 整体偏移数小时 | recStart 被重复加时区 | 确认 recStart 是原始 Unix 秒 |
| 加速度列被误当时间 | 列顺序假设错误 | 按列名而非位置取值 |
| 指标异常高 | 未按受试者划分 | 用 GroupKFold(groups=subject) |
| 读不到 253 夜 | 下载不全/区域受限 | 校验目录计数、换允许地区 |
labels.mat 长度 ≠ epoch 覆盖 |
记录首尾含非睡眠段 | 以标签长度为准裁剪信号 |
§14 避坑清单(扩充):编号坑点补至 20 则
§10 已列坑 1–10。本节续编号,补齐在数据读取、对齐、建模、评估、发布各环节的真实雷区。每则给出"现象—原因—处置"三段式,便于直接对照原文排查。
坑 11:把
dreem_label与expert_label顺序搞反。
现象:模型评估时参考标签错位,指标离奇变化。
原因:两个变量编码一致(0…5),肉眼难分;若赋值时调换,等于用"自动标签"当参考去评"专家修正"。
处置:读取后立即用print(np.unique(m['dreem_label']),np.unique(m['expert_label']))或统计两者不一致比例(通常存在少量差异,若为 0 反而可疑)做健全性检查。
坑 12:忽略 Unknown(编码 5)epoch 的处理策略。
现象:纳入 Unknown 后准确率虚高或类别不均衡恶化。
原因:Unknown 表示"不可判定",并非真实睡眠阶段;直接当第 6 类训练会引入无意义类别,丢弃又可能裁掉过渡段。
处置:明确策略并写进方法:常见做法是评估时排除 Unknown、训练时可选择掩码或合并到最近阶段。切勿不同处理混用导致前后不可比。
坑 13:把加速度单位想当然为 m/s²。
现象:跨研究对比特征量级时量纲对不上。
原因:Apple Watch 输出的加速度单位与坐标约定(是否含重力、是否 g 单位)未在页面逐字给出。
处置:不要预设单位;以相对量(合加速度模的均值/方差/能量)为主,或先做 z-score 标准化。跨设备迁移时尤其要重估量纲。
坑 14:用 IHR 直接做频域 HRV 分析。
现象:低频/高频功率谱不可信。
原因:IHR 约 0.2 Hz 采样,奈奎斯特频率约 0.1 Hz,真正的 HRV 频带(LF 0.04–0.15 Hz、HF 0.15–0.4 Hz)无法被覆盖。
处置:不要宣称做了标准 HRV 频谱;如需心率变异性信息,用"相邻 IHR 点差的统计量"作为粗粒度代理(§7b.2)。
坑 15:跨夜/跨受试者拼接时不重置
recStart。
现象:多夜合并后 epoch 序号冲突、时间戳重叠。
原因:每夜的recStart不同,直接拼接同一索引会把不同夜混为一谈。
处置:为每条 (subject, night) 记录唯一键,特征表保留subject_id + night_id + epoch复合主键,避免索引碰撞。
坑 16:假设每人都恰好 7 夜。
现象:批处理脚本在拿到 3–6 夜的受试者时崩溃或静默跳过。
原因:单人夜数为 3–7 不等(§2.1),总数 253 而非 47×7=329。
处置:遍历时以实际目录为准,不要硬编码 7;用for night in sorted(os.listdir(ndir))动态枚举。
坑 17:把"文件完整"误读为"每 epoch 都有信号"。
现象:特征表出现大量空行,模型输入稀疏。
原因:文件完整(3 文件齐全)≠ 信号连续。IHR 约 0.2 Hz,且可能存在整段缺采(佩戴松动、设备摘除)。
处置:做逐 epoch 信号覆盖率统计,设定最小点数阈值,覆盖率过低的 epoch 标记为无效。
坑 18:用随机 KFold 做交叉验证。
现象:AUC/ACC 明显高于按受试者划分的结果,复现失败。
原因:同一人不同夜高度相关,随机切分导致训练集"见过"测试对象的夜间模式。
处置:一律用受试者级划分(GroupKFold / Leave-One-Subject-Out),并在论文中明确声明划分粒度(§4.3)。
坑 19:把本数据集当作 BIDS(Brain Imaging Data Structure)标准数据集来组织下游流水线。
现象:期望的sub-XX_ses-YY_task-ZZ_eeg.*命名不存在,流水线找不到文件。
原因:数据集名"BIDSleep"取自采集 App,页面未声称采用 BIDS 组织规范;实际是subject-x/night-y/{hr.csv,motion.csv,labels.mat}(§9.4)。
处置:不要套用 BIDS 命名解析器;按本数据集实际的目录约定写适配层。
坑 20:引用时只写 latest DOI,不写所用版本 DOI。
现象:他人按你的引用无法复现(latest 可能已随版本漂移)。
原因:hace-p847(latest)会指向未来最新版,rees-1092(版本化)才锚定 1.0.1。
处置:论文方法/数据可用性小节写清"使用的版本号 + 版本 DOI",需要机器可复现时用版本化 DOI(§6.3)。
补充:坑 21(可选扩展)——忽略地区下载限制导致 CI 阻塞。
现象:自动化流水线在受限区域拉取数据时超时/403。
原因:抓取时点 Files 区标注 “Data Not Available — not available in your region”。
处置:在允许地区预取后经合规镜像分发;流水线中把数据获取与训练解耦,数据预先落盘。
§15 常见问题 FAQ(扩充 12+ 组)
前文 FAQ 已覆盖 24 问(A–E 五组)。本节针对"数据规模、许可、预处理、标签体系、同类差异、复现要点、引用规范"逐项深挖,供检索者与自动化问答系统直接取用。
F. 数据规模与结构
Q25. 为什么是 253 夜而不是 47×7=329 夜?
A:因为每名参与者至多连续佩戴 7 夜,实际个体差异很大(3–7 夜不等)。47 人的夜数总和恰为 253,说明并非人人戴满 7 夜。做统计时要按实际夜数加权,不要假设均衡。
Q26. 一个受试者文件夹里一定是 7 个 night 子目录吗?
A:不是。是 3 至 7 个。遍历时必须动态枚举,硬编码 7 会在部分受试者上出错。
Q27. 每夜文件数固定吗?
A:固定为 3 个:hr.csv、motion.csv、labels.mat。页面声明所有 subject-night 均完整,三模态全部可得。
Q28. 数据总量大概多大?
A:页面未逐字披露单文件行数与总大小。以 IHR 约 0.2 Hz 粗估,一夜 8 小时约 5760 个 IHR 点、约 5760 行标签(30 秒 epoch → 960 个 epoch/夜);实际数字以文件为准。这一项属于"待核"细节,引用时不要编造。
G. 许可与获取
Q29. ODC-By v1.0 和 CC BY 有什么区别?
A:两者都是归属型开放许可。ODC-By 是数据库领域的专门许可,客体是"数据库/数据集";CC BY 面向更广义的作品。对本数据集而言,二者实质约束接近:可用、可改、可商用、可再分发,只需署名,非 NC、非 ND。
Q30. 可以商用吗?
A:可以。ODC-By 不禁止商业使用。但商用仍需完成归属(引数据集 DOI + 论文,见下)。
Q31. 需要向谁申请吗?
A:不需要。Open Access 直取。但抓取时点存在地区性下载限制(“Data Not Available”),属平台落地策略,不是许可要求。
Q32. 下载被拦怎么办?
A:确认你所在区域;尝试从允许地区访问,或经机构镜像获取。切勿使用违反平台条款的手段绕过。
H. 预处理
Q33. IHR 有缺失怎么办?
A:IHR 是稀疏点(约 0.2 Hz),某些 epoch 可能没有点。常见处理:① 前向填充;② 用邻域统计插值;③ 设覆盖率阈值、过低的 epoch 丢弃。不要盲目对所有 epoch 做高频插值,会制造虚假信息。
Q34. 加速度要不要去重力?
A:页面未明确给出单位与是否含重力。稳妥做法是以相对量(合加速度模的均值/方差/能量)为主,或先做标准化,避免把"重力常数"当信号。
Q35. 要不要做逐夜归一化?
A:推荐。个体间心率基线差异大(年龄、体质),逐夜或逐受试者 z-score 能削弱个体偏置,提升跨受试者泛化。但注意:归一化只能用训练集统计量,否则构成泄漏。
Q36. 标签里的 Unknown 怎么处理?
A:评估时通常排除 Unknown;训练时可掩码或保留。无论怎么选,都要在方法中声明并与基线保持一致。
I. 标签体系
Q37. 5 类分期与 AASM 标准一致吗?
A:一致。Wake/N1/N2/N3/REM 是 AASM 的 5 阶段体系(N3 合并了旧标准的 3、4 期),epoch 长度为 30 秒。
Q38. 为什么有两份标签?用哪个?
A:dreem_label 是 Dreem 设备自动评分,expert_label 是专家逐 epoch 修正。论文级使用建议以 expert_label 为主参考;用 dreem_label 时要在方法与局限中说明。也可两者对照做敏感性分析。
Q39. 专家是谁、几个人?一致性如何?
A:一名受训睡眠专家,逐 epoch 复核 EEG 与自动 hypnogram。无评分者间裁决,标签一致性未量化。这是本数据集的核心局限之一。
Q40. 参考标签能等同 PSG 吗?
A:不能。页面明确 Dreem 2 “is not equivalent to full polysomnography”,缺 EOG/EMG 等导联,过渡期可能出现轻微差异。它是"高质量参考",不是绝对真值。
J. 与同类数据集的差异
Q41. 与 sleep-edf(rid 73)最大的区别?
A:sleep-edf 是 PSG 多导睡眠图(EEG/EOG/EMG),BIDSleep 是消费级 Apple Watch(IHR+加速度)+ Dreem 2 EEG 参考。模态与设备定位根本不同,非别名非版本。
Q42. 与 cinc-2018-sleep(rid 493)区别?
A:CinC 2018 是挑战赛数据集,带官方评测;BIDSleep 无官方排行榜/统一划分,是开放验证资源。
Q43. 与 mesa-sleep(302)/mros-sleep(292)区别?
A:MESA/MrOS 是大型流行病学队列的 PSG 子集,人群为老年/慢病方向;BIDSleep 是 47 人健康成人、可穿戴信号、多夜配对。
Q44. 与 wearable-exam-stress(807)的关系?
A:同属"可穿戴传感"主题相邻,但 807 关注体检应激,本数据集关注睡眠分期,任务不同。
K. 复现要点
Q45. 复现时最容易在哪一步翻车?
A:时间对齐(recStart 时区)与数据划分(是否按受试者)。前者导致整体错位,后者导致指标虚高。其次是 Unknown 处理不一致。
Q46. 指标该报什么?
A:建议 accuracy、macro-F1、Cohen’s kappa、per-stage F1 四件套,并声明是否合并 Unknown、参考用哪份标签。不要只报 accuracy(类别不平衡会误导)。
Q47. 需要多少算力?
A:极小。253 夜、每夜约数百到上千 epoch,特征级建模在 CPU 上分钟级完成;端到端深度模型也可单卡跑通。这正是它作为"轻量验证集"的优点。
Q48. 能训大模型吗?
A:不适合从零训基座(样本小)。更适合:预训练后在 253 夜上微调、做迁移/自适应研究、或作为外部验证集。
L. 引用规范
Q49. 到底要引几项?
A:PhysioNet 要求三重引用:① 数据集本体(含版本 DOI 10.13026/rees-1092);② 原始论文(IEEE TBME,DOI 10.1109/TBME.2025.3612158);③ PhysioNet 平台引用(Pollard et al. 2026, Nature Health)。
Q50. 版本写哪个?
A:写你实际使用的版本。默认写 v1.0.1 + rees-1092。需要"始终最新"时可用 latest DOI 10.13026/hace-p847,但复现导向应写版本化 DOI。
Q51. 署名在哪写?
A:ODC-By 要求保留归属,建议在论文的数据可用性声明、模型卡(model card)、代码仓库 README 中均列明三重引用。
§16 相关数据集对照表(库内 + 库外)
16.1 库内睡眠/可穿戴类条目横向对比
库内共 6 条睡眠类 PSG 条目 + 1 条可穿戴应激条目;BIDSleep 在"设备定位"一栏独树一帜。
| 条目 | rid | 信号/模态 | 金标签来源 | 人群 | 规模特征 | 与 BIDSleep 的差异要点 |
|---|---|---|---|---|---|---|
| bidsleep-dataset(本条) | — | Apple Watch IHR(PPG,~0.2 Hz)+ 三轴加速度 | Dreem 2 EEG(AASM 30s epoch,单专家修正) | 47 名健康成人 | 253 夜,多夜配对 | 唯一"消费级手表信号 + EEG 参考"多夜开放集 |
| sleep-edf | 73 | PSG(EEG/EOG/EMG) | 专家视觉分期 | 健康 + 睡眠障碍混合 | 多受试者单/少数夜 | 临床 PSG,无可穿戴信号,非手表场景 |
| isruc-sleep | 262 | PSG | 专家视觉分期 | 睡眠障碍相关队列 | 多受试者 | 无消费级设备,非 IHR 路线 |
| cinc-2018-sleep | 493 | PSG + 挑战赛 | 专家标注 + 官方评测 | 研究队列 | 挑战赛规模 | 有官方排行榜;BIDSleep 无统一评测 |
| hmc-sleep-staging | 654 | PSG | 专家分期 | 睡眠队列 | 中等 | 无手表数据,模态不同 |
| mesa-sleep | 302 | PSG(多导联) | 专家 + 中心化评分 | MESA 大型队列(中老年) | 大样本流行病学 | 人群与设备定位不同;无手表 |
| mros-sleep | 292 | PSG(多导联) | 中心化评分 | MrOS 老年男性队列 | 大样本队列 | 同上,老年队列 |
| wearable-exam-stress | 807 | 可穿戴生理信号 | 应激/体检相关标注 | 体检人群 | 主题相邻 | 任务是应激评估非睡眠分期 |
一句话对照结论:库内所有睡眠条目的信号源都是临床多导联(PSG);只有 BIDSleep 的信号源是消费级智能手表,而且它是唯一把手表信号与独立 EEG 参考逐夜配对的开放数据集。找"手表睡眠分期"应直达本条;找"临床 PSG 分期"则去 sleep-edf 等。
16.2 库内可穿戴感知类条目
| 条目 | rid | 传感模态 | 任务 | 与本条关系 |
|---|---|---|---|---|
| bidsleep-dataset(本条) | — | 腕表 PPG-IHR + 加速度 | 睡眠分期 | 本条目 |
| wearable-exam-stress | 807 | 可穿戴生理信号 | 应激/体检 | 同属可穿戴主题,任务不同 |
16.3 库外相关公开资源(方法学参照,非库内条目)
| 资源 | 类型 | 与 BIDSleep 的关系 | 备注 |
|---|---|---|---|
| PhysioNet 平台本体 | 数据托管平台 | 本数据集载体 | RRID:SCR_007345 |
| IEEE TBME 2026 论文 | 原始论文 | 数据集配套文献 | DOI 10.1109/TBME.2025.3612158 |
| PLoS One 2023 前作 | 方法学前作 | actigraphy + 心率分期可行性 | Song et al. 2023 |
| Dreem 2 设备相关研究 | 设备验证文献 | 参考标签来源设备的证据链 | 非本数据集发布物 |
| Apple Watch 睡眠监测类研究 | 消费级设备研究 | 与本题"设备可靠性"主题相邻 | 多为厂商或无开源数据 |
16.4 选择决策矩阵(给"我该用哪个"的检索者)
| 你的需求 | 首选 | 次选 | 不建议 |
|---|---|---|---|
| 手表信号 → 睡眠分期,要 EEG 参考 | bidsleep-dataset | — | PSG 队列(无手表信号) |
| 临床级 PSG 金标签 | sleep-edf / hmc-sleep-staging | mesa-sleep / mros-sleep | bidsleep(非 PSG) |
| 睡眠障碍人群 | isruc-sleep | sleep-edf(含障碍) | bidsleep(健康成人) |
| 官方排行榜/挑战赛 | cinc-2018-sleep | — | bidsleep(无评测协议) |
| 大样本人群推断 | mesa-sleep / mros-sleep | — | bidsleep(47 人) |
| 可穿戴 + 睡眠多夜配对 | bidsleep-dataset | — | 其余均非手表信号 |
| 可穿戴 + 应激(非睡眠) | wearable-exam-stress(807) | — | bidsleep(任务是睡眠) |
16.5 组合使用建议
- PSG 预训练 + 手表微调:用 sleep-edf/hmc-sleep-staging 学分期表征,再在 BIDSleep 上验证可穿戴泛化。
- 跨模态一致性研究:把 BIDSleep 的手表标签能力与某 PSG 队列的深度分期能力做方法学对照。
- 多夜泛化的对照实验:在单一的 PSG 单夜集上训练、在 BIDSleep 多夜集上评估跨夜稳定性。
- 评估协议借镜:借鉴 cinc-2018-sleep 的分期评估指标(per-stage F1、kappa)迁移到 BIDSleep 自定划分上。
§17 参考文献与来源(附录 L)
本节把 FACTS.md 中出现的全部 URL、DOI 与论文逐条列全,作为可追溯的一手来源清单。所有条目均来自 FACTS.md 的一手抓取(PhysioNet 内容页 + 论文元数据),未在本次扩写中新增网络抓取。
17.1 一手数据来源(Primary Sources)
| # | 类型 | 标识 | 链接 |
|---|---|---|---|
| P1 | PhysioNet 内容页(版本化) | 1.0.1 | https://physionet.org/content/bidsleep-dataset/1.0.1/ |
| P2 | PhysioNet 内容页(短链) | latest | https://physionet.org/content/bidsleep-dataset/ |
| P3 | PhysioNet 文件目录 | 1.0.1 | https://physionet.org/files/bidsleep-dataset/1.0.1/ |
| P4 | 数据集版本 DOI | 10.13026/rees-1092 | https://doi.org/10.13026/rees-1092 |
| P5 | 数据集 latest DOI | 10.13026/hace-p847 | https://doi.org/10.13026/hace-p847 |
| P6 | 抓取时点 | 2026-10-09 | 正文 48,943 字节,私有区 physionet_page.html |
17.2 论文与文献(Publications)
| # | 类型 | 文献 | 标识 |
|---|---|---|---|
| L1 | 原始论文(本数据集) | Song, T.-A., Zhang, Y., Zhou, Z., Hou, L., Malekzadeh, M., Behzad, A., & Dutta, J. (2025). AI-driven sleep staging using instantaneous heart rate and accelerometry: Insights from an Apple Watch study. IEEE Transactions on Biomedical Engineering, 2026 Apr;73(4):1596–1608. | doi:10.1109/TBME.2025.3612158 |
| L2 | 方法学前作 | Song TA, Chowdhury SR, Malekzadeh M, et al. (2023). AI-driven sleep staging from actigraphy and heart rate. PLoS One 18(5):e0285701(页面 ref [6];e-number 未逐字抓取,正文标 18:1–29). | PLOS ONE 2023 May |
| L3 | PhysioNet 平台引用(标准) | Pollard, T., Moody, B. E., Lehman, L., Gow, B., Fernandes, C., Xie, C., Johnson, A., Mark, R. G., & Heldt, T. (2026). PhysioNet as a global platform for biomedical research. Nature Health. | doi:10.1038/s44360-026-00096-z |
| L4 | 数据集 APA 引用(PhysioNet 官方) | Song, T., Zhang, Y., Zhou, Z., & Dutta, J. (2026). A Multi-Night Instantaneous Heart Rate and Accelerometry Dataset with EEG Sleep Stage Labels (version 1.0.1). PhysioNet. RRID:SCR_007345. | doi:10.13026/rees-1092 |
17.3 平台与基础设施标识
| # | 项目 | 值 |
|---|---|---|
| I1 | 平台 | PhysioNet(Open Access) |
| I2 | 平台维护 | MIT Laboratory for Computational Physiology |
| I3 | 平台 RRID | SCR_007345 |
| I4 | 平台资助 | NIBIB、NHLBI、NIH Office of the Director(U24EB037545、R01EB030362) |
| I5 | 数据集资助 | NIH R21AG068890、R01AG082354、P30AG073107;Dreem Jury’s Prize |
| I6 | 伦理审查机构(正文口径) | University of Massachusetts Lowell IRB |
| I7 | 作者机构口径 | University of Massachusetts Amherst |
17.4 作者与机构署名(v1.0.1)
| 作者 | Profile | 机构标注 |
|---|---|---|
| Tzu-An Song | bidslab |
The Department of Biomedical Engineering at the University of Massachusetts Amherst |
| Yubo Zhang | yubozhang |
University of Massachusetts Amherst |
| Ziyuan Zhou | ziyuanzhou |
University of Massachusetts Amherst |
| Joyita Dutta(通讯资深作者) | jd293952 |
University of Massachusetts Amherst |
17.5 检索与引用建议
- 写论文引数据集:用 L4(APA)+ P4(版本 DOI),并补 L1(论文)。
- 写模型卡/仓库:三引齐全(L4 + L1 + L3)。
- 需要"始终最新":用 P5(latest DOI),但复现导向仍应写版本号。
- 需要验明正身:以 P1(版本化内容页)为准,核对标题、版本、文件结构。
§18 存照附录:关键硬数字的来源逐条存照
本节把正文出现的每一个关键硬数字与其一手来源逐条对齐,供审阅者快速核证。来源缩写:PN = PhysioNet 内容页
https://physionet.org/content/bidsleep-dataset/1.0.1/(抓取时点 2026-10-09,正文 48,943 字节)。
| # | 硬数字 | 值 | 一手来源(PN 页面区块) | 存照状态 |
|---|---|---|---|---|
| S1 | 参与人数 | 47 名健康成人 | Abstract / Methods | ✅ 页面逐字 |
| S2 | 总夜数 | 253 夜 | Abstract | ✅ 页面逐字 |
| S3 | 单人夜数 | 至多连续 7 夜(个体 3–7) | Abstract / Data Description | ✅ 页面逐字 |
| S4 | 受试者文件夹数 | 47 | Data Description | ✅ 页面逐字 |
| S5 | 每夜文件数 | 3(hr.csv / motion.csv / labels.mat) | Data Description | ✅ 页面逐字 |
| S6 | IHR 采样率 | 约 0.2 Hz | Data Description | ✅ 页面逐字 |
| S7 | 加速度轴数 | 3(x, y, z) | Data Description | ✅ 页面逐字 |
| S8 | epoch 分辨率 | 30 秒 | Abstract / Data Description | ✅ 页面逐字 |
| S9 | 分期类别 | Wake/N1/N2/N3/REM(+Unknown=5) | Methods / labels.mat | ✅ 页面逐字 |
| S10 | 标签编码 | 0=Wake,1=N1,2=N2,3=N3,4=REM,5=Unknown | Methods / labels.mat | ✅ 页面逐字 |
| S11 | 对齐公式 | k = floor((t − recStart)/30) + 1 | Data Description | ✅ 页面逐字 |
| S12 | 许可 | ODC-By v1.0 | License 区 | ✅ 页面逐字 |
| S13 | 版本 DOI | 10.13026/rees-1092 | DOI 区 | ✅ 页面逐字 |
| S14 | latest DOI | 10.13026/hace-p847 | DOI 区 | ✅ 页面逐字 |
| S15 | 当前版本 | v1.0.1 | Versions 区 | ✅ 页面逐字 |
| S16 | 首发版本与日期 | v1.0.0 · 2026-05-12 | Versions 区 | ✅ 页面逐字 |
| S17 | v1.0.1 日期 | 2026-09-25(更新作者名单) | Versions / 页面 “Published Sept. 25, 2026” | ✅ 页面逐字 |
| S18 | 论文卷期页 | IEEE TBME 2026 Apr;73(4):1596–1608 | References 区 | ✅ 页面逐字 |
| S19 | 论文 DOI | 10.1109/TBME.2025.3612158 | References 区 | ✅ 页面逐字 |
| S20 | 前作 | PLoS One 2023(actigraphy + heart rate) | References 区 ref [6] | ⚠️ e-number 未逐字 |
| S21 | 平台 RRID | SCR_007345 | PhysioNet 页脚 | ✅ 页面逐字 |
| S22 | 资助编号(数据集) | R21AG068890, R01AG082354, P30AG073107 | Funding/Acknowledgements | ✅ 页面逐字 |
| S23 | 资助编号(平台) | U24EB037545, R01EB030362 | PhysioNet 页脚 | ✅ 页面逐字 |
| S24 | 专家复核人数 | 1(无评分者间裁决) | Methods | ✅ 页面逐字 |
| S25 | 参考设备 | Dreem 2 EEG Headband | Abstract / Methods | ✅ 页面逐字 |
| S26 | 待测设备 | Apple Watch(App 名 BIDSleep) | Abstract / Methods | ✅ 页面逐字 |
| S27 | 采集环境 | 家中 | Abstract / Methods | ✅ 页面逐字 |
| S28 | 同步方式 | 同一部 iPhone 同时记录 | Methods | ✅ 页面逐字 |
18.1 双口径与待核项存照
| # | 事项 | 口径 A | 口径 B | 状态 |
|---|---|---|---|---|
| D1 | IRB 机构 | UMass Lowell IRB(正文) | UMass Amherst(作者机构) | ⚠️ 冲突,页面未澄清 |
| D2 | 数据可获取性 | Access Policy “Anyone can access” | Files 区 “Data Not Available — your region” | ⚠️ 地区限制,非许可变更 |
| D3 | DOI 双口径 | 版本化 rees-1092 | latest hace-p847 | ✅ PhysioNet 常规双 DOI |
| D4 | 论文年份 | PhysioNet 引用标 (2026) | DOI 前缀/在线首发 2025 | ⚠️ 双口径并存 |
| D5 | 标签一致性 | 专家修正版 | 仅一人,无交叉验证 | ⚠️ 页面自曝局限 |
| U1 | 性别比例/年龄分布 | 未披露(仅"无性别/族裔限制") | — | 🔍 待核 |
| U2 | 各睡眠阶段 epoch 计数 | 未披露 | — | 🔍 待核 |
| U3 | hr.csv / motion.csv 行数与总大小 | 未披露 | — | 🔍 待核 |
| U4 | 前作 PLoS One 2023 e-number | 页面只给 18:1–29 | — | 🔍 待核 |
| U5 | 逐文件 md5/校验和 | 沙箱区域受限未能实抓 | — | 🔍 待核 |
存照原则:凡"页面逐字"项可直接引用;凡"待核"项(U 系列)在论文中不要编造数字,如需可在方法中注明"未披露";凡"双口径"项(D 系列)应按页面原文双写,不擅自裁决。
18.2 存照方法学说明
- 截图/存档:抓取时点页面正文 48,943 字节已存私有区
physionet_page.html,可复核。 - 版本锚定:以下所有硬数字对应 v1.0.1(2026-09-25)。
- 可复现核验路径:打开 P1 → 依次核对 Abstract(S1/S2/S3/S8/S9)、Data Description(S4–S8/S11)、Methods(S9/S10/S19/S24–S28)、License(S12)、Versions(S15–S17)、References(S18–S20)、页脚(S21–S23)。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- ieeepg — 共享标签:生理信号 / 可穿戴传感 / 心电信号 / 时序数据 / 评测基准
- mmash — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 心电信号 / 评测基准
- dreamt — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 评测基准
- hmc-sleep-staging — 共享标签:生理信号 / 睡眠信号 / 心电信号 / 评测基准
- apnea-ecg — 共享标签:生理信号 / 睡眠信号 / 心电信号 / 评测基准
- shanghai-t1dm-t2dm-cgm — 共享标签:生理信号 / 可穿戴传感 / 时序数据 / 评测基准
- boas-bitbrain — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 评测基准
- wearable-exam-stress — 共享标签:生理信号 / 可穿戴传感 / 时序数据 / 评测基准
- globem — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 评测基准
- cinc-2018-sleep-arousal — 共享标签:生理信号 / 睡眠信号 / 时序数据 / 评测基准
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

