【论文阅读】Sepsis World Model A MIMIC-based OpenAI Gym World Model Simulator for Sepsis Treatment

本文介绍了一个基于深度强化学习的脓毒症治疗模拟器。该模拟器利用MIMIC数据集,通过VAE和MDN-RNN模型预测病人状态,并采用DQN算法学习治疗策略。

Sepsis World Model: A MIMIC-based OpenAI Gym “World Model” Simulator for Sepsis Treatment

AuthorKiani et al.
CommentsThis project was done as a class project for CS221 at Stanford University(Not so good)
Year2019
Tagsdeep reinforcement learning, sepsis treatment, predict next state, DQN

1 Introduction and Motivation / Abstract

有了如MIMICⅢ的医学数据集之后,使用deep reinforcement learning为sepsis治疗寻找最优策略变得普遍。

然而,面临的一种挑战:我们所知道的states只是整个状态空间中的一小部分(其实也就是limited data的问题),而且这些数据也会包含噪声。

现有工作的解决方法是:使用带有重要性采样的off-policy评估策略;训练随机策略和其他评估技术等。

我们的方案:使用”world model"(这个概念最早是Ha and Schmidhuber在2018年提出的)方法创建一个模拟器,目标是用于在给定病人的当前state和treatment action的情况下预测下一个state。在这个方案中,需要让模拟器从EHR data中学习到潜在的、含有更少噪声的表征特征。

使用的数据:MIMIC

模型的结构VAE(Variational Auto-Encoder)+MDN-RNN(Mixture Density Network combined with a RNN)。为了减少噪声的影响,在模拟过程中从下一步生成的分布中采样,并通过控制类似于Ha等人提出的”温度“变量将不确定性引入模拟器。

最终通过比较测试环境输出和真实EHR数据的相似性,评估模型的表现;通过使用deep Q-Learning学习脓毒症的治疗的现实政策,评估其可行性。

2 Approach

2.1 Dataset Overview and Preprocessing

每个状态有46个经过标准化的features。

action用0-24之间的离散数值表示。

最终的目标是在基于关于患者在某个特定时间步的信息给出一个treatment action建议,确保患者存活。因此,构建”State Model“,在给定当前state和采取的action的情况下预测下一个state。

2.2 Simulator Models

baseline:(baseline没有使用VAE,没有使用MDN-RNN来模拟state的不确定性,因此会对噪声数据点过拟合)

①模拟next state的state model(用RNN);

②模拟end of state的termination model(用RNN);

③模拟outcome prediction的outcome model(用RNN)。

本文的model:VAE + MDN-RNN。

VAE把输入的特征从46维降至30维。训练VAE的过程中将原始输入和降维后的输出的MSE控制到最小。

在这里插入图片描述

VAE输出的数据作为MDN-RNN的输入。MDN-RNN预测下一个state的概率分布。

在这里插入图片描述

对于本文,World Model的整体结构如下:

在这里插入图片描述

除了本文用于预测next state的模型,World Model中还有一个使用DQN算法训练学习的最优策略、一个由专家提出的策略。

VAE对数据进行处理后,将特征输出到前面提到的三个RNN,然后又对VAE+RNN、MDN+RNN、VAE+MDN+RNN的表现进行比较,分析能否对baseline做提升,如果可以,又是哪些提升是有效的。

2.3 State Model

state model是一个RNN。输入:VAE处理后的features(30×10)、当前时间步的action value。输出:表示下一个state的feature。

在这里插入图片描述

2.4 Episode Termination Model

此模型用于检测episode transitions(情节转换)。

两种互斥的转换:①终止episode;②继续episode。

输入:VAE处理后的features(30×10)、当前时间步的action value(1)、step number feature(1)(添加step number是为了计算episode的长度)

输出:布尔值,表示终止还是继续。

在这里插入图片描述

2.5 Episode Outcome Model

此模型用于预测两种互斥的结果:①death;②出院(release from hospital)。预测出每个episode的结果之后用于在环境中决定奖励值。

输入:与 Episode Termination Model一样。

输出:布尔值,表示死亡还是出院。

在这里插入图片描述

2.6 DQN Agents Model

为了评估本文提出的这些模拟器,利用openAI中的baseline离线算法(基于不同的架构,如:baseline、VAE、MDN、VAE+MDN)训练三个agent,并进行封装,使得提供一个state和采取的action就可以产生state和reward。

DQN算法用于在模拟环境中学习最优策略。

奖励函数的定义:(提出了三个,后面会分别与专家的policy对比测试)

