This notebook generates a prediction for the ISBI2015 White Matter Challenge
Import all the necessary components from other libraries, including numpy
, a module from scikit-learn
and functions from dipy
for managing gradient tables:
import numpy as np
import sklearn.linear_model as lm
from dipy.core import gradients as grad
The following imports are from our current implementation of the RS-SFM model
import utils
from model import Model, BiExponentialIsotropicModel
A utility function reads the data from the files. We read in the 'seen' data
data = utils.read_data()
seen_bvals = data['seen']['bvals']
seen_bvecs = data['seen']['bvecs']
seen_delta = data['seen']['delta']
seen_Delta = data['seen']['Delta']
seen_te = data['seen']['TE']
seen_g = data['seen']['g']
And create a gradient table to describe the conditions used to collect the seen data
seen_gtab = grad.gradient_table(seen_bvals,
seen_bvecs,
big_delta=seen_Delta,
small_delta=seen_delta)
Similarly, a gradient table is created for the unseen data
unseen_bvals = data['unseen']['bvals']
unseen_bvecs = data['unseen']['bvecs']
unseen_delta = data['unseen']['delta']
unseen_Delta = data['unseen']['Delta']
unseen_te = data['unseen']['TE']
unseen_g = data['unseen']['g']
unseen_gtab = grad.gradient_table(unseen_bvals,
unseen_bvecs,
big_delta=unseen_Delta,
small_delta=unseen_delta)
The model object used to fit the data is initialized with the gradient table for the seen data
model = Model(seen_gtab,
isotropic=BiExponentialIsotropicModel,
solver=lm.ElasticNet(l1_ratio=0.4,
alpha=5e-7,
positive=True,
warm_start=True,
fit_intercept=True,
normalize=True))
We initialize a list to contain the predictions
predict = []
In each iteration of the following loop, the model is fit to the seen data from a different voxel, and a prediction is made for this voxel in the unseen conditions
for vox_idx in range(6):
signal = data['seen']['signal'][:, vox_idx]
fit = model.fit(signal, seen_te, seen_g)
predict.append(fit.predict(unseen_gtab, unseen_te))
/Users/arokem/anaconda/lib/python3.5/site-packages/sklearn/linear_model/coordinate_descent.py:466: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations ConvergenceWarning)
The prediction is saved in the expected format
np.savetxt('unseenSignal.txt', np.array(predict).T, fmt='%.4f', header='\%-voxel1---voxel2---voxel3---voxel4---voxel5---voxel6')