急诊头九十分钟的十二万份心电 — MIMIC-IV-Ext-MDS-ED

129095 行 ECG 记录 / 2408 列七个分组 / 急诊到达后 1.5 小时窗口

来源 https://physionet.org/content/multimodal-emergency-benchmark/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 10
急诊头九十分钟的十二万份心电 — MIMIC-IV-Ext-MDS-ED

信息速览

数据集名称急诊头九十分钟的十二万份心电 — MIMIC-IV-Ext-MDS-ED
数据类型表格数据,多标签目标,趋势聚合,原始波形索引,基准划分
规模129095 行 ECG 记录 / 未公布去重患者数
接入方式https://physionet.org/content/multimodal-emergency-benchmark/1.0.0/
AI 就绪度

急诊室里有两个在同时走的时钟。一个是「已经出了什么事」的时钟:诊断是什么、属于心脏还是非心脏、要不要收进监护病房。另一个是「还要出什么事」的时钟:接下来几小时会不会恶化、要不要现在就把床位和呼吸机准备好。临床上的难点在于,这两个时钟共用同一批信息却没人把它们排在同一张表里——波形在一个系统,检验在另一个系统,收费编码在第三个系统;做公开数据集的人通常也只解决其中一半:给波形的库缺临床上下文,给电子病历的库缺原始波形。急诊多模态决策支持想要往前走,卡住的从来不是模型,是那张把两者按同一条急诊就诊对齐好的表。

MIMIC-IV-Ext-MDS-ED 就是冲着这张表来的,而且它几乎是极简到有点俭省:整个数据集只有一个主文件 mds_ed.csv,129095 行、2408 列,一行对应一份十二导联心电图,行内同时带着这份心电图所在急诊就诊在到达后头 1.5 小时里能攒到的全部东西——人口学、体格测量、六项生命体征的趋势聚合、四十五项检验值的趋势聚合,外加两个目标组:1428 个 ICD-10 出院诊断标签与 15 项恶化标签(6 项恶化判定、两个时域的 ICU 收住、七个时域的死亡)。波形本身不在这张表里,表只留索引列 general_file_name 与 general_data 指回 MIMIC-IV-ECG。

它的取舍非常清楚:牺牲自包含,换对齐。好处是这张表能压到单文件可发布的量级,代价是使用它必须先拿到四份 MIMIC 模块的凭证。下面的一屏速览表给出关键边界,正文再逐一解释那些容易踩错的地方。

维度 内容
全名 MIMIC-IV-Ext-MDS-ED: Multimodal Decision Support in the Emergency Department - a Benchmark Dataset for Diagnoses and Deterioration Prediction in Emergency Medicine
常用简称 MDS-ED(出自配套论文题名)
发布方 PhysioNet,由 MIT 计算生理实验室托管
贡献者 Juan Miguel Lopez Alcaraz、Nils Strodthoff,德国奥尔登堡大学(Carl von Ossietzky Universität Oldenburg)
首次发布 2024 年 9 月 12 日,版本 1.0.0,仅此一版
最近改动 无(1.0.0 为初始版本,页面未列出任何后续修订)
主文件 mds_ed.csv,单文件发布
行数 129095 行,官方定义为 ECG 记录数
患者数 官方页面未给出去重后的患者数或急诊就诊数
列数 官方页面写明 2408 列;分组小标题处写的是各组占 1935 中的多少
列分组 general 22 / demographics 7 / biometrics 3 / vital parameters 55 / laboratory values 405 / diagnoses 1428 / deterioration 15(分母按官方分组小标题为 1935)
目标规模 诊断 1428 个 ICD-10 编码;恶化 15 项标签(6 项恶化判定 + 2 个 ICU 收住时域 + 7 个死亡时域)
时间窗口 急诊到达后头 1.5 小时(90 分钟),由列 general_90min 标记窗口终点
上游来源 MIMIC-IV v2.2、MIMIC-IV-ECG v1.0、MIMIC-IV-ECG-Ext-ICD v1.0.1、MIMIC-IV-ED v2.2
波形本身 不在本发布物内,须按索引回到 MIMIC-IV-ECG(十二导联、10 秒、500 Hz)取
基准划分 20 折:0–17 训练、18 验证与模型选择、19 测试;验证与测试折只取每条就诊的第一份心电图
文件格式 单张宽表 CSV
许可 PhysioNet Credentialed Health Data License 1.5.0,另须签署凭证化数据使用协议 1.5.0
访问门槛 凭证制:须完成 CITI「仅数据或标本」研究课程并通过 PhysioNet 审批
DOI 版本 DOI 10.13026/p90d-vd84;最新版本 DOI 10.13026/fm1f-2558
典型用途 急诊多模态诊断预测、恶化早期预警、原始波形相对聚合特征的增量价值评测

§1 它要解决的具体麻烦

1.1 两个时钟,两种数据集

把急诊相关的公开资源按「输入」和「目标」两条轴摆开,缺口的位置一目了然。

资源类型 典型输入 典型目标 缺的那一半
波形库 原始十二导联或长时程心电 单一任务:心律分类、房颤检测 没有生化、没有生命体征、没有结局
电子病历库 表格化的诊断、用药、操作、实验室 常常要使用者自己定义任务 没有原始波形,链接到波形要靠自己拼接
分诊/急诊专项表 分诊等级、主诉、生命体征快照 收住院与否、短期再就诊 缺波形态与检验趋势
单任务预测基准 单一模态或少模态 一个或两个标签 不能回答「多模态到底值不值」

最后一行的边界,正是这篇数据要跨过去的:它同时把 demographic(人口学)、biometrics(体格测量)、vital parameters(生命体征及其趋势)、laboratory values(检验值及其趋势)、原始波形索引这五类输入对齐到同一行,并把目标从「一个标签」扩到「1443 个标签」。这不是把几个库打包,而是把「对齐」本身当作成果发布。

1.2 四种常见的错误期待

说法 实际 证据
「下载这一份就够了」 主表只含索引列,波形要回到 MIMIC-IV-ECG 取 general_file_name 描述为 path to the waveform,general_data 描述为 MIMIC-IV-ECG 中的波形索引
「它有十二万患者」 129095 是 ECG 记录数,不是患者数 官方写 129095 rows (ECG records);页面未给去重患者数
「这是原始波形数据集」 发布物是一张宽表 CSV,波形在上游 数据描述段只列出一个主表文件
「标签都可用」 恶化标签含 -999 特殊值表示本次就诊不适用 官方明确写出 -999 是因临床流程缺失而排除该项标签

第三条尤其容易踩。看到官方摘要里「包括 ECG waveforms」这句话,很多人以为下载目录里能直接读到信号;实际能读到的只有一列波形路径与一列波形索引。这不是偷工减料,而是一个明确的设计选择:一张 129095 行、2408 列的浮点表可以整体读进大多数机器的内存,而把同等信息量的原始波形塞进同一个文件, file 体积会膨胀到无法按单文件发布的量级。

1.3 它能给到的与给不到的

你的需求 它给的 够不够
多模态 vs 单模态的增量价值 五类输入 + 官方推荐的按模态消融的基准划分 够,这是它被造出来的主因
原始波形 vs 波形派生的聚合特征 索引列可回到 500 Hz 波形,表里另有九种趋势统计量 够,两种口径在同一批样本上可比
大标签空间的诊断预测 1428 个 ICD-10 出院诊断(含 ICD-10-CM 的急诊与住院两套来源) 够做标签空间研究,注意长尾标签的样本支撑
恶化/早期预警 15 项标签,覆盖 6 项恶化判定、2 个 ICU 时域、7 个死亡时域 够覆盖主流定义,具体时域需读配套论文
急诊场景的时间约束研究 固定 1.5 小时窗口,且所有行共享同一窗口定义 够,但不能退回到更早或更晚窗口
一个包含波形的自包含数据 不含波形本体 不够,必须同时申请上游库
多中心验证 单一机构来源的 MIMIC 系家族 不够,只能做「同院内」的时间或人群切片
干预效果或因果推断 横断面预测表,无干预变量 不够

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你有一个多模态预测模型,缺一个能复现别人的评测口径 现成的 20 折划分与「验证/测试折只取首份心电图」规则 严格按 general_strat_fold 取值 18/19 跑验证与测试,不要自建划分
你在论证「原始波形比聚合特征更有价值」 同一批样本的两种输入口径都在 固定划分与随机种子,跑"波形 vs 聚合"对照,把增益归因到具体目标
你在做急诊早期预警,愁标签定义众口不一 15 项恶化标签沿用明确的既有共识定义 先读 Mitchell 等 2022 的定义原文(参考文献 [8]),再决定如何落地 -999
你想做大标签空间的长尾诊断预测 1428 个 ICD-10 标签在同一口径下切好 先在 head 标签上复基线,再谈长尾
你只有一颗 GPU、怕数据太大 主表是 CSV 宽表,行数与十万人级表接近 用列组分块读取,不要整表 read_csv 到默认浮点
你已经拿到 MIMIC-IV 全套凭证 它是把四个模块串起来的现成缝线 先核对上游版本号与它对齐(§3.4)

