PyHealth 是一个面向医疗健康 AI 的综合 Python 库,为临床机器学习提供专用工具、模型和数据集。当开发医疗预测模型、处理临床数据、使用医学编码系统或在医疗场景中部署 AI 解决方案时,可使用该技能。
用途
PyHealth 用于医疗健康领域的机器学习开发,覆盖从数据加载到模型部署的完整流程。适用场景包括:处理医疗数据集(MIMIC-III、MIMIC-IV、eICU、OMOP、睡眠 EEG 数据、医学影像);临床预测任务(死亡率预测、再入院、住院时长、药物推荐);医学编码(ICD-9/10、NDC、RxNorm、ATC 编码系统之间的转换);处理临床数据(序列事件、生理信号、临床文本、医学影像);实现医疗模型(RETAIN、SafeDrug、GAMENet、StageNet、用于 EHR 的 Transformer);评估临床模型(公平性指标、校准、可解释性、不确定性量化)。
主要能力
PyHealth 通过模块化的五阶段流水线运作:
- 数据加载:以标准化接口访问 10 多个医疗数据集。
- 任务定义:应用 20 多个预定义临床预测任务或创建自定义任务。
- 模型选择:从 33 个以上模型中选择(基线、深度学习、医疗专用)。
- 训练:自动检查点、监控与评估。
- 部署:为临床使用进行校准、解释与验证。
性能方面,处理医疗数据比 pandas 快 3 倍。
使用方式
安装命令:
uv pip install pyhealth
要求:Python ≥ 3.7、PyTorch ≥ 1.8、NumPy、pandas、scikit-learn。
快速开始工作流示例:
from pyhealth.datasets import MIMIC4Dataset from pyhealth.tasks import mortality_prediction_mimic4_fn from pyhealth.datasets import split_by_patient, get_dataloader from pyhealth.models import Transformer from pyhealth.trainer import Trainer
1. 加载数据集并设置任务
dataset = MIMIC4Dataset(root="/path/to/data") sample_dataset = dataset.set_task(mortality_prediction_mimic4_fn)
2. 划分数据
train, val, test = split_by_patient(sample_dataset, [0.7, 0.1, 0.2])
3. 创建数据加载器
train_loader = get_dataloader(train, batch_size=64, shuffle=True) val_loader = get_dataloader(val, batch_size=64, shuffle=False) test_loader = get_dataloader(test, batch_size=64, shuffle=False)
4. 初始化并训练模型
model = Transformer( dataset=sample_dataset, feature_keys=["diagnoses", "medications"], mode="binary", embedding_dim=128 )
trainer = Trainer(model=model, device="cuda") trainer.train( train_dataloader=train_loader, val_dataloader=val_loader, epochs=50, monitor="pr_auc_score" )
5. 评估
results = trainer.evaluate(test_loader)
该技能包含按功能组织的参考文档,可按需阅读:
- references/datasets.md:数据集与数据结构,涵盖核心数据结构(Event、Patient、Visit)、10 多个可用数据集、数据加载与迭代、训练/验证/测试划分策略、大数据集性能优化。
- references/medical_coding.md:医学编码转换,涵盖 InnerMap 系统内查找、CrossMap 跨系统转换、支持的编码系统(ICD、NDC、ATC、CCS、RxNorm)、编码标准化与层级遍历、按治疗类别进行药物分类、与数据集集成。
- references/tasks.md:临床预测任务,涵盖 20 多个预定义临床任务、EHR 任务(死亡率、再入院、住院时长、药物推荐)、信号任务(睡眠分期、EEG 分析、癫痫检测)、影像任务(COVID-19 胸部 X 光分类)、文本任务(医学编码、专科分类)、自定义任务创建模式。
- references/models.md:模型与架构,涵盖 33 个以上可用模型、通用模型(逻辑回归、MLP、CNN、RNN、Transformer、GNN)、医疗专用模型(RETAIN、SafeDrug、GAMENet、StageNet、AdaCare)、按任务类型和数据类型的模型选择、可解释性考量、计算需求、超参数调优指南。
- references/preprocessing.md:数据预处理,涵盖 15 种以上处理器类型、序列处理(填充、截断)、信号处理(滤波、分段)、特征提取与编码、标签处理器(二分类、多分类、多标签、回归)、文本与图像预处理、常见预处理工作流。
- references/training_evaluation.md:训练与评估,涵盖 Trainer 类(train、evaluate、inference)、二分类/多分类/多标签/回归任务的指标、公平性指标、校准方法(Platt scaling、温度缩放)、不确定性量化(保形预测、MC dropout)、可解释性工具(注意力可视化、SHAP、ChEFER)、完整训练流水线示例。
适用场景
用例 1:ICU 死亡率预测。加载 MIMIC-IV 数据集,应用死亡率预测任务,选择可解释模型(RETAIN),训练并评估,为临床使用解释预测。
用例 2:安全药物推荐。加载 EHR 数据集(MIMIC-IV 或 OMOP),应用药物推荐任务,使用带 DDI 约束的 SafeDrug 模型,预处理药物编码,用多标签指标评估。
用例 3:医院再入院预测。加载多站点 EHR 数据(eICU 或 OMOP),应用再入院预测任务,在预处理中处理类别不平衡,训练 Transformer 模型,校准预测并评估公平性。
用例 4:睡眠障碍诊断。加载睡眠 EEG 数据集(SleepEDF、SHHS),应用睡眠分期任务,预处理 EEG 信号(滤波、分段),训练 CNN 或 RNN 模型,评估各阶段性能。
用例 5:医学编码转换。使用 CrossMap 在 ICD-9、ICD-10、CCS 之间转换,将编码分组为临床有意义的类别,与数据集处理集成。
用例 6:临床文本到 ICD 编码。加载带临床文本的 MIMIC-III,应用 ICD 编码任务,预处理临床文本,使用 TransformersModel(ClinicalBERT),用多标签指标评估。
最佳实践
数据处理:始终按患者划分数据以防止数据泄漏(使用 split_by_patient);建模前检查数据集统计信息(dataset.stats());使用与数据类型匹配的预处理器。
模型开发:从基线开始(二分类/多分类用逻辑回归,初始深度学习基线用 MLP);选择任务合适的模型(需要可解释性用 RETAIN、AdaCare;药物推荐用 SafeDrug、GAMENet;长序列用 Transformer;图关系用 GNN);监控验证指标并处理类别不平衡(二分类用 AUROC、AUPRC;多分类用 macro-F1、weighted-F1;多标签用 Jaccard、example-F1;回归用 MAE、RMSE)。
临床部署:校准预测以确保概率可靠;跨人口群体评估公平性以检测偏差;量化不确定性以提供置信度估计;使用注意力权重、SHAP 或 ChEFER 解释预测;使用来自不同时间段或站点的留出测试集进行彻底验证。
限制
数据要求:深度学习模型需要足够的数据(数千名患者);缺失数据和编码错误会影响性能;必要时确保训练/测试划分尊重时间顺序。
临床验证:需要在不同医院/系统的数据上进行外部验证;部署前需在真实临床环境中进行前瞻性评估;需要临床医生审查预测和解释;需处理隐私(HIPAA/GDPR)、公平性和安全性等伦理问题。
计算资源:推荐使用 GPU 高效训练深度学习模型;大型数据集可能需要 16GB 以上内存;医疗数据集可能达数十至数百 GB。
常见问题排查:数据集 ImportError 需确保文件已下载且路径正确、检查版本兼容性;内存不足可减小批次大小、缩短序列长度、使用梯度累积或分块处理;性能不佳需检查类别不平衡并使用合适指标(AUPRC 与 AUROC)、验证预处理、增加模型容量或训练轮数、检查数据泄漏;训练缓慢可使用 GPU、增大批次大小、缩短序列长度或使用更高效模型(CNN 与 Transformer)。
获取帮助
文档:https://pyhealth.readthedocs.io/ GitHub Issues:https://github.com/sunlabuiuc/PyHealth/issues 教程:在线提供 7 个核心教程和 5 个实用流水线。