def test_mvpa_voxel_selection(): data = prng.rand(5, 5, 5, 8).astype(np.float32) # all MPI processes read the mask; the mask file is small mask = np.ones([5, 5, 5], dtype=np.bool) mask[0, 0, :] = False labels = [0, 1, 0, 1, 0, 1, 0, 1] # 2 subjects, 4 epochs per subject sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(data, mask, labels, 2, sl) # for cross validation, use SVM with precomputed kernel clf = svm.SVC(kernel='rbf', C=10) result_volume, results = mvs.run(clf) if MPI.COMM_WORLD.Get_rank() == 0: output = [] for tuple in results: if tuple[1] > 0: output.append(int(8*tuple[1])) expected_output = [6, 6, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 1] assert np.allclose(output, expected_output, atol=1), \ 'voxel selection via SVM does not provide correct results'
def test_mvpa_voxel_selection(): raw_data = [] # all MPI processes read the mask; the mask file is small mask = np.ones([5, 5, 5], dtype=np.bool) mask[0, 0, :] = False epoch_info = None if MPI.COMM_WORLD.Get_rank()==0: data1 = prng.rand(5, 5, 5, 100).astype(np.float32) data2 = prng.rand(5, 5, 5, 100).astype(np.float32) raw_data = [data1, data2] epoch_info = [] epoch_info.append((0, 0, 10, 20)) epoch_info.append((1, 0, 30, 40)) epoch_info.append((0, 0, 50, 60)) epoch_info.append((1, 0, 70, 80)) epoch_info.append((0, 1, 10, 20)) epoch_info.append((1, 1, 30, 40)) epoch_info.append((0, 1, 50, 60)) epoch_info.append((1, 1, 70, 80)) # 2 subjects, 4 epochs per subject sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(raw_data, mask, epoch_info, 2, sl) # for cross validation, use SVM with precomputed kernel clf = svm.SVC(kernel='rbf', C=10) result_volume, results = mvs.run(clf) if MPI.COMM_WORLD.Get_rank() == 0: output = [] for tuple in results: if tuple[1] > 0: output.append(int(8*tuple[1])) expected_output = [6, 6, 6, 6, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2] assert np.allclose(output, expected_output, atol=1), \ 'voxel selection via SVM does not provide correct results'
# There are three random options: # RandomType.NORANDOM is the default # RandomType.REPRODUCIBLE permutes the voxels in the same way every run # RandomType.UNREPRODUCIBLE permutes the voxels differently across runs # example #from brainiak.fcma.preprocessing import RandomType #data, labels = prepare_searchlight_mvpa_data(images, conditions, # random=RandomType.UNREPRODUCIBLE) # the following line is an example to leaving a subject out #epoch_info = [x for x in epoch_info if x[1] != 0] num_subjs = int(sys.argv[5]) # create a Searchlight object sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(data, mask, labels, num_subjs, sl) clf = svm.SVC(kernel='linear', shrinking=False, C=1) # only rank 0 has meaningful return values score_volume, results = mvs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank()==0: score_volume = np.nan_to_num(score_volume.astype(np.float)) io.save_as_nifti_file(score_volume, mask_image.affine, 'result_score.nii.gz') seq_volume = np.zeros(mask.shape, dtype=np.int) seq = np.zeros(len(results), dtype=np.int) with open('result_list.txt', 'w') as fp: for idx, tuple in enumerate(results): fp.write(str(tuple[0]) + ' ' + str(tuple[1]) + '\n') seq[tuple[0]] = idx seq_volume[mask] = seq
# There are three random options: # RandomType.NORANDOM is the default # RandomType.REPRODUCIBLE permutes the voxels in the same way every run # RandomType.UNREPRODUCIBLE permutes the voxels differently across runs # example #from brainiak.fcma.preprocessing import RandomType #data, labels = prepare_searchlight_mvpa_data(images, conditions, # random=RandomType.UNREPRODUCIBLE) # the following line is an example to leaving a subject out #epoch_info = [x for x in epoch_info if x[1] != 0] num_subjs = int(sys.argv[5]) # create a Searchlight object sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(data, mask, labels, num_subjs, sl) clf = svm.SVC(kernel='linear', shrinking=False, C=1, gamma='auto') # only rank 0 has meaningful return values score_volume, results = mvs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank()==0: score_volume = np.nan_to_num(score_volume.astype(np.float)) io.save_as_nifti_file(score_volume, mask_image.affine, 'result_score.nii.gz') seq_volume = np.zeros(mask.shape, dtype=np.int) seq = np.zeros(len(results), dtype=np.int) with open('result_list.txt', 'w') as fp: for idx, tuple in enumerate(results): fp.write(str(tuple[0]) + ' ' + str(tuple[1]) + '\n') seq[tuple[0]] = idx seq_volume[mask] = seq
# all MPI processes read the mask; the mask file is small mask_img = nib.load(mask_file) mask = mask_img.get_data() epoch_info = None if MPI.COMM_WORLD.Get_rank()==0: files = [f for f in sorted(os.listdir(data_dir)) if os.path.isfile(os.path.join(data_dir, f)) and f.endswith(extension)] for f in files: img = nib.load(os.path.join(data_dir, f)) data = img.get_data() raw_data.append(data) logger.info( 'file %s is loaded, with data shape %s' % (f, data.shape) ) epoch_list = np.load(epoch_file) epoch_info = generate_epochs_info(epoch_list) num_subjs = int(sys.argv[5]) # create a Searchlight object sl = Searchlight(sl_rad=2) mvs = MVPAVoxelSelector(raw_data, mask, epoch_info, num_subjs, sl) # for cross validation, use SVM with precomputed kernel # no shrinking, set C=10 clf = svm.SVC(kernel='rbf', shrinking=False, C=10) # only rank 0 has meaningful return values result_volume, results = mvs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank()==0: result_volume = np.nan_to_num(result_volume.astype(np.float)) write_nifti_file(result_volume, mask_img.affine, 'result.nii.gz')
raw_data = [] # all MPI processes read the mask; the mask file is small mask_img = nib.load(mask_file) mask = mask_img.get_data().astype(np.bool) epoch_info = None if MPI.COMM_WORLD.Get_rank() == 0: raw_data = io.read_activity_data(data_dir, extension) epoch_list = np.load(epoch_file) epoch_info = io.generate_epochs_info(epoch_list) # the following line is an example to leaving a subject out #epoch_info = [x for x in epoch_info if x[1] != 0] num_subjs = int(sys.argv[5]) # create a Searchlight object sl = Searchlight(sl_rad=1) mvs = MVPAVoxelSelector(raw_data, mask, epoch_info, num_subjs, sl) clf = svm.SVC(kernel='linear', shrinking=False, C=1) # only rank 0 has meaningful return values score_volume, results = mvs.run(clf) # this output is just for result checking if MPI.COMM_WORLD.Get_rank() == 0: score_volume = np.nan_to_num(score_volume.astype(np.float)) io.write_nifti_file(score_volume, mask_img.affine, 'result_score.nii.gz') seq_volume = np.zeros(mask.shape, dtype=np.int) seq = np.zeros(len(results), dtype=np.int) with open('result_list.txt', 'w') as fp: for idx, tuple in enumerate(results): fp.write(str(tuple[0]) + ' ' + str(tuple[1]) + '\n') seq[tuple[0]] = idx seq_volume[mask] = seq