1.5 一句话判断

它卖的不是数据量,是对齐与口径:十二万行 ECG 记录已经被同一条时间窗、同一套标签定义、同一份二十折划分串成了一个可以直接开局评测的表;想靠它拿到新数据,多半会失望,想靠它省掉半年对齐工作,多半会惊喜。

1.6 不适合谁:四条边界

不适合当作自包含数据使用。 波形在上游,表格只有在你同时拿到 MIMIC-IV-ECG 凭证时才完整。把 general_file_name 当成已经下载好的路径,是新手最常见的第一天事故。

不适合当训练集规模的来源。 129095 行的单位是 ECG 记录而不是人;同一个人可能有多次急诊就诊、同一条就诊可能有多份心电图。任何按行随机切分的做法都会把同一个人的多次记录分到两侧,评出来的分数不可信(§2.6、§5.6)。

不适合用来回答「再加一个模态值不值」以外的临床问题。 它没有用药信息、没有主诉文本、没有影像。配套代码仓库的说明也明确写了:主诉与既往用药因非结构化与潜在偏倚被排除在外(§4.2)。

不适合做前瞻性或时间外推的验证。 特征窗口被钉死在到达后 1.5 小时,任何「如果再多观察两小时会怎样」的问题都不在它的范围内。

§2 数据构成与规格

2.1 一张表,七个列组

官方把 2408 列分成七组。注意这里有两套数字并存:页面正文说这张表有 2408 列,而每个小组的小标题写成「X/1935」。把各组小标题里的分子相加:22 + 7 + 3 + 55 + 405 + 1428 + 15 = 1935,恰好等于那个分母;输入侧(前五组)合计 492,目标侧(后两组)合计 1443。2408 与 1935 之间相差 473 列,官方页面没有解释这 473 列是什么,本文也不做猜测——下文凡涉及列数的地方一律以上述两套官方数字为据并在附录 A 标注。

组 列名前缀 官方列数(小标题分子) 角色 能否作输入特征
A General general_ 22 主键、时间戳、索引、结局时间、划分折 官方明确不可作输入
B Demographics demographics_ 7 年龄、性别、族裔 可以
C Biometrics biometrics_ 3 体重、身高、体质指数 可以
D Vital parameters 页面行文写 demographics_(疑为笔误) 55 六项生命体征及其趋势 可以
E Laboratory values labvalues_ 405 四十五项检验值及其趋势 可以
F Diagnoses diagnoses_ 1428 预测目标:ICD-10 出院诊断 只能作目标
G Deterioration deterioration_ 15 预测目标:恶化事件 只能作目标

A 组不可作输入这一点,字面上很技术,实则是这张表的核心纪律:general_ 里装的是本次就诊的结局与时间信息——死亡小时数、ICU 收住小时数、波形索引、日期、划分折——把这些列喂给模型,等于把答案连同考卷一起递进去。任何人写「用除日期外的所有列做输入」这样的代码,都会在这张表上得到虚高到荒谬的结果。

2.2 general_ 二十二列的完整字典

官方把这二十二列的名字与含义逐条列出,下表按官方顺序照录。

列名 官方含义 用它能干什么
general_file_name 波形文件路径 回到 MIMIC-IV-ECG 取信号的唯一钥匙
general_study_id MIMIC-IV-ECG 内的 study id 与上游波形的另一个对齐口径
general_subject_id MIMIC-IV-ECG 内的 subject id 去重人数、做患者级划分的唯一可靠依据
general_ecg_time 波形采集时刻 与 general_intime 比较得「到达后多久做的心电」
general_ed_stay_id 急诊停留标识 就诊级分组键
general_ed_hadm_id 来自急诊系统的住院标识 把急诊与住院两侧接起来
general_ed_diag_ed 来自急诊系统的 ICD-10-CM 急诊出院诊断 目标侧的急诊口径来源
general_ed_diag_hosp 来自急诊系统的 ICD-10-CM 住院出院诊断 目标侧的住院口径来源
general_anchor_age anchor_year 时的年龄 年龄定义的边界(不是就诊当日年龄)
general_anchor_year 指定的 anchor_year 日期去标识化的一部分
general_dod 死亡日期(如适用) 与 general_mortality_days 互为交叉验证
general_ecg_no_within_stay 某次就诊内心电图的序号 评测折取首个值的依据(== 0)
general_strat_fold 多标签分层折 训练/验证/测试的现成划分
general_intime 患者急诊入院时间 窗口起点
general_outtime 患者急诊离科时间 判断 1.5 小时窗口是否被急诊停留长度截断
general_race 患者族裔 公平性评估的自变量
general_90min 特征采集窗口终点 窗口定义本身,跨意义的边界
general_mortality_hours 入院到死亡的小时数 死亡类恶化标签的来源变量
general_mortality_days 入院到死亡的天数 同上,单位不同
general_hosp_dischtime 住院出院时间 住院口径诊断的时间对照
general_icu_time_hours 急诊入科到 ICU 收住的小时数 ICU 收住标签的来源变量
general_data MIMIC-IV-ECG 中的波形索引 取波形时定位到第几条记录

这二十二列里藏着三个人造基石。第一个是 general_subject_id:它决定了「多少个不同的人」这个问题的唯一答案路径,而官方恰恰没有给出这个答案的人数。第二个是 general_strat_fold:它让不同论文的结果可比,代价是你必须接受别人的划分。第三个是 general_ecg_no_within_stay:它把「一个人做很多份心电」带来的评测膨胀直接掐掉,代价是验证/测试时的样本量会明显小于行数。

2.3 九种趋势聚合后缀

D 组与 E 组的核心设计是「不存时间序列,只存时间序列的九个摘要」。这让宽表得以成立:四十五项检验若各自存原始序列,表宽会失控;存九个摘要则每项检验只占九列。

后缀 官方含义 适合捕获什么
_mean 均值 总体水平
_median 中位数 抗离群值的水平
_min 最小值 最差点,恶化常常先看这里
_max 最大值 峰值,如乳酸、肌钙蛋白的尖峰
_std 标准差 波动幅度
_first 首次取值 到达时的基线
_last 末次取值 窗口末的状态
_change 变化率 _first 与 _last 之间的相对变化
_coeff 线性模型斜率 以「距到达分钟数」为自变量拟合的趋势方向

最后一项值得多说一句。官方写得很具体:这个斜率是拿「取值时刻与到达时刻的分钟差」当自变量、取值本身当因变量拟合出来的。这意味着它不是简单的首尾差分,而是把窗口内所有采样点都用上的趋势估计,因此对单次测量噪声更稳;同时也意味着它对测量次数为 1 的项没有额外信息可言。官方页面没有说明测量次数不足时这些列的取值方式,这一点放进 §10 的未核验清单。

2.4 输入模态的结构与一处对不上的算术

官方在 D 组列出了六项生命体征:体温、心率、呼吸频率、血氧饱和度、收缩压、舒张压;在 E 组列出了四十五项检验值。按「每项 × 九种聚合」算,六项体征应得 54 列,四十五项检验应得 405 列。后者与官方给出的 405 完全一致,前者与官方给出的 55 相差 1。本文不猜那一列是什么,只把它记为待核。