在这里插入图片描述

第三个策略是为了同时确保中间奖励不会掩盖最终奖励,并提供一些指导性反馈,以在每个单独的时间步向正确的方向修正策略。

3 Results and Analysis

3.1 Autoencoder and VAE

利用训练好的VAE得到降维后的特征,用这些降维后的特征与原来的state特征进行比较,发现预测效果不错。

怎么比较的呢?是用这些特征都去预测?

在这里插入图片描述

在本文中使用VAE不是为了很好地匹配所有state特征,而是主要为了降噪、在原始数据中挖掘隐藏特征。

3.2 Simulator: State, Termination, and Outcome

对三个model的训练结果进行分析,发现RNN和RNN+VAE的表现很接近,似乎有无VAE表现都没有明显区别。不过作者给出的解释是:尽管VAE可能会丢失一些原始信息,但仍能捕捉到重要信息(以完成预测),至少能取得与没有用VAE处理过的原始数据所做的预测相近的表现,那也是可以认可的。

但是其实有一个问题,文章声称使用VAE能减少数据中的噪声,但是噪声从何而来、又如何得知噪声已经减小了呢?

在这里插入图片描述

图7绘制AE、VAE、VAE+MDN、MDN的SOFA和SpO2状态特征的模拟投影。在这些图中,即使模型错误地预测了某个状态,它也会收到该状态的正确版本作为预测下一步的输入。

结果表明,MDN对预测状态赋予了更大的方差,与预期一致。似乎比AE和VAE学习得更多,而不是简单地保持预测不变,直到一个旧的状态被添加回来作为输入(从左边两幅图中蓝色之后的黄色运动中看出这种趋势)。

MDN+VAE比MDN本身的方差更大,与预期一致。

可是方差大能代表什么?

在这里插入图片描述

3.3 Analysis of Rollout on Physician’s policy

尝试对模拟器进行关于医生提出的策略的可视化检查。

具体来说,以患者的起始状态初始化模型,然后执行医生在每个患者身上执行的实际系列动作,并在发作的长度上可视化状态特征。这里只访问模型作生成的状态作为历史,这代表了试图训练一个agent通过探索来学习政策时可能获得的东西,因为我们不一定能访问数据集中无限大小和连续的状态-动作空间。

结果表明,RNN本身产生平滑的曲线,而基于MDN的模型中则有不断变化的趋势。我们认为这可能是由于RNN本身无法完全捕捉输出的动态方差,从而收敛于寻找潜在下一状态的"均值"。这就是我们首先引入MDN-RNN的原因,这样模型可以预测下一个状态来自的一组分布,并捕获状态必须来自其中一个分布的想法。

的确,MDN+RNN似乎能更好地捕捉整个事件的方差,并遵循一般趋势,尽管这带来了有时错误分布的风险。

在MDN中,虽然个别步骤可能与上一步有较大的方差,但分布通常会在下一次预测中修正自己回到一个更稳定的值。

总体而言,MDN和VAE似乎成功地建模了下一个状态的方差和分布。

在这里插入图片描述

3.4 Normalized Trajectory Means

计算一个定量的度量,以便测量模拟器结果的误差。

文章提出了归一化轨迹均值度量(Normalized Trajectory Mean metric),它根据特定的state model计算每个特征在所有rollout中的均值。对不同的特征测量了这个值,如图9所示。

在这里插入图片描述

这一指标说明了模型对每个指标的校准程度。它可以作为模型性能的检查,并为未来改进的优先顺序提供方向。

可以看到真值均值(右)比简单的RNN均值(左)更类似于MDN均值(中)。这证实了前文的猜想,尽管MDN模型在每一步都有更多的方差,但通常被调节为稳定的整体和正确的主要变化,防止发散,而光滑的RNN模型可能会发散。

3.5 Evaluation on OpenAI Baseline Learned Policies

最终的目标是学习一个策略来改善患者的结果,因此使用DQN算法来评估环境。虽然没有确切的"标签"或数量来衡量我们学习的策略(除了临床验证)的临床效果,但与真实数据集中的长度、奖励和动作的定性比较可以评估模拟器如何模拟治疗过程。图10显示了专家在action、reward和时间长度上的策略分布,我们将其与我们的政策进行比较。

在这里插入图片描述

在我们的模拟环境上回放专家的动作后,我们比较了真实世界和模拟世界之间的episode长度、奖励和动作的分布。

