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
Beispiel #2
0
        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)