组 官方列数 枚举项数 每项聚合数 算术校核
Vital parameters 55 6 9 6 × 9 = 54,与 55 差 1(官方未说明)
Laboratory values 405 45 9 45 × 9 = 405,一致
Demographics 7 3(年龄、性别、族裔) 未列 官方未给编码方式,疑与独热或分组有关,待核
Biometrics 3 3(体重、身高、体质指数) 一致 官方只给了三项,无缺口

检验组列出的四十五项覆盖血常规、生化、凝血、血气与心肌损伤标志物几大类,其中直接用于心脏与灌注判断的几项(乳酸、肌钙蛋白 T、肌酸激酶及其 MB 同工酶、脑钠肽?——官方未列此项)决定了它在急诊场景的可解释性边界。要强调一遍:官方列出的四十五项里包含 troponin t(肌钙蛋白 T),没有列出 BNP/NT-proBNP,这与很多人心目中「心衰急诊该有的标志物」不同,用到时会缺一味常用自变量。

2.5 目标层:两个任务,两套完全不同的语义

F 组与 G 组虽然都叫「目标」,但语义差别极大,混在一个损失函数里会让两个任务互相干扰。

目标组 官方列数 值域 定义来源 使用注意
Diagnoses 1428 二进制 沿用 MIMIC-IV-ECG-Ext-ICD 的 ICD-10 编码流程(参考文献 [2,9]) 出院诊断而非到达诊断,含信息泄漏式的时间错位:诊断在患者离院后才定
Deterioration 15 二进制,外加 -999 沿用常用的临床恶化定义(参考文献 [8]) -999 表示该次就诊因临床流程缺失而整项标签被排除,不是缺失值

G 组的十五列有一个干净的拆分:6 项临床恶化判定 + 2 个时域的 ICU 收住 + 7 个时域的死亡 = 15。官方页面与配套仓库都没有逐条列出这十五列的名字,摘要只点名了心脏骤停、机械通气、ICU 收住与死亡四类事件;因此想按某一个具体时域做研究的人,必须先阅读标签定义原文并自行核对列名含义,不能靠猜。这也是本文把「十五项的具体名称与时间点」列为未核验内容的原因(§10)。

F 组的口径同样要盯紧。它是出院诊断,而不是到达时的或急诊当班的诊断。这意味着两件事:一是标签里天然包含了「后来发生了什么」的信息,用它衡量「到达 1.5 小时内的信息能预测什么」时,评测的是住院全过程的信息上界的一部分;二是急诊口径(general_ed_diag_ed)与住院口径(general_ed_diag_hosp)都被放进表里,两者在颗粒度与编码习惯上并不等价,合并或二选一都会改变标签空间。

2.6 主键与上游映射:这张表真正贵的部分

单看 2408 列会觉得它是一份「宽表」,看映射关系才明白它的成本在哪——每一行背后横跨四个 MIMIC 模块的多张源表。

本表内容 来自哪个上游 源表(官方列出)
波形文件位置与索引 MIMIC-IV-ECG v1.0 general_file_name、general_data、general_study_id
就诊号、去重人数口径 MIMIC-IV-ECG v1.0 general_subject_id
急诊停留、离科时间 MIMIC-IV-ED v2.2 edstays;对应 general_ed_stay_id、general_intime、general_outtime
急诊处置诊断 MIMIC-IV-ED v2.2 diagnosis;对应 general_ed_diag_ed
生命体征原始取值 MIMIC-IV-ED v2.2 vitalsign
分诊信息 MIMIC-IV-ED v2.2 triage
发药记录 MIMIC-IV-ED v2.2 pyxis
住院侧诊断与操作 MIMIC-IV v2.2 diagnoses_icd、procedures_icd;对应 general_ed_diag_hosp
检验结果 MIMIC-IV v2.2 labevents 与字典表 d_labitems
住院停留、ICU 停留、死亡日期 MIMIC-IV v2.2 admissions、icustays;对应 general_mortality_days、general_icu_time_hours
病历摘要指标 MIMIC-IV v2.2 omr
ICD-10 标签流程与分层折 MIMIC-IV-ECG-Ext-ICD v1.0.1 参考文献 [2,9],对应 general_strat_fold、diagnoses_*

这张映射表同时也是完整的依赖清单:四个上游模块缺一个,这张表就无法复原。做长期维护的项目尤其要记这一点——上游模块升版时,这里的 general_file_name 与 general_data 是否仍指向同一份文件,是需要重新核对的事情,官方页面并未承诺跨版本稳定性。

2.7 一行记录的完整解剖

把一行读出来要走的七步:

步 读什么 为什么必须先读
1 general_subject_id、general_ed_stay_id 决定划分键,晚了就要返工
2 general_intime、general_90min、general_outtime 判断特征窗口是否被提前离开急诊截断
3 general_ecg_no_within_stay 判断这一行是否属于评测折里的首份心电
4 general_strat_fold 判断它是训练、验证还是测试样本
5 demographics_*、biometrics_* 低维输入,先核对取值范围与缺失编码
6 体征与检验的九后缀列 高维输入,确认测量次数不足时列的取值方式
7 diagnoses_*、deterioration_* 目标侧,同时把 -999 单独拎出来

按前缀分组取列的写法:

import pandas as pd

#-- 只读一遍表头,避免整表进内存
head = pd.read_csv('mds_ed.csv', nrows=0)
groups = {}
for c in head.columns:
    pref = c.split('_')[0]
    groups.setdefault(pref, []).append(c)

for k, v in groups.items():
    print(k, len(v))          #-- 期望看到 general/demographics/biometrics/... 各组的列数

上面的代码只在十秒左右告诉你一件事:你手里这份表的分组是否和官方描述一致。如果 general 组不是 22 列、或者出现了计划外的前缀,说明版本对不上,后面所有基于列位的假设都要推倒重来。

§3 它是谁的数据

3.1 贡献者与发布方

角色 主体 说明
作者 Juan Miguel Lopez Alcaraz 奥尔登堡大学,PhysioNet 用户名 juanlopezcode
作者 Nils Strodthoff 奥尔登堡大学,PhysioNet 用户名 nstrodt
所属机构 Carl von Ossietzky Universität Oldenburg 德国奥尔登堡大学
托管平台 PhysioNet / MIT 计算生理实验室 负责长期保存、凭证审批与版本发布
配套论文第三作者 Hjalmar Bouma 出现在 arXiv 与期刊版论文作者名单,不在 PhysioNet 页面的作者信息里
配套代码 GitHub 仓库 AI4HealthUOL/MDS-ED 官方页面 Website 字段给出,另存 Zenodo DOI 10.5281/zenodo.13753554

一个容易被忽略的细节:PhysioNet 页面的作者只有两人,而承担研究设计的那部分工作所对应的第三作者只出现在论文里。引用数据集时按 PhysioNet 页面给的作者串,引用论文时按论文作者串,两者不能互相替代。

3.2 时间线

时间 事件 出处
2023 年 四个上游模块发布(MIMIC-IV v2.2、MIMIC-IV-ED v2.2、MIMIC-IV-ECG v1.0、MIMIC-IV-ECG-Ext-ICD v1.0.1) 官方页面参考文献 [3]–[6]、[9] 的出版年份
2024 年 标签流程与方法论文发表(European Heart Journal - Digital Health,ztae039) 参考文献 [2]
2024 年 7 月 25 日 配套论文首次挂 arXiv(2407.17856 v1) arXiv 页面
2024 年 9 月 12 日 数据集作为 PhysioNet 项目发布,版本 1.0.0 PhysioNet 项目页面
2025 年 4 月 30 日 论文更新至 v4 arXiv 页面
2025 年 论文正式发表于 Computers in Biology and Medicine,卷 192 第 A 部分,页码 110196 arXiv 页面给出的期刊参考信息与配套仓库

需要点明一处官方文档与现实的错位:PhysioNet 页面的参考文献 [1] 至今把它写作 arXiv preprint arXiv:2407.17856,而该文已经正式出版。这不是数据本身的问题,但它会影响引用习惯——想在自己的论文里引用这项工作的人,应当引用已出版的期刊版本而不是预印本。

3.3 采集场景

上游是单家医院:贝斯以色列女执事医疗中心(Beth Israel Deaconess Medical Center,BIDMC)的急诊科。MIMIC-IV-ECG 给出的规模是约八十万份诊断级心电图、近十六万名不同患者;这批心电采自 Burdick/Spacelabs、Philips、General Electric 等多家厂商的设备,每份 10 秒、12 导联、500 Hz,覆盖 2008 至 2019 年。

