Fast Shared Response Model
Project description
FastSRM
Implementation of FastSRM algorithms.
The model of probabilistic SRM is given by:
where
- is the data of subject
- is the basis of subject
- is the shared response (or sources) assumed to be sampled from a centered Gaussian with covariance
- is the noise in subject assumed to be sampled from a centered Gaussian with covariance where is the identity matrix. We call the noise variance of subject .
In practice we observe n samples of . When the number of samples is much lower than the number of features v, the SRM model can be fitted efficiently. This is what this repository provides. We also assume that the covariance of the shared response is diagonal to obtain identifiability.
Install
Clone the repository
git clone https://github.com/hugorichard/FastSRM
In the cloned directory execute
pip install -e .
Requirements:
scipy>=0.18.0
numpy>=1.12
scikit-learn>=0.23
joblib>=1.1.0
matplotlib>=2.0.0
pytest>=6.2.5
To run the experiments on identifiability, brainiak (https://github.com/brainiak/brainiak) and nilearn (https://nilearn.github.io/stable/index.html) are necessary.
Usage
In many neuroscience datasets, the samples are split into sessions. Therefore, for each subject we will have several sessions that can be time-wise concatenated to obtain all samples.
In IdentifiableFastSRM
# Input data X: neuroimaging data
# X is a np array of shape (n_subjects, n_sessions)
# X[i, j] is a path to a np array of shape (n_voxels, n_timeframes)
from fastsrm.identifiable_srm import IdentifiableFastSRM
srm = IdentifiableFastSRM(n_components=5, temp_dir="./", n_jobs=5)
S = srm.fit_transform(X) # Shared response: np array of shape (n_components, n_timeframes)
W = srm.basis_list # Shared response: np array of shape (n_components, n_timeframes)
Sigma = srm.source_covariance # (Diagonal) Covariance of the shared response: np array of shape (n_components,)
sigmas = srm.noise_variance # Variance of the noise: np array of shape (n_subjects)
Run experiments
Synthetic experiment
-
In the
experiments
folder runipython synthetic.py
-
Go in the
plotting
folder and runipython plot_synthetic_gradients.py
The figure is now available in the figures
folder under the name
synthetic_gradient.pdf
Timesegment matching experiment
-
Go in the experiments folder and download the sherlock dataset by running:
ipython get_sherlock.py
-
Go in the
experiments
folder and runbash timesegment.bash
if you have access to a cluster with slurm otherwise runbash timesegment_local.bash
-
Go in the
plotting
folder and runipython plot_timesegment.py
The figure is now available in the figures
folder under the name
timesegment_matching_sherlock.pdf
Identifiability experiment
-
Go in the experiments folder and download the sherlock dataset by running:
ipython get_sherlock.py
-
Download and install Brainiak (see https://github.com/brainiak/brainiak)
-
Go in the
experiments
folder and runbash identifiability.bash
if you have access to a cluster with slurm otherwise runbash identifiability_local.bash
-
Go in the
plotting
folder and runipython plot_identifiability.py
The figure is now available in the figures
folder under the name
identifiability.pdf
Documentation
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.