예제 #1
0
def main():
    sample = 1
    exp_name = "ICA"

    epochs = get_epochs(sample)

    num_components = 80
    label = -1
예제 #2
0
def main():
    model_type = "lda"
    exp_name = "PCA/scaled/all_samples"

    if exp_name.split("/")[1] == "scaled":
        scaled = True
    else:
        scaled = False

    all_sample_results = np.zeros((21, 50))

    for i, sample in enumerate(range(1, 22)):
        print("sample {}".format(sample))

        if exp_name == "raw/all_samples":
            x_train, y_train = get_raw_data(sample, scale=scaled)
        else:
            epochs = get_epochs(sample, scale=scaled)
            reduced_data = pca(80, epochs, plot=False)
            x_train = reduced_data.transpose(0, 2, 1).reshape(-1, reduced_data.shape[1])
            y_train = get_y_train(sample)

        results = linear_models(x_train, y_train, model_type=model_type)
        all_sample_results[i] = results

        sns.set()
        ax = sns.lineplot(data=results, dashes=False)
        ax.set(ylim=(0, 0.6), xlabel='Time', ylabel='Accuracy',
               title='Cross Val Accuracy {} for sample {}'.format(model_type, sample))
        plt.axvline(x=15, color='b', linestyle='--')
        ax.figure.savefig("Results/{}/{}/sample{}".format(model_type, exp_name, sample), dpi=300)
        # plt.show()
        plt.clf()

    all_results_df = pd.DataFrame(all_sample_results)
    all_results_df.to_csv("Results/{}/{}/all_sample_results.csv".format(model_type, exp_name))

    average_results = np.mean(all_sample_results, axis=0)
    sns.set()
    ax = sns.lineplot(data=average_results, dashes=False)
    ax.set(ylim=(0, 0.6), xlabel='Time', ylabel='Accuracy',
           title='Average Cross Val Accuracy {} across all samples'.format(model_type))
    plt.axvline(x=15, color='b', linestyle='--')
    ax.figure.savefig("Results/{}/{}/average_all_samples".format(model_type, exp_name), dpi=300)
    # plt.show()
    plt.clf()
예제 #3
0
def main():
    sample = 4
    model_type = "svm"
    exp_name = "ICA/sample_{}".format(sample)

    hps = ["linear", "poly", "rbf", "sigmoid"]

    epochs = get_epochs(sample)

    all_results = np.zeros((len(hps), 50))

    for i, hp in enumerate(hps):
        print("iteration with hp set to: {}".format(hp))
        reduced_data = ica(70, epochs, plot=False)
        x_train = reduced_data.transpose(0, 2,
                                         1).reshape(-1, reduced_data.shape[1])

        y_train = get_y_train(sample)

        results = nonlinear_models(x_train,
                                   y_train,
                                   model_type=model_type,
                                   kernel=hp)
        all_results[i] = results

        sns.set()
        ax = sns.lineplot(data=results, dashes=False)
        ax.set(ylim=(0, 0.6),
               xlabel='Time',
               ylabel='Accuracy',
               title='Cross Val Accuracy {} and {} comps'.format(
                   model_type, hp))
        plt.axvline(x=15, color='b', linestyle='--')
        ax.figure.savefig("Results/{}/{}/kernel_{}_sample{}".format(
            model_type, exp_name, hp, sample),
                          dpi=300)
        # plt.show()
        plt.clf()

    all_results_df = pd.DataFrame(all_results)
    all_results_df.to_csv("Results/{}/{}/all_kernels_sample{}.csv".format(
        model_type, exp_name, sample))