这张表把这批心电限定为一个非常具体的时间切片:患者在急诊科的那次停留,且是从到达那一刻起算的头九十分钟。窗口内的体征与检验来自急诊部门的常规记录与发药记录,离开了常规临床流程就不会产生;这就是为什么 G 组要用 -999 而不是空值来表示「本次就诊没走这条路」。理解这一点,就能理解为什么官方要专门设一个特殊值:它区分的是「流程没发生」与「发生了但没记下来」,而这两件事对一个预测模型来说是完全不同的两种信息。

3.4 来源的四个层次

官方在项目页面把四个上游模块列为 Parent Projects,并明确要求使用时一并引用。它们各管一段,缺一段这张表就断链。

层 模块与版本 在本表里提供什么 缺了会怎样
波形层 MIMIC-IV-ECG v1.0 十二导联 10 秒波形本体、study_id、subject_id 有标签没有信号,只能做纯表格模型
标签层 MIMIC-IV-ECG-Ext-ICD v1.0.1 ICD-10 诊断标签流程、二十折分层划分 1428 个诊断目标与 general_strat_fold 无来源
临床层 MIMIC-IV v2.2 住院诊断、操作、检验、ICU 停留、死亡日期、omr 检验与住院结局整块缺失
急诊层 MIMIC-IV-ED v2.2 急诊停留、分诊、生命体征、发药、急诊诊断 90 分钟窗口内的一切都无从谈起

四层之上还有第五层:PhysioNet 的凭证体系。这不是数据层,但它决定了「能不能拿到」这个最实际的问题。四份模块加平台审批,是这张表真正的入场券;任何宣称「一行命令下载完」的教程,都是没走完这道门的人写的。

§4 它最独特的东西

4.1 稀缺在哪:六件事同时成立

单看每一项,市面上都能找到替代品;六项同时成立的,目前很少。

维度 常见做法 这里的做法 稀缺程度
多模态对齐 各模态各一张表,靠使用者自己 join 五类输入压进同一行,键是 ECG 记录 高
标签空间 一个任务几个到几十个标签 1428 个诊断 + 15 项恶化,合计 1443 很高
波形与聚合特征同源 要么只给波形,要么只给特征 表内给聚合特征,表外指回同源 500 Hz 波形 高
时间窗定义 各研究自定义 统一钉死在到达后 1.5 小时 中高
可复现划分 使用者自建 官方二十折 + 评测折只取首份心电 高
规模 十几万到上百万行不等 129095 行 ECG 记录 中

最有价值的是第二行与第三行的组合。大标签空间本身不稀奇,稀奇的是它和原始波形落在同一批样本上——这让你可以在同一份划分上问一个很具体的问题:把 10 秒的十二导联原始信号放进模型,比只给它九种趋势摘要,能多认出多少个诊断。

4.2 差异化的证据:分清作者主张与数据事实

配套仓库里有几条自我评价,读的时候要分清它们属于哪一类。

说法 出处 属于哪类
在开源领域患者数第一、就诊数第二(限定只取到达后 1.5 小时) 配套仓库 README 作者主张,需要独立复核
主诉与既往用药因非结构化与潜在偏倚被排除 配套仓库 README 设计说明,可直接采信
目标标签合计 1443 个 配套仓库 README 与官方页面 1428 + 15 相加一致,可交叉验证
原始波形输入相对聚合特征输入的提升具有统计显著性 论文结论 论文结论,需读原文的方法与检验细节
诊断任务中 1428 个条件有 609 个 AUROC 超过 0.8,恶化任务 15 项中有 14 项超过 0.8 论文摘要 论文报告的性能值,不是数据本身的分布统计

最后一行容易被误读成「这个数据集很好训」。它说的是:在作者设定的基线与划分下,多数目标能被做到 0.8 以上。这两个数字是模型成绩,不是数据质量指标;换模型、换划分、换预处理,数字都会变。真正稳定的是那份划分与那份标签定义,它们才是跨论文可比的基础。

4.3 一行记录怎么变成一次实验

拿一条带恶化标签的行走一遍完整链路,可以看清它到底省掉了什么。

步 动作 依赖的列 省掉的原始工作
1 按 general_subject_id 分组,确认该行属于训练折 general_strat_fold 自己做分层抽样
2 用 general_intime 与 general_90min 框出窗口 两列时间戳 自己从急诊流水里切窗口
3 取体征与检验的九后缀列 前缀 demographics_、labvalues_ 等 自己写聚合、自己处理多次测量
4 用 general_file_name 回到 MIMIC-IV-ECG 取 10 秒波形 两列索引 自己做波形与病历的匹配
5 按官方推荐重采样到 100 Hz、线性插值、裁到 3 mV 无 自己定预处理并写进方法节
6 读 deterioration_*,把 -999 单独掩掉 目标列 自己对齐恶化定义与时间点

第三行与第四行合起来,就是这张表最实在的贡献。任何一个做过 MIMIC 的人都知道,把「急诊到达时刻」与「本次就诊第一份心电图」对上,需要处理时间偏移、多次就诊、跨模块主键不一致这几类麻烦;这张表把这些麻烦一次性做完了,并且把做法写成了可复现的二十折。

4.4 标注粒度:三层,别混用

粒度 键 能回答的问题 不能回答的问题
行级(ECG 记录) general_data / general_file_name 这份心电能预测什么 这个患者整体如何
就诊级 general_ed_stay_id 这次急诊会发生什么 这个患者下一次会怎样
患者级 general_subject_id 这个人的健康状态 同一人多次就诊之间的演变

混用的后果很具体。你若按行做随机划分,同一个人在同一次就诊里的多份心电会同时落在训练与测试两侧;这些记录共享同一段病史、同一批检验、同一个恶化结局,模型只要记住「这个人的检验模式对应这个结局」就能拿到虚高分。官方在评测折上只取每条就诊的第一份心电(general_ecg_no_within_stay == 0),正是为了压住这类膨胀;但训练折保留了全部心电,所以你自己的实验若在训练侧也照抄「只取首份」,结果就与官方基线不可比。

4.5 边界条件

边界 具体值 影响
时间窗 到达后头 1.5 小时(90 分钟) 早于或晚于这个窗口的信息一律不在表内
急诊停留长度 由 general_outtime 给出,可能短于 90 分钟 窗口末尾的测量数会因提前离科而减少
机构 单一医学中心(BIDMC) 不能当多中心泛化证据
年代 上游覆盖 2008–2019 年 设备与流程随年代变化,跨年比较需谨慎
编码体系 ICD-10-CM,急诊与住院两套口径并存 两套口径的标签空间不等价
人群 到达急诊且做了十二导联心电的人 未做心电的急诊患者不在样本内,选择偏倚由此产生
访问 凭证制 + 数据使用协议 1.5.0 不可二次分发,衍生模型的分发也受限

最后一行是最容易被忽略的硬边界。凭证制意味着你不能把 mds_ed.csv 传给合作者,只能让合作者各自申请;它也意味着用这张表训出来的模型若要公开权重,需要先读一遍协议里关于衍生作品的条款。

§5 怎么拿到:从凭证到可训练张量

5.1 下载面的真实情况

先讲一个必须讲清楚的事:在本次核验所用的网络环境下,项目页可以正常打开,但文件面板返回的是「Data Not Available,数据因法律或政策原因在本地区不可用」。这不是页面错误,是凭证制的正常表现——没有完成认证的会话看不到文件清单,也拿不到目录索引。

访问路径 本次核验的结果 说明
/content/multimodal-emergency-benchmark/ HTTP 200 项目主页可读,摘要与数据描述完整
/content/multimodal-emergency-benchmark/1.0.0/ HTTP 200 版本页可读,含许可、DOI、Parent Projects
/files/multimodal-emergency-benchmark/1.0.0/ HTTP 403 未认证会话被拒,文件清单不可见
/files/multimodal-emergency-benchmark/1.0.0/mds_ed.csv HTTP 403 同上,主表不可直接取
主表文件名 页面正文给出 官方数据描述段只点名 mds_ed.csv 一个主表
打包压缩包 页面未提及 不能假定存在整包下载

