Package: pyhealth
Citing PyHealth :handshake:Yang, Chaoqi, Zhenbang Wu, Patrick Jiang, Zhen Lin, Junyi Gao, Benjamin P. Danek, and Jimeng Sun. 2023. “PyHealth: A Deep Learning Toolkit for Healthcare Applications.” In Proceedings of the 29th ACM SIGKDD Conference on Knowledge Discovery and Data Mining, 5788–89. KDD ’23. New York, NY, USA: Association for Computing Machinery.@inproceedings{pyhealth2023yang,author={Yang, Chaoqi and Wu, Zhenbang and Jiang, Patrick and Lin, Zhen and Gao, Junyi and Danek, Benjamin and Sun, Jimeng},title={{PyHealth}: A Deep Learning Toolkit for Healthcare Predictive Modeling},url={https://github.com/sunlabuiuc/PyHealth},booktitle={Proceedings of the 27th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD) 2023},year={2023}}Checkout Our KDD’23 Tutorialhttps://sunlabuiuc.github.io/PyHealth/PyHealth is a comprehensive deep learning toolkit for supporting clinical predictive modeling, which is designed for bothML researchers and medical practitioners. We can make yourhealthcare AI applicationseasier to deploy and more flexible and customizable.[Tutorials][News!]We are continueously implemeting good papers and benchmarks into PyHealth, checkout the[planned List]. Welcome to pick one from the list and send us a PR or add more influential and new papers into the plan list.1. Installation :rocket:You could install from PyPi:pipinstallpyhealthor from github source:pipinstall.2. Introduction :book:pyhealthprovides these functionalities (we are still enriching some modules):You can use the following functions independently:Dataset:MIMIC-III,MIMIC-IV,eICU,OMOP-CDM,customized EHR datasets, etc.Tasks:diagnosis-baseddrug recommendation,patient hospitalization and mortality prediction,length stay forecasting, etc.ML models:CNN,LSTM,GRU,LSTM,RETAIN,SafeDrug,Deepr, etc.Building a healthcare AI pipeline can be as short as 10 lines of code in PyHealth.3. Build ML Pipelines :trophy:All healthcare tasks in our package follow afive-stage pipeline:We try hard to make sure each stage is as separate as possible, so that people can customize their own pipeline by only using our data processing steps or the ML models.Module 1: <pyhealth.datasets>pyhealth.datasetsprovides a clean structure for the dataset, independent from the tasks. We supportMIMIC-III,MIMIC-IVandeICU, etc. The output (mimic3base) is a multi-level dictionary structure (see illustration below).frompyhealth.datasetsimportMIMIC3Datasetmimic3base=MIMIC3Dataset(# root directory of the datasetroot="https://storage.googleapis.com/pyhealth/Synthetic_MIMIC-III/",# raw CSV table nametables=["DIAGNOSES_ICD","PROCEDURES_ICD","PRESCRIPTIONS"],# map all NDC codes to CCS codes in these tablescode_mapping={"NDC":"CCSCM"},)Module 2: <pyhealth.tasks>pyhealth.tasksdefines how to process each patient’s data into a set of samples for the tasks. In the package, we provide several task examples, such asdrug recommendationandlength of stay prediction.It is easy to customize your own tasks following ourtemplate.frompyhealth.tasksimportreadmission_prediction_mimic3_fnmimic3sample=mimic3base.set_task(task_fn=readmission_prediction_mimic3_fn)# use default taskmimic3sample.samples[0]# show the information of the first sample"""
{
    'visit_id': '100183',
    'patient_id': '175',
    'conditions': ['5990', '4280', '2851', '4240', '2749', '9982', 'E8499', '42831', '34600'],
    'procedures': ['0040', '3931', '7769'],
    'drugs': ['N06DA02', 'V06DC01', 'B01AB01', 'A06AA02', 'R03AC02', 'H03AA01', 'J01FA09'],
    'label': 0
}
"""frompyhealth.datasetsimportsplit_by_patient,get_dataloadertrain_ds,val_ds,test_ds=split_by_patient(mimic3sample,[0.8,0.1,0.1])train_loader=get_dataloader(train_ds,batch_size=32,shuffle=True)val_loader=get_dataloader(val_ds,batch_size=32,shuffle=False)test_loader=get_dataloader(test_ds,batch_size=32,shuffle=False)Module 3: <pyhealth.models>pyhealth.modelsprovides different ML models with very similar argument configs.frompyhealth.modelsimportTransformermodel=Transformer(dataset=mimic3sample,feature_keys=["conditions","procedures","drug"],label_key="label",mode="binary",)Module 4: <pyhealth.trainer>pyhealth.trainercan specify training arguments, such as epochs, optimizer, learning rate, etc. The trainer will automatically save the best model and output the path in the end.frompyhealth.trainerimportTrainertrainer=Trainer(model=model)trainer.train(train_dataloader=train_loader,val_dataloader=val_loader,epochs=50,monitor="pr_auc_samples",)Module 5: <pyhealth.metrics>pyhealth.metricsprovides severalcommon evaluation metrics(refer toDocand see what are available).# method 1trainer.evaluate(test_loader)# method 2frompyhealth.metrics.binaryimportbinary_metrics_fny_true,y_prob,loss=trainer.inference(test_loader)binary_metrics_fn(y_true,y_prob,metrics=["pr_auc","roc_auc"])4. Medical Code Map :hospital:pyhealth.codemapprovides two core functionalities.This module can be used independently.For code ontology lookup within one medical coding system (e.g., name, category, sub-concept);frompyhealth.medcodeimportInnerMapicd9cm=InnerMap.load("ICD9CM")icd9cm.lookup("428.0")# `Congestive heart failure, unspecified`icd9cm.get_ancestors("428.0")# ['428', '420-429.99', '390-459.99', '001-999.99']atc=InnerMap.load("ATC")atc.lookup("M01AE51")# `ibuprofen, combinations`atc.lookup("M01AE51","drugbank_id")# `DB01050`atc.lookup("M01AE51","description")# Ibuprofen is a non-steroidal anti-inflammatory drug (NSAID) derived ...atc.lookup("M01AE51","indication")# Ibuprofen is the most commonly used and prescribed NSAID. It is very common over the ...For code mapping between two coding systems (e.g., ICD9CM to CCSCM).frompyhealth.medcodeimportCrossMapcodemap=CrossMap.load("ICD9CM","CCSCM")codemap.map("428.0")# ['108']codemap=CrossMap.load("NDC","RxNorm")codemap.map("50580049698")# ['209387']codemap=CrossMap.load("NDC","ATC")codemap.map("50090539100")# ['A10AC04', 'A10AD04', 'A10AB04']5. Medical Code Tokenizer :speech_balloon:pyhealth.tokenizeris used for transformations between string-based tokens and integer-based indices, based on the overall token space. We provide flexible functions to tokenize 1D, 2D and 3D lists.This module can be used independently.frompyhealth.tokenizerimportTokenizer# Example: we use a list of ATC3 code as the tokentoken_space=['A01A','A02A','A02B','A02X','A03A','A03B','A03C','A03D',\'A03F','A04A','A05A','A05B','A05C','A06A','A07A','A07B','A07C',\'A12B','A12C','A13A','A14A','A14B','A16A']tokenizer=Tokenizer(tokens=token_space,special_tokens=["<pad>","<unk>"])# 2d encodetokens=[['A03C','A03D','A03E','A03F'],['A04A','B035','C129']]indices=tokenizer.batch_encode_2d(tokens)# [[8, 9, 10, 11], [12, 1, 1, 0]]# 2d decodeindices=[[8,9,10,11],[12,1,1,0]]tokens=tokenizer.batch_decode_2d(indices)# [['A03C', 'A03D', 'A03E', 'A03F'], ['A04A', '<unk>', '<unk>']]# 3d encodetokens=[[['A03C','A03D','A03E','A03F'],['A08A','A09A']],\[['A04A','B035','C129']]]indices=tokenizer.batch_encode_3d(tokens)# [[[8, 9, 10, 11], [24, 25, 0, 0]], [[12, 1, 1, 0], [0, 0, 0, 0]]]# 3d decodeindices=[[[8,9,10,11],[24,25,0,0]],\[[12,1,1,0],[0,0,0,0]]]tokens=tokenizer.batch_decode_3d(indices)# [[['A03C', 'A03D', 'A03E', 'A03F'], ['A08A', 'A09A']], [['A04A', '<unk>', '<unk>']]]6. Tutorials :teacher:We provide the following tutorials to help users get started with our pyhealth.Tutorial 0: Introduction to pyhealth.data[Video]Tutorial 1: Introduction to pyhealth.datasets[Video]Tutorial 2: Introduction to pyhealth.tasks[Video]Tutorial 3: Introduction to pyhealth.models[Video]Tutorial 4: Introduction to pyhealth.trainer[Video]Tutorial 5: Introduction to pyhealth.metrics[Video]Tutorial 6: Introduction to pyhealth.tokenizer[Video]Tutorial 7: Introduction to pyhealth.medcode[Video]The following tutorials will help users build their own task pipelines.Pipeline 1: Drug Recommendation[Video]Pipeline 2: Length of Stay Prediction[Video]Pipeline 3: Readmission Prediction[Video]Pipeline 4: Mortality Prediction[Video]Pipeline 5: Sleep Staging[Video]We provided the advanced tutorials for supporting various needs.Advanced Tutorial 1: Fit your dataset into our pipeline[Video]Advanced Tutorial 2: Define your own healthcare taskAdvanced Tutorial 3: Adopt customized model into pyhealth[Video]Advanced Tutorial 4: Load your own processed data into pyhealth and try out our ML models[Video]7. Datasets :mountain_snow:We provide the processing files for the following open EHR datasets:DatasetModuleYearInformationMIMIC-IIIpyhealth.datasets.MIMIC3Dataset2016MIMIC-III Clinical DatabaseMIMIC-IVpyhealth.datasets.MIMIC4Dataset2020MIMIC-IV Clinical DatabaseeICUpyhealth.datasets.eICUDataset2018eICU Collaborative Research DatabaseOMOPpyhealth.datasets.OMOPDatasetOMOP-CDM schema based datasetSleepEDFpyhealth.datasets.SleepEDFDataset2018Sleep-EDF datasetSHHSpyhealth.datasets.SHHSDataset2016Sleep Heart Health Study datasetISRUCpyhealth.datasets.ISRUCDataset2016ISRUC-SLEEP dataset8. Machine/Deep Learning Models and Benchmarks :airplane:Model NameTypeModuleYearSummaryReferenceMulti-layer Perceptrondeep learningpyhealth.models.MLP1986MLP treats each feature as staticBackpropagation: theory, architectures, and applicationsConvolutional Neural Network (CNN)deep learningpyhealth.models.CNN1989CNN runs on the conceptual patient-by-visit gridsHandwritten Digit Recognition with a Back-Propagation NetworkRecurrent Neural Nets (RNN)deep Learningpyhealth.models.RNN2011RNN (includes LSTM and GRU) can run on any sequential level (e.g., visit by visit sequences)Recurrent neural network based language modelTransformerdeep Learningpyhealth.models.Transformer2017Transformer can run on any sequential level (e.g., visit by visit sequences)Attention Is All You NeedRETAINdeep Learningpyhealth.models.RETAIN2016RETAIN uses two RNN to learn patient embeddings while providing feature-level and visit-level importance.RETAIN: An Interpretable Predictive Model for Healthcare using Reverse Time Attention MechanismGAMENetdeep Learningpyhealth.models.GAMENet2019GAMENet uses memory networks, used only for drug recommendation taskGAMENet: Graph Augmented MEmory Networks for Recommending Medication CombinationMICRONdeep Learningpyhealth.models.MICRON2021MICRON predicts the future drug combination by instead predicting the changes w.r.t. the current combination, used only for drug recommendation taskChange Matters: Medication Change Prediction with Recurrent Residual NetworksSafeDrugdeep Learningpyhealth.models.SafeDrug2021SafeDrug encodes drug molecule structures by graph neural networks, used only for drug recommendation taskSafeDrug: Dual Molecular Graph Encoders for Recommending Effective and Safe Drug CombinationsMoleRecdeep Learningpyhealth.models.MoleRec2023MoleRec encodes drug molecule in a substructure level as well as the patient’s information into a drug combination representation, used only for drug recommendation taskMoleRec: Combinatorial Drug Recommendation with Substructure-Aware Molecular Representation LearningDeeprdeep Learningpyhealth.models.Deepr2017Deepr is based on 1D CNN. General purpose.Deepr : A Convolutional Net for Medical RecordsContraWR Encoder (STFT+CNN)deep Learningpyhealth.models.ContraWR2021ContraWR encoder uses short time Fourier transform (STFT) + 2D CNN, used for biosignal learningSelf-supervised EEG Representation Learning for Automatic Sleep StagingSparcNet (1D CNN)deep Learningpyhealth.models.SparcNet2023SparcNet is based on 1D CNN, used for biosignal learningDevelopment of Expert-level Classification of Seizures and Rhythmic and Periodic Patterns During EEG InterpretationTCNdeep learningpyhealth.models.TCN2018TCN is based on dilated 1D CNN. General purposeAn Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence ModelingAdaCaredeep learningpyhealth.models.AdaCare2020AdaCare uses CNNs with dilated filters to learn enriched patient embedding. It uses feature calibration module to provide the feature-level and visit-level interpretabilityAdaCare: Explainable Clinical Health Status Representation Learning via Scale-Adaptive Feature Extraction and RecalibrationConCaredeep learningpyhealth.models.ConCare2020ConCare uses transformers to learn patient embedding and calculate inter-feature correlations.ConCare: Personalized Clinical Feature Embedding via Capturing the Healthcare ContextStageNetdeep learningpyhealth.models.StageNet2020StageNet uses stage-aware LSTM to conduct clinical predictive tasks while learning patient disease progression stage change unsupervisedlyStageNet: Stage-Aware Neural Networks for Health Risk PredictionDr. Agentdeep learningpyhealth.models.Agent2020Dr. Agent uses two reinforcement learning agents to learn patient embeddings by mimicking clinical second opinionsDr. Agent: Clinical predictive model via mimicked second opinionsGRASPdeep learningpyhealth.models.GRASP2021GRASP uses graph neural network to identify latent patient clusters and uses the clustering information to learn patientGRASP: Generic Framework for Health Status Representation Learning Based on Incorporating Knowledge from Similar PatientsCheck theinteractive map on benchmark EHR predictive tasks.