예제 #4
0
def main():
    model_type = "lda"
    exp_name = "wavelet_class/lsqr/complex"

    save_dir = "Results/{}/{}".format(model_type, exp_name)

    sample_models = []

    for sample in range(1, 22):
        print("sample {}".format(sample))

        epochs = get_epochs(sample, scale=False)

        freqs = np.logspace(*np.log10([2, 25]), num=15)
        n_cycles = freqs / 4.

        print("applying morlet wavelet")
        # returns (n_epochs, n_channels, n_freqs, n_times)
        wavelet_output = tfr_array_morlet(epochs.get_data(),
                                          sfreq=epochs.info['sfreq'],
                                          freqs=freqs,
                                          n_cycles=n_cycles,
                                          output='complex')
        y_train = get_y_train(sample)

        freq_models = []

        for freq in range(wavelet_output.shape[2]):
            print("frequency: {}".format(freqs[freq]))

            wavelet_epochs = wavelet_output[:, :, freq, :]
            wavelet_epochs = np.append(wavelet_epochs.real,
                                       wavelet_epochs.imag,
                                       axis=1)

            wavelet_info = mne.create_info(ch_names=wavelet_epochs.shape[1],
                                           sfreq=epochs.info['sfreq'],
                                           ch_types='mag')
            wavelet_epochs = mne.EpochsArray(wavelet_epochs,
                                             info=wavelet_info,
                                             events=epochs.events)

            reduced = pca(80, wavelet_epochs, plot=False)
            x_train = reduced.transpose(0, 2, 1).reshape(-1, reduced.shape[1])

            time_models = []

            for time in range(50):
                print("time {}".format(time))
                intervals = np.arange(start=time,
                                      stop=x_train.shape[0],
                                      step=50)

                x_sample = x_train[intervals, :]
                y_sample = y_train[intervals]
                model = LinearDiscriminantAnalysis(solver='lsqr',
                                                   shrinkage='auto')
                model.fit(x_sample, y_sample)

                time_models.append(model)

            freq_models.append(time_models)

        sample_models.append(freq_models)
        print('saving models for sample {}'.format(sample))
        pickle.dump(
            freq_models,
            open("{}/sample_{}/all_freq_models.pkl".format(save_dir, sample),
                 "wb"))
        print("models saved")

    print('saving models for all samples')
    pickle.dump(sample_models, open("{}/all_models.pkl".format(save_dir),
                                    "wb"))
    print("models saved")
예제 #5
0
def main():
    model_type = "lda"
    exp_name = "freq_gen_matrix/"

    for i, sample in enumerate(range(1, 22)):
        print("sample {}".format(sample))

        if not os.path.isdir("Results/{}/{}/sample_{}".format(
                model_type, exp_name, sample)):
            os.mkdir("Results/{}/{}/sample_{}".format(model_type, exp_name,
                                                      sample))

        epochs = get_epochs(sample, scale=False)
        y_train = epochs.events[:, 2]

        freqs = np.logspace(*np.log10([2, 25]), num=15)
        n_cycles = freqs / 4.
        string_freqs = [round(x, 2) for x in freqs]

        print("applying morlet wavelet")

        wavelet_output = tfr_array_morlet(epochs.get_data(),
                                          sfreq=epochs.info['sfreq'],
                                          freqs=freqs,
                                          n_cycles=n_cycles,
                                          output='complex')

        time_results = np.zeros(
            (wavelet_output.shape[3], len(freqs), len(freqs)))

        for time in range(wavelet_output.shape[3]):
            print("time: {}".format(time))

            wavelet_epochs = wavelet_output[:, :, :, time]
            wavelet_epochs = np.append(wavelet_epochs.real,
                                       wavelet_epochs.imag,
                                       axis=1)

            wavelet_info = mne.create_info(ch_names=wavelet_epochs.shape[1],
                                           sfreq=epochs.info['sfreq'],
                                           ch_types='mag')
            wavelet_epochs = mne.EpochsArray(wavelet_epochs,
                                             info=wavelet_info,
                                             events=epochs.events)

            x_train = pca(80, wavelet_epochs, plot=False)

            model = LinearModel(
                LinearDiscriminantAnalysis(solver='lsqr', shrinkage='auto'))
            freq_gen = GeneralizingEstimator(model,
                                             n_jobs=1,
                                             scoring='accuracy',
                                             verbose=True)
            scores = cross_val_multiscore(freq_gen,
                                          x_train,
                                          y_train,
                                          cv=5,
                                          n_jobs=1)
            scores = np.mean(scores, axis=0)
            time_results[time] = scores

            sns.set()
            ax = sns.barplot(
                np.sort(string_freqs),
                np.diag(scores),
            )
            ax.set(ylim=(0, 0.8),
                   xlabel='Frequencies',
                   ylabel='Accuracy',
                   title='Cross Val Accuracy {} for Subject {} for Time {}'.
                   format(model_type, sample, time))
            ax.axhline(0.12, color='k', linestyle='--')
            ax.figure.set_size_inches(8, 6)
            ax.figure.savefig(
                "Results/{}/{}/sample_{}/time_{}_accuracy.png".format(
                    model_type, exp_name, sample, time),
                dpi=300)
            plt.close('all')
            # plt.show()

            fig, ax = plt.subplots(1, 1)
            im = ax.imshow(scores,
                           interpolation='lanczos',
                           origin='lower',
                           cmap='RdBu_r',
                           extent=[2, 25, 2, 25],
                           vmin=0.,
                           vmax=0.8)
            ax.set_xlabel('Testing Frequency (hz)')
            ax.set_ylabel('Training Frequency (hz)')
            ax.set_title(
                'Frequency generalization for Subject {} at Time {}'.format(
                    sample, time))
            plt.colorbar(im, ax=ax)
            ax.grid(False)
            ax.figure.savefig(
                "Results/{}/{}/sample_{}/time_{}_matrix.png".format(
                    model_type, exp_name, sample, time),
                dpi=300)
            plt.close('all')
            # plt.show()

        time_results = time_results.reshape(time_results.shape[0], -1)
        all_results_df = pd.DataFrame(time_results)
        all_results_df.to_csv(
            "Results/{}/{}/sample_{}/all_time_matrix_results.csv".format(
                model_type, exp_name, sample))