这条链路解释了一个常见困惑:为什么搜「mds_ed.csv 下载」找不到任何直链。文件不是没有,是必须过门。门后的目录树里到底还有没有别的文件,本文无法核验,因此附录 A 只记录页面明确写出的 mds_ed.csv,不臆测附属文件。

5.2 拿到凭证的五个步骤

步 做什么 卡点
1 注册 PhysioNet 账号并补全机构与身份信息 姓名须与证件一致,后续审批会核
2 完成 CITI「Data or Specimens Only Research」课程 官方页面把它列为 Required training
3 提交凭证化访问申请,等待人工审批 通常需要数个工作日,不接受加急
4 逐个项目签署数据使用协议 1.5.0 四个上游模块与本文数据集都要各自签
5 通过认证会话下载 直链带会话,不能拷给别人用

第三步到第四步之间最容易出问题:很多人以为签了 MIMIC-IV 就自动获得本数据集,实际上这是独立项目,需要单独签署;反过来只签本数据集也拿不到波形,因为波形在上游。

5.3 分块读取宽表

2408 列、129095 行的 CSV 按默认参数整表读入会吃掉数十 GB 内存,正确做法是按列组切。

import pandas as pd

#-- 先读表头,按前缀把列分成若干组
head = pd.read_csv('mds_ed.csv', nrows=0)
cols = list(head.columns)

def pref(c):
    #-- 列名一律是 前缀_名称 的形式,取第一段即可
    return c.split('_')[0]

gen_cols = [c for c in cols if pref(c) == 'general']
lab_cols = [c for c in cols if pref(c) == 'labvalues']
dx_cols  = [c for c in cols if pref(c) == 'diagnoses']
det_cols = [c for c in cols if pref(c) == 'deterioration']
print(len(gen_cols), len(lab_cols), len(dx_cols), len(det_cols))

这段代码有个已知的坑:生命体征组的官方行文写的是 demographics_ 前缀,与它自己的小节标题对不上(§2.1 表)。如果你按前缀找体征列,要么找不到,要么把人口学组一起捞进来。稳妥的办法是先用「全部列减去已知前缀」把剩下的列列出来,再对照 55 这个数量去认领,而不是相信页面上的那句前缀说明。

5.4 回到上游取波形

拿到 general_file_name 之后,波形要从 MIMIC-IV-ECG 取。官方给出的基准预处理只有三步:重采样到 100 Hz、缺失值线性插值、幅度裁到 3 mV,除此之外不再加工。

import numpy as np
import wfdb
from scipy.signal import resample_poly

FS_OUT = 100
MAX_MV = 3.0

