信息速览
急诊室里有两个在同时走的时钟。一个是「已经出了什么事」的时钟:诊断是什么、属于心脏还是非心脏、要不要收进监护病房。另一个是「还要出什么事」的时钟:接下来几小时会不会恶化、要不要现在就把床位和呼吸机准备好。临床上的难点在于,这两个时钟共用同一批信息却没人把它们排在同一张表里——波形在一个系统,检验在另一个系统,收费编码在第三个系统;做公开数据集的人通常也只解决其中一半:给波形的库缺临床上下文,给电子病历的库缺原始波形。急诊多模态决策支持想要往前走,卡住的从来不是模型,是那张把两者按同一条急诊就诊对齐好的表。
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 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- mimic-iv-fhir — 共享标签:电子病历 / 急诊 / 数据派生
- mimic-seqex — 共享标签:电子病历 / 序列建模 / 数据派生
- mimic3-carevue — 共享标签:电子病历 / 重症 / 数据派生
- mimic2-iaccd — 共享标签:电子病历 / 重症 / 导管
- mimicdb — 共享标签:电子病历 / 多参数 / 波形
- concern-early-warning — 共享标签:临床恶化 / 早期预警
- alott — 共享标签:波形与病历对齐 / 遥测
- annotation-dataset-sdoh — 共享标签:电子病历 / 标注集
- cinc-2021 — 共享标签:心电信号 / 多标签
- georgia-12-lead-ecg-challenge — 共享标签:心电信号 / 十二导联
- ecg-image-database — 共享标签:心电信号 / 图像表征
- multimodal-dental-dataset — 共享标签:多模态 / 对齐
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

