def test_predict_multi(): # Simulate data 100 images worth sim = Simulator() sigma = 1 y = [0, 1] n_reps = 50 output_dir = '.' dat = sim.create_data(y, sigma, reps=n_reps, output_dir=output_dir) y = pd.read_csv('y.csv', header=None, index_col=None) dat = Brain_Data('data.nii.gz', Y=y) # Predict within given ROIs # Generate some "rois" (in reality non-contiguous, but also not overlapping) roi_1 = dat[0].copy() roi_1.data = np.zeros_like(roi_1.data, dtype=bool) roi_2 = roi_1.copy() roi_3 = roi_1.copy() idx = np.random.choice(range(roi_1.shape()[-1]), size=9999, replace=False) roi_1.data[idx[:3333]] = 1 roi_2.data[idx[3333:6666]] = 1 roi_3.data[idx[6666:]] = 1 rois = roi_1.append(roi_2).append(roi_3) # Load in all 50 rois so we can "insert" signal into the first one # rois = expand_mask(Brain_Data(os.path.join(get_resource_path(), 'k50.nii.gz'))) # roi = rois[0] from sklearn.datasets import make_classification X, Y = make_classification(n_samples=100, n_features=rois[0].data.sum(), n_informative=500, n_redundant=5, n_classes=2) dat.data[:, rois[0].data.astype(bool)] = X dat.Y = pd.Series(Y) out = dat.predict_multi(algorithm='svm', cv_dict={'type': 'kfolds', 'n_folds': 3}, method='rois', n_jobs=-1, rois=rois[:3], kernel='linear') assert len(out) == 3 assert np.sum([elem['weight_map'].data.shape for elem in out]) == rois.data.sum() # Searchlight roi_mask = rois[:2].sum() out = dat.predict_multi(algorithm='svm', cv_dict={'type': 'kfolds', 'n_folds': 3}, method='searchlight', radius=4, verbose=50, n_jobs=-1, process_mask=roi_mask) assert len(np.nonzero(out.data)[0]) == len(np.nonzero(roi_mask.data)[0])
from nilearn.plotting import plot_glass_brain plot_glass_brain(pdata.mean().to_nifti()) pdata.mean().plot() from nltools.plotting import plotBrain plotBrain(pdata.X) data_subjs=pdata.X["SubjectID"].unique() len(data_subjs) train_subjs=pandas.DataFrame(data_subjs).sample(frac=0.9,random_state=2057) test_subjs= [s for s in data_subjs if s not in train_subjs[0]] pdata.Y=pdata.X["PainLevel"] data_train = pdata[train_subjs[0]] data_test = pdata[test_subjs] #train! stats = data_train.predict(algorithm='ridge',plot=False) #test predicted_pain=data_test.similarity(stats['weight_map'],'dot_product') + stats['intercept']