def get_sourcetarget_split_p300(source, target, ncovs_train): X_source = source['signals'] y_source = source['labels'].flatten() covs_source = XdawnCovariances(classes=[2]).fit_transform( X_source, y_source) source = {} source['covs'] = covs_source source['labels'] = y_source X_target = target['signals'] y_target = target['labels'].flatten() if ncovs_train is None: ncovs_train = np.sum(y_target == 2) sel = np.arange(len(y_target)) np.random.shuffle(sel) X_target = X_target[sel] y_target = y_target[sel] idx_erps = np.where(y_target == 2)[0][:ncovs_train] idx_rest = np.where( y_target == 1)[0][:ncovs_train * 5] # because there's one ERP in every 6 flashes idx_train = np.concatenate([idx_erps, idx_rest]) idx_test = np.array( [i for i in range(len(y_target)) if i not in idx_train]) erp = XdawnCovariances(classes=[2]) erp.fit(X_target[idx_train], y_target[idx_train]) target_train = {} covs_target_train = erp.transform(X_target[idx_train]) y_target_train = y_target[idx_train] target_train['covs'] = covs_target_train target_train['labels'] = y_target_train target_test = {} covs_target_test = erp.transform(X_target[idx_test]) y_target_test = y_target[idx_test] target_test['covs'] = covs_target_test target_test['labels'] = y_target_test return source, target_train, target_test
subject_dir_list = test_list_np[testing_participant_id] subject_epoch = np.empty((0, len(channels), epoch_len), float) for trial_id in range(trial_per_subj): subject_dir = subject_dir_list[trial_id] data = generate_epoch('FeedBackEvent', './data/test/'+subject_dir, channels, fs, lowcut, highcut, epoch_s, epoch_e, bl_s, bl_e) subject_epoch = np.vstack((subject_epoch, data)) subject_epoch = np.reshape( subject_epoch, (1, stimulus_per_subj, len(channels), epoch_len)) test_data_list = np.vstack((test_data_list, subject_epoch)) print('Epoched testing data shape: ' + str(test_data_list.shape)) # ########################## apply data preprocessing ############################ y_train = pd.read_csv('data/TrainLabels.csv')['Prediction'].values XC = XdawnCovariances(nfilter=5) X_train = XC.fit_transform(np.reshape( train_data_list, (total_training_participant*stimulus_per_subj, len(channels), epoch_len)), y_train) X_train = TangentSpace(metric='riemann').fit_transform(X_train) X_test = XC.transform(np.reshape( test_data_list, (10*stimulus_per_subj, len(channels), epoch_len))) X_test = TangentSpace(metric='riemann').transform(X_test) print('Preprocessed training data shape: ' + str(X_train.shape)) print('Preprocessed testing data shape: ' + str(X_test.shape)) # ############################## save data to disk ############################### np.save('./data/train_data.npy', train_data_list) np.save('./data/test_data.npy', test_data_list) np.save('./data/X_train', X_train) np.save('./data/X_test', X_test)