예제 #6
0
def main():
    model_type = "lda"
    exp_name = "wavelet_class/lsqr/complex/15hz"

    for sample in range(1, 22):
        print("sample {}".format(sample))

        if not os.path.isdir("Results/{}/{}/sample_{}".format(
                model_type, exp_name, sample)):
            os.mkdir("Results/{}/{}/sample_{}".format(model_type, exp_name,
                                                      sample))

        epochs = get_epochs(sample, scale=False)

        freqs = np.logspace(*np.log10([2, 15]), num=15)
        n_cycles = freqs / 4.

        print("applying morlet wavelet")

        # returns (n_epochs, n_channels, n_freqs, n_times)
        if exp_name.split("/")[-2] == "real" or exp_name.split(
                "/")[-2] == "complex":
            wavelet_output = tfr_array_morlet(epochs.get_data(),
                                              sfreq=epochs.info['sfreq'],
                                              freqs=freqs,
                                              n_cycles=n_cycles,
                                              output='complex')
        elif exp_name.split("/")[-2] == "power":
            wavelet_output = tfr_array_morlet(epochs.get_data(),
                                              sfreq=epochs.info['sfreq'],
                                              freqs=freqs,
                                              n_cycles=n_cycles,
                                              output='power')
        elif exp_name.split("/")[-2] == "phase":
            wavelet_output = tfr_array_morlet(epochs.get_data(),
                                              sfreq=epochs.info['sfreq'],
                                              freqs=freqs,
                                              n_cycles=n_cycles,
                                              output='phase')
        else:
            raise ValueError("{} not an output of wavelet function".format(
                exp_name.split("/")[-2]))

        y_train = get_y_train(sample)

        freq_results = np.zeros((wavelet_output.shape[2], 50))

        for freq in range(wavelet_output.shape[2]):
            print("frequency: {}".format(freqs[freq]))

            wavelet_epochs = wavelet_output[:, :, freq, :]

            if exp_name.split("/")[-2] == "real":
                wavelet_epochs = wavelet_epochs.real
            if exp_name.split("/")[-2] == "complex":
                wavelet_epochs = np.append(wavelet_epochs.real,
                                           wavelet_epochs.imag,
                                           axis=1)

            wavelet_info = mne.create_info(ch_names=wavelet_epochs.shape[1],
                                           sfreq=epochs.info['sfreq'],
                                           ch_types='mag')
            wavelet_epochs = mne.EpochsArray(wavelet_epochs,
                                             info=wavelet_info,
                                             events=epochs.events)

            reduced = pca(80, wavelet_epochs, plot=False)
            x_train = reduced.transpose(0, 2, 1).reshape(-1, reduced.shape[1])

            results = linear_models(x_train, y_train, model_type=model_type)
            freq_results[freq] = results

            curr_freq = str(round(freqs[freq], 2))

            sns.set()
            ax = sns.lineplot(data=results, dashes=False)
            ax.set(ylim=(0, 1),
                   xlabel='Time',
                   ylabel='Accuracy',
                   title='Cross Val Accuracy {} for Subject {} for Freq {}'.
                   format(model_type, sample, curr_freq))
            plt.axvline(x=15, color='b', linestyle='--')
            ax.figure.savefig("Results/{}/{}/sample_{}/freq_{}.png".format(
                model_type, exp_name, sample, curr_freq),
                              dpi=300)
            plt.clf()

        all_results_df = pd.DataFrame(freq_results)
        all_results_df.to_csv(
            "Results/{}/{}/sample_{}/all_freq_results.csv".format(
                model_type, exp_name, sample))