Package: scsims
SIMS: Scalable, Interpretable Modeling for Single-Cell RNA-Seq Data ClassificationSIMS is a pipeline for building interpretable and accurate classifiers for identifying any target on single-cell rna-seq data. The SIMS model is based ona sequential transformer, a transformer model specifically built for large-scale tabular datasets.SIMS takes in a list of arbitrarily many expression matrices along with their corresponding target variables. We assume the matrix formcell x gene, and NOTgene x cell, since our training samples are the transcriptomes of individual cells.The code is run withpython. To use the package, we recommend using a virtual environment such asminicondawhich will allow you to install packages without harming your systempython.InstallationIf using conda, runCreate a new virtual environment withconda create --name=<NAME> python=3.9Enter into your virtual environment withconda activate NAMEOtherwise, enter your virtual environment of choice andInstall the SIMS package withpip install --use-pep517 git+https://github.com/braingeneers/SIMS.gitSet up the model training code in aMYFILE.pyfile, and run it withpython MYFILE.py. A tutorial on how to set up training code is shown below.Training and inferenceTo train a model, we can set up a SIMS class in the following way:fromscsimsimportSIMSfrompytorch_lightning.loggersimportWandbLoggerlogger=WandbLogger(offline=True)data=an.read_h5ad('mydata.h5ad')sims=SIMS(data=data,class_label='class_label')sims.setup_trainer(accelerator="gpu",devices=1,logger=logger)sims.train()This will set up the underlying dataloaders, model, model checkpointing, and everything else we need. Model checkpoints will be saved every training epoch.To load in a model to infer new cell types on an unlabeled dataset, we load in the model checkpoint, point to the label file that we originally trained on, and run thepredictmethod on new data.sims=SIMS(weights_path='myawesomemodel.ckpt')cell_predictions=sims.predict('my/new/unlabeled.h5ad')Finally, to look at the explainability of the model, we similarly runexplainability_matrix=sims.explain('my/new/unlabeled.h5ad')# this can also be labeled data, of courseCustom training jobs / loggingTo customize the underlyingpl.Trainerand SIMS model params, we can initialize the SIMS model likefrompytorch_lightning.loggersimportWandbLoggerfrompytorch_lightning.callbacksimportEarlyStopping,LearningRateMonitorfromscsimsimportSIMSwandb_logger=WandbLogger(project=f"My Project",name=f"SIMS Model Training")# set up the logger to log data to Weights and Biasessims=SIMS(data=adata,class_label='class_label')sims.setup_model(n_a=64,n_d=64,weights=sims.weights)# weighting loss inversely proportional by label freq, helps learn rare cell types (recommended)sims.setup_trainer(logger=wandb_logger,callbacks=[EarlyStopping(monitor="val_loss",patience=50,),LearningRateMonitor(logging_interval="epoch"),],num_epochs=100,)sims.train()This will train the SIMS model on the given expression matrices with target variable given by theclass_labelcolumn in each label file.Using SIMS inside github codespacesIf you are using SIMS only for predictions using an already trained model, github codespaces is the recommended way to use this tool. You can also use this pipeline to train it in smaller datasets as the computing services offered in codespaces are modest.
To use this tool in github codespaces start by forking the repo in your github account. Then create a new codespace with the SIMS repo as the Repository of choice.
Once inside the newly created environment pull the latest SIMS image:dockerpulljmlehrer/sims:latestRun the docker container mounting the file folder containing datasets and model checkpoints to the filesystem:dockerrun-it-v/path/to/local/folder:/path/in/container[image_name]/bin/bashRun main.py to check if the installation has been completed. You can alter this file as shown above to perform the different tasks.pythonmain.py