对于使用奖励公式(1)的情况,模拟结果过于极端,策略围绕一个行动和一个非常短的episode长度。使用基于MDN的模拟器实现了稍微更真实的状态轨迹。MDN模型学习每个特征的分布,在采样时提供更具代表性的状态特征集合。然而,与专家的策略相比,这一学习的策略是不现实的,环境过度拟合了一组小的干预措施及其积极的结果。

在这里插入图片描述

使用奖励公式(2)的情况:episode的长度仍然不切实际。同时这种奖励的制定似乎也没有给出更加多元的政策。

在这里插入图片描述

使用奖励公式(3)的情况:策略分布更贴近实际。这可能是由于模型必须在每个时间步选择一个动作来优化一个对当下重要的特定值,因此有激励选择一个对该状态最有效的最优特定action。在另外两种reward方案中,需要的动作是在情节结束时对某事进行优化,不具有时间依赖性,这导致agent每次都会预测相同的动作。

然而,episode的长度仍然偏短,这可能表明termination模型是过拟合的。

在这里插入图片描述

4 Conclusion

本文的工作:

①使用VAE和MDN两种方法,比一个简单的RNN更能建模出脓毒症患者状态分布。

②在这些模拟器(也就是VAE和MDN)的基础上建立一个模型,并且可以迭代各种奖励函数来建模患者的治疗轨迹。

未来的工作:

①优化状态/终止/结果模型的结构。

②细化reward和uncertainty函数。