def load_wave(path, fs_in=500):
    #-- path 即 general_file_name 指向的记录,500 Hz 来自上游说明
    rec = wfdb.rdrecord(path)
    x = rec.p_signal.astype('float32')          #-- 形状 (5000, 12)

    #-- 缺失值线性插值,仅对中间缺口;两端缺口官方按 0 处理
    for j in range(x.shape[1]):
        v = x[:, j]
        bad = np.isnan(v)
        if bad.all():
            v[:] = 0.0
        elif bad.any():
            idx = np.arange(len(v))
            v[bad] = np.interp(idx[bad], idx[~bad], v[~bad])
        x[:, j] = np.clip(v, -MAX_MV, MAX_MV)

    #-- 500 到 100 是整数比,poly 相位更稳
    y = resample_poly(x, up=1, down=fs_in // FS_OUT, axis=0)
    return y.astype('float32')                  #-- 形状 (1000, 12)

两处细节值得单独记:一是裁剪要在插值之后做,顺序反了会把插值出来的尖峰留下;二是 fs_in 不要硬编码,MIMIC-IV-ECG 的记录自带采样率字段,跨厂商设备未必都是 500 Hz,读 rec.fs 更稳。

5.5 -999 与官方没给的掩码

官方在恶化标签里放了一个特殊值 -999,用来标记「这次就诊整项标签不适用」。同时在 Usage Notes 里明确写了一句很容易被跳过的话:本发布物不包含论文里用的掩码策略,那套策略是对缺失值填中位数并额外加一列二元指示变量。

处理方式 做法 风险
当普通缺失丢掉 直接删含 -999 的行 样本量与人群结构都会被改变,且删掉的往往是有临床特征的就诊
当中性值 把 -999 当 0 或 0.5 把「不适用」误读成「未发生」,标签语义被污染
自建掩码 保留 -999 行,另建指示列 与论文口径不同,结果不可直接比
严格复现 只保留十五项全部有效的行 可复现性最好,但会偏离官方基线

有一件事必须说清:不管你选哪种,都要在方法节里写出来。这张表的标签值域不是干净的 0/1,-999 是设计的一部分,不是脏数据。

5.6 五个最容易出错的地方

位置 错误写法 后果 正确做法
划分 按行随机切分 同一患者、同一就诊的多份心电泄漏到两侧 按 general_strat_fold 或按 general_subject_id 分组
输入列 把 general_ 组当特征 结局小时数直接进模型,指标虚高 只用 B 至 E 组,A 组仅作索引
波形对齐 拿 general_data 当文件序号直接用 索引口径与上游不一致,取错信号 优先用 general_file_name,索引只作校验
标签 把 -999 当 0 标签语义被改写 显式掩掉或单独建指示列
可比性 自建划分后与论文数字对比 两个数字不可比 同一折、同一种子、同一预处理

第一行与最后一行其实是同一个问题的两面:这张表价值的一半在「大家用同一把尺」,一旦你换尺子,就只剩下另一半。

§6 与库内条目的关系

6.1 关系图谱

站内已有的 MIMIC 系词条大多是从某一个模块切出来的单一视角,这一篇则是跨模块缝合的成果。

站内词条 它是什么 与本文数据集的关系
MIMIC-IV on FHIR 把 MIMIC-IV 急诊与 ICU 十年重写成 FHIR 资源 上游同源;它是「接口形态」,本文是「建模形态」
MIMIC-III 序列样本库 把重症病历压成事件序列 同为派生集;它面向序列建模,本文面向多模态对齐
MIMIC-II 导管临床表 早期 MIMIC 的导管相关表 同族但代际不同,人群与年代不可混用
MIMIC-III CareVue 早期 CareVue 系统的子集 同族,ICU 视角,无波形
MIMIC 初代多参数库 九十人近两百病人日的波形与临床 同族,波形与临床同库;本文则是波形与临床分库再对齐
CONCERN 早期预警 护理文档里的恶化预警试验数据 任务相邻:都在做恶化预测,但它的输入是护理记录文本
ALOTT 遥测病历库 把监护仪与病历对上时间 方法相邻:都在解决「信号与病历对齐」这件事
MIMIC-III SDoH 标注集 从病历句子里抽社会决定因素 可作本文的补充变量来源,但需另行对齐
CinC 2021 挑战赛 多导联心电的多标签分类基准 任务相邻:都有大标签空间,但它只有波形没有临床表
Georgia 十二导联挑战库 十二导联心电与诊断标签 任务相邻:单模态、标签空间小得多
心电图像数据库 以图像形式保存的心电 输入形态不同,可作跨表征对照
多模态牙科数据集 三模态对齐的小样本集 方法论相邻:都在做「多模态对齐」这件事,领域不同

这张表里最值得并排看的是第一行与第五行。前者说明同一个上游可以有不同的交付形态:FHIR 版给的是互操作能力,本文给的是建模就绪度;后者说明「波形与临床在同一库」并不等于「可以直接建模」——初代库的规模只有九十人,而本文的十二万行是另一种量级的对齐工作。

6.2 检索路径

你要找的东西 检索词 会落到哪里
同一上游的其它派生集 MIMIC-IV derived、MIMIC-IV-ECG §6.1 表前五行
恶化预测的其它标签体系 deterioration、early warning、CONCERN §6.1 第六行与其上游论文
大标签空间心电分类 multi-label ECG、CinC 2021 §6.1 第九行
波形与病历对齐方法 waveform EHR linkage、ALOTT §6.1 第七行
急诊分诊与主诉 triage、chief complaint 本文不含,需回 MIMIC-IV-ED
多模态对齐的通用做法 multimodal alignment §6.1 最后一行

6.3 分工判据

任务 主力该用什么 本文数据集的位置 原因
急诊多模态诊断与恶化 本文数据集 主力 五类输入同一行、标签同一口径
波形表征的预训练 大规模波形库 只作下游评测 十二万份 10 秒片段,预训练体量偏小
长时程节律分析 长时程心电库 不适用 每份只有 10 秒
文本与影像的多模态 各自的专库 不适用 无文本、无影像
多中心泛化 跨机构数据集 只能作单中心基线 全部来自一家医院
干预与因果 试验或带干预变量的库 不适用 横断面预测表

第三行值得强调。很多人看到「ECG waveforms」就以为能做节律分析,实际上这里的波形是诊断级 10 秒静息心电,不是 Holter。拿它做房颤负荷、心率变异性或长时程事件检测,方向从一开始就错了。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

先纠正一个很常见的误判:把「只有一个 CSV」当成「数据量很小」。这张表的 129095 行背后是十二万份十二导联心电与十二万次急诊就诊的检验、体征流水,加工成本远高于行数给人的印象。评价它的时候不该问「文件多不多」,而该问:这份对齐工作如果我重做一遍,需要多少人力?

换一个角度看同一件事会更清楚:它的规模在「行」上不小,在「人」上未知,在「中心」上只有一个。这三件事必须分开评,混在一起打分只会得出「既不大也不小」的无效结论。

7.1 五维评分

按常用的数据集评价维度打分,每项 1–5 分,分数针对「作为急诊多模态预测的基准」这一用途。

维度 分数 理由
数据规模 4 十二万行、1443 个目标;扣分因为官方未公布去重患者数
标注质量 3 恶化标签有共识定义,诊断沿用既有编码流程;扣分因为 -999 语义与掩码策略的说明不够
任务适配 5 多模态对齐、大标签空间、固定窗口、现成划分,四件事都在
文档完整 3 摘要与字段字典写得细;扣分因为 2408 与 1935 两套列数未解释、体征组前缀写错
可获取性 2 四份凭证加平台审批,门槛在同类里偏高

合计 17 分(满分 25)。这个分数结构说明它是一件「用途很尖、门槛很高」的工具:适配性拉满,可获取性拖后腿,文档的瑕疵恰好落在使用者最需要确认的地方——列数与前缀。

7.2 标注质量的两层

第一层是定义层。恶化标签沿用一套已发表的专家共识定义(参考文献 [8]),这意味着标签不是作者拍脑袋定的,而是能与文献对话的。定义层扎实,是它敢叫「benchmark」的底气。

第二层是执行层。执行层有三个已知的粗糙处:一是 -999 的判定依赖临床流程是否发生,流程缺失本身可能与病情相关,因此不是随机缺失;二是官方明确说发布物不含论文用的掩码策略,复现时需要自己补;三是十五项标签的具体名称与时域没有在页面上逐条列出,核对只能靠读论文与列名。

层 强项 弱项
定义层 沿用共识定义,可与文献对齐 具体时域需回原文核对
执行层 有 -999 区分「不适用」与「未发生」 缺失非随机、掩码需自建

7.3 可枚举的偏差

偏差 表现 影响
入组偏倚 只纳入在急诊做了十二导联心电的人 未做心电的急诊人群不在样本内,模型不能外推到全体急诊
单中心 全部来自一家医学中心 设备、流程、编码习惯单一,泛化证据弱
年代漂移 上游覆盖 2008–2019 年 早期与晚期的检验项目、设备版本不同
标签时间错位 诊断是出院诊断 用到达后 1.5 小时的输入预测离院时的结论,目标含住院过程信息
缺失非随机 -999 由临床流程决定 直接删除会系统性地丢掉某类就诊
多次心电 同一就诊可有多份心电 训练侧重复计数,评测侧已被官方压住
掩码缺位 发布物不含论文的掩码列 复现论文数字需自行重建

第一行与第四行合起来,是这份数据最该被写进 limitation 的两条。前者决定了它的适用人群,后者决定了它的任务难度不能被简单类比为「早期诊断」。

7.4 外部验证矩阵

验证角色 做法 讲得通的地方 风险
同院时间切片验证 按年份切训练与测试 检验年代漂移 年份与设备更新混杂
跨库波形验证 在本文训练,去别的十二导联库测 检验波形表征的迁移 标签空间不同,只能比子集
单模态对照 只给波形、只给表格、都给 直接回答多模态值不值 预处理差异会污染对照
缺失鲁棒性 人为遮蔽模态 贴近真实急诊的不完整记录 与官方基线不可直接比
校准评估 看预测概率而非仅看排序 临床决策需要概率 类别极不平衡时校准难

第三行是这张表最容易做、也最容易被做坏的一类实验。做对照时唯一要守的纪律是:除了输入模态,其它一切(划分、种子、预处理、早停准则)都必须相同,否则你测到的是调参差异,不是模态差异。

7.5 它为何可能长期被引用

它只有 1.0.0 一个版本,页面也没有任何修订记录。这种「一次发布、长期不动」的形态,在基准数据集里反而是优点:划分不会变,标签不会悄悄改,三年前的论文与今天的实验能对得上。代价是错误也一起被冻住了——§2.1 的列数不一致、体征组的前缀笔误,都会长期留在官方页面上。

§8 生态位与历史

8.1 沿革:从单模态到缝合

阶段 代表形态 输入 局限
单模态基准 纯波形库、纯表格库 一种 无法回答多模态问题
同库双模态 波形与临床装在同一数据库 两种,需自行对齐 对齐成本高,口径各异
缝合型基准 本文这一类 多种,已按行对齐 依赖上游凭证,规模受上游限制

第三阶段的关键变化不是数据变多,而是对齐工作被前置到发布方。这个变化对整个领域是好事:它把「能不能复现」的问题从每个实验室各自解决,变成了一次性解决。

8.2 与挑战赛的关系

它不是一个挑战赛数据集。没有排行榜、没有官方评测服务器、没有提交格式。官方给的是「基准建议」:固定二十折、评测折只取首份心电、预处理按三步走。这种形态比挑战赛松,但也更耐用——挑战赛结束后提交入口通常会关,基准建议则可以一直照着做。

维度 挑战赛型数据集 本文这一类基准
评测组织 官方服务器统一评测 使用者本地自评
可比性来源 同一提交入口 同一划分与同一预处理
生命周期 赛后热度下降 长期低速引用
门槛 报名即可 凭证审批

8.3 生态位

角色 主力粮仓 对照与基准
典型用法 大规模预训练、表征学习 多模态对齐评测、模态消融
需要的前提 数据量大、标签多 口径统一、划分固定
代表 大体量波形库、全量 MIMIC 本文这一类缝合型基准
失败模式 过拟合、标签噪声 门槛高、上游绑定

它坐在右边。把它当粮仓用,会立刻撞上「十二万份 10 秒片段不够预训练」的天花板;把它当基准用,才用得其所。

8.4 谁在用它,用来做什么

从论文与代码仓库的公开信息看,使用者集中在三类:做多模态融合的研究组(用它证明波形带来的增量)、做急诊预警的临床信息学团队(用它验证恶化定义的可行性)、做基准复现的工程组(用它作为流水线的回归测试)。第三类最少被提及,但恰恰是这类数据集最稳定的用户群——他们不追求新结果,只追求「换一台机器跑出来还是同一个数」。

§9 使用指引

9.1 三种角色的路径

角色 第一天 第一周 注意事项
算法研究者 跑通列组分块读取,确认七组列数 复现单模态基线,再做多模态消融 别碰 general_ 组当特征
临床信息学团队 核对 -999 在自己人群里的含义 把十五项标签映射到本院可得的变量 标签定义以原文为准,不以列名为准
教学与评审 用 §2.7 的七步读一行 用 §4.3 的链路讲清「对齐」值多少钱 明确说清它不含波形本体

9.2 一条最短的可用流程

#-- 1. 先用匿名会话探一次,确认当前会话有没有下载权限
curl -s -o /dev/null -w '%{http_code}\n' \
  https://physionet.org/files/multimodal-emergency-benchmark/1.0.0/mds_ed.csv

#-- 2. 通过后只导 general 组,先建评测清单,别整表读
python3 - <<'PY'
import pandas as pd
g = pd.read_csv('mds_ed.csv', usecols=lambda c: c.startswith('general_'))
g.to_parquet('general.parquet', index=False)
print(g.shape)
PY

第二段之所以只导 A 组,是因为划分、窗口、索引全在这二十二列里,先把它固化成小文件,后面反复试模型时就不用再解析那张宽表。

import pandas as pd

#-- 取官方口径下的测试集:第 19 折 + 每条就诊的首份心电
idx = pd.read_parquet('general.parquet')
test = idx[(idx['general_strat_fold'] == 19) &
           (idx['general_ecg_no_within_stay'] == 0)]
print(len(test), test['general_subject_id'].nunique())

第三行打印的两个数值得记在实验日志里:行数是评测样本量,去重人数是评测人群量。两者差得越多,说明同一批人在测试集里被重复计入得越多,解读指标时越要小心。

9.3 引用方式

引用对象 内容
数据集 Lopez Alcaraz, J. M., & Strodthoff, N. (2024). MIMIC-IV-Ext-MDS-ED (version 1.0.0). PhysioNet. https://doi.org/10.13026/p90d-vd84
论文 Lopez Alcaraz, Bouma, Strodthoff (2025). Computers in Biology and Medicine, 192(A), 110196
上游四个模块 MIMIC-IV v2.2、MIMIC-IV-ECG v1.0、MIMIC-IV-ECG-Ext-ICD v1.0.1、MIMIC-IV-ED v2.2,各自单独引用
平台 PhysioNet 平台综述(2026,Nature Health)
代码 GitHub AI4HealthUOL/MDS-ED,另有 Zenodo DOI 10.5281/zenodo.13753554

写方法节时建议额外注明三件事:用的哪个版本(只有 1.0.0)、是否按官方二十折、以及 -999 怎么处理。这三条决定了他人的结果能否与你的对上。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,编辑负责事实核对与结构
数字来源 规模、结构、边界三类数字均来自 PhysioNet 项目页与版本页的正文
文件核验 项目页与版本页直接访问确认(HTTP 200);文件目录与主表在本次网络下返回 403,未能下载核对
列数不一致 页面正文写 2408 列,分组小标题分母为 1935,两者差 473 列,页面未解释,已在 §2.1 标注
体征列数 官方给 55 列,按 6 项 × 9 聚合算得 54,差 1 列未说明,已在 §2.4 标注
前缀笔误 体征组行文写 demographics_,与组名不符,已在 §2.1 与 §5.3 标注
论文信息 仅读 arXiv 摘要与配套仓库 README,未读期刊全文
未核验内容 去重患者数、急诊就诊数、十五项恶化标签的具体名称与时域、四十五项检验之外的列、473 列差额的构成
图像 无配图;封面为生成式提示词,不含真实心电图或患者信息
免责 本文不构成临床建议;数据使用须遵守凭证化健康数据许可 1.5.0 与使用协议

常见误读(避坑清单)

说法 实际 证据
「十二万患者」 十二万是 ECG 记录数 官方写 129095 rows (ECG records);页面未给去重患者数
「一个文件下完就能跑」 波形在上游,且文件需凭证 文件目录对未认证会话返回 403
「它是波形数据集」 它是宽表;波形靠索引回上游取 general_file_name 描述为 path to the waveform
「2408 列就是全部字段」 分组小标题的分母是 1935,两套数差 473 七个分组 22+7+3+55+405+1428+15 = 1935
「体征是 54 列」 官方写 55 列,算术上 6 × 9 得 54 D 组小标题与枚举项
「-999 是缺失值」 是「本次就诊整项不适用」的特殊标记 G 组说明段
「论文的掩码已经包含在数据里」 官方明确说发布物不含掩码策略 Usage Notes 第二段
「它有二十四小时节律」 每份心电 10 秒 上游 MIMIC-IV-ECG 的波形规格
「诊断标签是到达时的诊断」 是出院诊断 F 组说明与 general_ed_diag_hosp 的语义
「这是挑战赛数据集」 没有排行榜与提交入口,只有基准建议 Usage Notes 的 Benchmarking recommendations

其中第三行与第七行合起来,是新人第一天最容易同时踩的两个坑:以为拿到了波形,又以为拿到了论文的全部处理流程。两者都不成立,而页面上两句话隔了很远,很容易只读到前一句。

FAQ

Q1:129095 是患者数还是记录数?
是记录数,单位是 ECG 记录。官方在数据描述里写得很明确,一行对应一份心电。同一个人可能有多次急诊就诊,同一次就诊也可能有多份心电,所以去重后的人数一定小于这个数,但官方页面没有公布具体值。任何论文里写「十二万患者」的地方,都是把记录数当成了患者数。

Q2:为什么我按地址下载文件,返回的是 403?
因为这是凭证制项目。未通过认证的会话看不到文件清单,也取不到主表。要拿到文件,需要完成 CITI「仅数据或标本」课程、申请凭证化访问、并签署数据使用协议 1.5.0。项目主页可以匿名阅读,但文件不行,这两件事的权限是分开的。

Q3:它里面到底有没有波形?
没有波形本体。表里只有两列与波形有关:general_file_name 给出波形文件的路径,general_data 给出波形在上游的记录索引。真正的十二导联 10 秒信号在 MIMIC-IV-ECG v1.0 里,需要另外的凭证。所以要跑多模态模型,你至少要签两份协议。

Q4:-999 应该怎么处理?
先弄清它的含义:它标记「这次就诊整项标签不适用」,原因是临床流程没走到那一步,而不是数据丢失。因此不能当 0,也不建议直接删行。稳妥做法是保留行、把 -999 掩掉、必要时另建一列指示变量,并在方法节里写清你的选择,因为不同选择会得到不同的人群结构。

Q5:能拿它做房颤或节律分析吗?
不能,方向不对。这里的波形是诊断级静息十二导联,每份 10 秒,不是 Holter。房颤负荷、心率变异性、长时程事件检测都需要连续记录。它擅长的是「用一次心电加一批临床变量预测这次就诊的结局」,不是节律监测。

Q6:二十折划分该怎么用?
照官方建议用:0 到 17 折训练,18 折做验证与模型选择,19 折做测试;验证与测试折只保留每条就诊的第一份心电,即 general_ecg_no_within_stay 等于 0 的行。训练折保留全部心电。想与论文数字对比,就必须严格照这个口径;想自建划分,就别拿结果与论文比。

Q7:许可允许商用吗?
许可为 PhysioNet 凭证化健康数据许可 1.5.0,附数据使用协议 1.5.0。它不是开放许可,使用范围、二次分发与衍生作品都受协议约束。涉及商业用途时,应先读协议原文再决定,不能按「PhysioNet 上的东西都能随便用」的惯性理解。

Q8:为什么列数一会儿 2408 一会儿 1935?
页面正文说这张表有 2408 列,而七个分组的小标题写成「X/1935」。把七个分子相加恰好是 1935(输入 492、目标 1443),所以 1935 是分组口径的合计,2408 是实际列数,两者相差 473 列。官方没有解释差额,引用时应当两个数字都写出来,别只挑一个。

Q9:十二万行够训练大模型吗?
看你怎么定义大。对表格模型与中等规模的多模态融合网络,十二万行是够的;对从零预训练的波形基础模型,不够——上游有约八十万份心电,本文只取了与急诊就诊对得上的那部分。合理定位是「下游评测与融合研究」,不是「预训练语料」。

Q10:它和直接用 MIMIC-IV-ED 有什么区别?
MIMIC-IV-ED 给你的是急诊原始表:停留、分诊、体征、发药、诊断。要用它做预测,你得自己切窗口、自己聚合趋势、自己对齐波形、自己定标签。本文把这些做完了,代价是固定的窗口与固定的标签口径。想要灵活,用原始表;想要可比,用这张表。

术语表

术语 解释
MDS-ED 本文数据集的常用简称,出自配套论文题名
多模态 同一批样本上同时具备多种类型输入,如表格与波形
宽表 一行一个样本、列数极多的表格结构
趋势聚合 把一段窗口内的多次测量压成均值、斜率等少数统计量
恶化(deterioration) 住院期间出现的危重事件,如心脏骤停、机械通气、ICU 收住、死亡
时域(horizon) 预测目标对应的时间跨度,如 24 小时、住院期间
分层折 按标签分布分层后切出的交叉验证折
泄漏 训练信息以不该有的方式进入测试侧,导致指标虚高
掩码策略 对缺失值填中位数并另加一列标记是否缺失的处理
ICD-10-CM 美国临床修改版 ICD-10 编码体系
分诊 急诊入口处按病情轻重分级的过程
十二导联 I、II、III、aVR、aVL、aVF 与 V1–V6 的标准配置
诊断级心电 静息状态下采集的 10 秒标准心电,区别于监护导联
凭证化访问 需身份认证与协议签署才能取数的一种数据开放方式
数据使用协议 规定数据用途、保密与二次分发限制的法律文本
基准(benchmark) 固定数据、固定划分、固定指标的评测标准
消融 逐个移除输入或模块,观察性能变化的实验
AUROC 受试者工作特征曲线下面积,衡量排序能力

附录 A:核心数字核对表

项 值 来源 来源层级
数据集全名 MIMIC-IV-Ext-MDS-ED: Multimodal Decision Support in the Emergency Department - a Benchmark Dataset for Diagnoses and Deterioration Prediction in Emergency Medicine 项目页标题 官方页面
版本与日期 1.0.0,2024-09-12 项目页与版本页 官方页面
版本 DOI 10.13026/p90d-vd84 项目页 Discovery 栏 官方页面
最新版本 DOI 10.13026/fm1f-2558 项目页 Discovery 栏 官方页面
行数(ECG 记录) 129095 数据描述段 官方页面
列数 2408 数据描述段 官方页面
分组小标题分母 1935 A 至 G 组小标题 官方页面
诊断标签数 1428 摘要与 F 组 官方页面
恶化标签数 15(6 + 2 + 7) 摘要与 G 组 官方页面
特征窗口 到达后 1.5 小时(90 分钟) 摘要与 general_90min 官方页面
生命体征项数 6 D 组枚举 官方页面
检验项数 45 E 组枚举 官方页面
聚合后缀数 9 D 组与 E 组说明 官方页面
折数 20(0–17 训练、18 验证、19 测试) Usage Notes 官方页面
评测折取样规则 仅取 general_ecg_no_within_stay 等于 0 Usage Notes 官方页面
波形重采样目标 100 Hz Usage Notes 官方页面
幅度裁剪上限 3 mV Usage Notes 官方页面
上游模块 MIMIC-IV v2.2、MIMIC-IV-ECG v1.0、MIMIC-IV-ECG-Ext-ICD v1.0.1、MIMIC-IV-ED v2.2 Parent Projects 官方页面
许可 PhysioNet Credentialed Health Data License 1.5.0 项目页 License 栏 官方页面
训练要求 CITI Data or Specimens Only Research 项目页 Access 栏 官方页面
上游波形规模 约 80 万份、近 16 万名患者 MIMIC-IV-ECG 项目页 关联官方页面
配套代码 GitHub AI4HealthUOL/MDS-ED;Zenodo 10.5281/zenodo.13753554 项目页 Website 栏与参考文献 [7] 官方页面
论文期刊信息 Computers in Biology and Medicine, 192(A), 110196 arXiv 页面期刊参考 第三方索引

附录 B:数字的来源分层

第一层是官方项目页。 行数、列数、分组列数、目标数、时间窗、折数、预处理三步、许可与访问要求,全部来自项目页正文与版本页的 Discovery 与 Access 栏。这一层是本文所有规模数字的底座。

第二层是上游模块页。 波形的十二导联、10 秒、500 Hz 与约八十万份的规模,来自 MIMIC-IV-ECG 项目页;它们不在本文数据集的页面上,但解释「为什么每行是 10 秒」时必须引用。

第三层是论文与配套仓库。 609/1428 与 14/15 两个性能数字、原始波形相对聚合特征有统计显著提升的结论、以及「主诉与既往用药被排除」的设计说明,都来自 arXiv 摘要与仓库 README。这一层只能支撑「作者这样报告」,不能支撑「数据本身如此」。

第四层是未核验。 去重患者数、急诊就诊数、十五项恶化标签的具体名称与时域、473 列差额的构成、体征组多出的那一列——这些都超出可访问材料的范围,正文遇到时一律只作定性表述或直接标注未核验。

附录 C:完整参考文献

编号 文献 链接 用途
1 MIMIC-IV-Ext-MDS-ED v1.0.0 项目页 https://physionet.org/content/multimodal-emergency-benchmark/1.0.0/ 全部规模、结构、边界数据
2 配套论文(arXiv 2407.17856) https://arxiv.org/abs/2407.17856 摘要、期刊信息、性能数字
3 配套代码仓库 https://github.com/AI4HealthUOL/MDS-ED 设计说明与目标标签合计
4 MIMIC-IV-ECG v1.0 https://physionet.org/content/mimic-iv-ecg/1.0/ 波形规格与上游规模
5 MIT 计算生理实验室(PhysioNet 维护方) https://physionet.org/ 托管与凭证体系
6 PhysioNet 平台综述(2026,Nature Health) https://doi.org/10.1038/s44360-026-00096-z 引用规范

附录 D:任务代码

任务一:按列组切分并建立评测清单

import pandas as pd

#-- 只读需要的列,别让两千多列一起进内存
use = ['general_subject_id', 'general_ed_stay_id', 'general_strat_fold',
       'general_ecg_no_within_stay', 'general_file_name', 'general_intime',
       'general_90min', 'general_outtime']
idx = pd.read_csv('mds_ed.csv', usecols=use)

#-- 训练 / 验证 / 测试三分,验证与测试只要首份心电
def split(df, fold, first_only=False):
    d = df[df['general_strat_fold'].between(fold[0], fold[1])]
    if first_only:
        d = d[d['general_ecg_no_within_stay'] == 0]
    return d

train = split(idx, (0, 17))
val   = split(idx, (18, 18), first_only=True)
test  = split(idx, (19, 19), first_only=True)

for name, d in [('train', train), ('val', val), ('test', test)]:
    print(name, len(d), d['general_subject_id'].nunique())

任务二:检查窗口是否被提前离科截断

import pandas as pd

idx = pd.read_csv('mds_ed.csv',
                  usecols=['general_intime', 'general_outtime', 'general_90min'])
for c in idx.columns:
    idx[c] = pd.to_datetime(idx[c], errors='coerce')

#-- 计划窗口终点与真实离科的先后关系
idx['cut'] = (idx['general_outtime'] < idx['general_90min'])
print('离科早于窗口终点的行数', int(idx['cut'].sum()), '总行数', len(idx))

第二段代码只回答一个是非题:这条就诊有没有撑满九十分钟。撑满的行,窗口内的测量机会是完整的;没撑满的行,末尾的测量次数天然更少。把这个标记当成协变量带进模型,比事后解释性能差异要诚实。

附录 E:如果只记五件事

序号 记住什么 为什么
1 129095 行、2408 列、七个列组、1443 个目标 这四个数决定了它的一切用法与限制
2 波形不在包里,要靠索引回 MIMIC-IV-ECG 取 决定你需要几份凭证
3 general_ 组不可作输入 它装着结局与时间,喂进去就是作弊
4 -999 是「不适用」不是「缺失」 处理错会改写标签语义
5 用官方二十折,别自建 这张表一半的价值在「大家用同一把尺」

编辑说明

核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页与 1.0.0 版本页(均返回 200),读取摘要、背景、方法、数据描述、使用说明、发布说明、伦理、利益冲突与参考文献全部段落;同时访问 MIMIC-IV-ECG v1.0 项目页确认上游波形规格。文件目录与主表在本次网络环境下返回 403,因此列的具体取值、去重患者数、恶化标签的十五个列名均未能逐一核对,凡涉及处已标注未核验。MIMIC-IV-ECG-Ext-ICD 的项目页在本次网络下返回 404,其内容仅通过本文数据集的 Parent Projects 与参考文献 [9] 间接确认。页面自身存在的两处不一致(2408 与 1935 两套列数、体征组前缀写成 demographics_)在 §2.1、§2.4、§5.3、§10 与附录 A 各说明一次,不做猜测性修补。论文侧只读 arXiv 摘要与仓库 README,未读期刊全文。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集