<think> 我们正在寻找关于MIMIC-IV数据库中脓毒症(sepsis)数据提取的现成代码资源。用户之前遇到了一个关于年龄过滤的SQL错误,并已解决。现在用户希望直接找到MIMIC-code中关于脓毒症数据提取的现成代码。 MIMIC-code是一个公开的代码库,包含了对MIMIC数据库进行各种分析的SQL和Python脚本。其中确实有针对脓毒症的数据提取和分析的代码。 参考资源: 1. MIMIC-code官方GitHub仓库中的脓毒症相关项目:https://github.com/MIT-LCP/mimic-code/tree/main/mimic-iv/sepsis 2. 具体脚本:包括脓毒症定义(如Sepsis-3)、患者筛选、特征提取等。 以下步骤帮助用户获取所需资源: ### 步骤1:访问MIMIC-code的GitHub仓库 - 主仓库地址:https://github.com/MIT-LCP/mimic-code - 脓毒症相关代码位于子目录:`mimic-iv/sepsis` ### 步骤2:查看脓毒症数据提取脚本 在`mimic-iv/sepsis`目录中,主要包含以下文件: 1. `angus.sql`:使用Angus标准定义脓毒症(ICD-9编码) 2. `martin.sql`:使用Martin标准定义脓毒症(ICD-9编码) 3. `explicit_sepsis.sql`:直接使用“sepsis”作为诊断的提取方法(ICD-9编码) 4. `suspicion_of_infection.sql`:基于抗生素和血培养记录的感染疑似患者提取 5. `sepsis3.sql`:根据Sepsis-3定义(基于SOFA评分变化和感染疑似)提取脓毒症患者 ### 步骤3:使用Sepsis-3标准(推荐) 目前医学界推荐使用Sepsis-3标准。在MIMIC-code中,`sepsis3.sql`脚本实现了该标准,具体步骤: 1. 识别疑似感染(suspected infection): - 使用抗生素且同时进行微生物培养 2. 计算SOFA评分变化: - 疑似感染发生前48小时至后24小时内,SOFA评分增加≥2分 脚本`sepsis3.sql`会创建一个视图`sepsis3`,包含满足Sepsis-3标准的患者列表。 ### 步骤4:提取脓毒症患者数据的示例SQL 以下是从`sepsis3`视图中提取患者基本信息和脓毒症发生时间的示例: ```sql SELECT si.subject_id, si.hadm_id, si.stay_id, si.suspected_infection_time, si.sofa_time as sepsis_time FROM mimic_derived.sepsis3 si; ``` ### 步骤5:结合患者基本信息(如年龄) 结合之前解决年龄过滤的方法,可以进一步筛选成年脓毒症患者: ```sql WITH adult_sepsis AS ( SELECT si.subject_id, si.hadm_id, si.stay_id, si.suspected_infection_time, si.sofa_time as sepsis_time, pat.anchor_age::INTEGER AS age FROM mimic_derived.sepsis3 si INNER JOIN mimic_core.patients pat ON si.subject_id = pat.subject_id WHERE pat.anchor_age::INTEGER >= 18 ) SELECT * FROM adult_sepsis; ``` ### 步骤6:运行脚本前的准备 1. 确保已安装MIMIC-IV数据库(最新版本) 2. 克隆MIMIC-code仓库到本地: ```bash git clone https://github.com/MIT-LCP/mimic-code.git ``` 3. 运行所需脚本: - 先运行`mimic-iv/sepsis/suspicion_of_infection.sql`(依赖) - 再运行`mimic-iv/sepsis/sepsis3.sql` ### 注意事项 - 脚本依赖MIMIC-IV衍生表(如`mimic_derived.sofa`),需先运行衍生表生成脚本(位于`mimic-iv/concepts`目录) - 脓毒症定义可能因研究需求而异,建议仔细阅读代码中的注释和参考文献 ### 扩展资源 - 脓毒症相关研究论文(使用MIMIC数据库): 1. [MIMIC-III, a freely accessible critical care database](https://www.nature.com/articles/sdata201635) 2. [Sepsis-3定义原文](https://jamanetwork.com/journals/jama/fullarticle/2492881)[^1] §§相关问题§§ 1. 如何安装和配置MIMIC-IV数据库? 2. 如何运行MIMIC-code中的衍生表脚本? 3. 脓毒症的其他定义标准(如Sepsis-1, Sepsis-2)在MIMIC中如何实现? 4. 如何从脓毒症患者中提取生命体征和实验室指标? </think> 以下是关于 MIMIC-IV 中脓毒症(sepsis)数据提取的现成资源汇总,均来自官方 MIMIC-Code 仓库: ### 一、核心脓毒症提取脚本 1. **Sepsis-3 定义实现**(当前临床金标准): - 文件路径:`mimic-iv/sepsis/sepsis3.sql` - 功能:基于《JAMA 2016》标准[^1] ```sql /* 实现逻辑 */ WITH infection AS ( -- 识别疑似感染时间 ), sofa AS ( -- 计算SOFA评分 ) SELECT patient_id, suspected_infection_time, sofa_time AS sepsis_onset FROM ( -- 满足:疑似感染 + SOFA评分Δ≥2 ) ``` 2. **Angus 标准实现**(ICD编码定义): - 文件路径:`mimic-iv/sepsis/angus.sql` - 基于 ICD-9/10 的脓毒症识别 ```sql SELECT subject_id, hadm_id FROM diagnoses_icd WHERE -- 感染相关编码 icd_code LIKE 'A%' OR icd_code IN ('038%', '020%') AND -- 器官功能障碍编码 icd_code IN ('785.52', 'R65.20', ...) ``` ### 二、完整工作流资源 在 `mimic-iv/sepsis` 目录中包含: 1. `suspicion_of_infection.sql` - 感染疑似患者识别 2. `organ_dysfunction.sql` - 器官功能障碍标记 3. `qsofa.sql` - qSOFA 快速评分工具 4. `sofa.sql` - SOFA 评分计算器 5. `cohort.sql` - 生成最终脓毒症队列 ### 三、使用示例 ```sql -- 生成脓毒症3.0患者队列 SELECT pat.subject_id, sep.sepsis_onset_time, DATE_PART('year', sep.sepsis_onset_time) - pat.anchor_age::INT AS sepsis_age FROM mimic_derived.sepsis3 sep -- 使用预构建视图 JOIN mimic_core.patients pat USING (subject_id) WHERE sepsis_onset_time IS NOT NULL ``` ### 四、关键衍生表 运行时将自动生成: 1. `mimic_derived.suspicion_of_infection` - 疑似感染事件 2. `mimic_derived.sepsis3` - 符合Sepsis-3的患者 3. `mimic_derived.sofa` - 每日SOFA评分 ### 五、操作步骤 1. 克隆仓库: ```bash git clone https://github.com/MIT-LCP/mimic-code.git ``` 2. 按顺序运行SQL: ```bash psql -d mimiciv -f suspicion_of_infection.sql psql -d mimiciv -f sofa.sql psql -d mimiciv -f sepsis3.sql ``` ### 六、验证工具 仓库包含数据验证脚本: ```sql -- 验证发病率符合文献预期 SELECT COUNT(DISTINCT subject_id)::FLOAT / (SELECT COUNT(*) FROM patients) AS sepsis_incidence FROM mimic_derived.sepsis3 ``` 预期值:约 6-10% [^1] > **重要提示**:所有脚本依赖 `mimic_derived` 架构中的基础概念表,需先运行 `mimic-iv/concepts` 下的基础脚本[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值