В этом уроке я покажу вам, как провести несколько экспериментов с машинным обучением в Google Colaboratory с данными из статьи Расшифровка слухового внимания к инструментам в полифонической музыке с использованием однократной классификации ЭЭГ. также покажет вам, как вы можете импортировать свои собственные данные для проведения экспериментов с вашими собственными данными.

Прежде всего, мы собираемся использовать Google Colaboratory, поэтому перейдите по этой ссылке и войдите в свою учетную запись Google, чтобы открыть блокнот Google Colab. Причина, по которой мы собираемся использовать Google Colab, заключается в обширной конфигурации Google для использования графического процессора (GPU) для ускорения вычислений. Поскольку мы собираемся проводить много перекрестной проверки настройки гиперпараметров в форме поиска по сетке и рандомизированного поиска, а также использовать перекрестную проверку K-Fold, гораздо эффективнее иметь вычислительную мощность для обрабатывать эти сложные итеративные вычисления с большой скоростью, а не на вашем локальном компьютере.

После открытия записной книжки клонируйте этот репозиторий из GitHub в записной книжке:

После того, как вы запустите эту ячейку кода, нажав кнопку воспроизведения или удерживая Shift и нажав клавишу ВВОД, введите следующее в следующей ячейке кода.

cd MLNS_BCI_Project/src/cross-val 

После его ввода каталог в вашей среде Colab будет в каталоге cross-val, который находится внутри репозитория GitHub. Этот каталог содержит два файла Python, которые будут очень полезны для выполнения рандомизированного поиска и поиска по сетке для вашего проекта машинного обучения.

Следующим шагом будет получение данных. Поскольку данные слишком велики для размещения в репозитории GitHub, мы собираемся использовать API PyDrive в записной книжке Colab. Чтобы получить PyDrive, введите следующую команду с точкой в ​​следующей ячейке кода.

!pip install PyDrive  

После установки импортируйте следующее:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials

Теперь из этих функций мы будем использовать следующее в следующей ячейке:

auth.authenticate_user()
gauth = GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth) 

Следуйте инструкциям, указанным в выходных данных.

После того, как вы ввели проверочный код, вы прошли аутентификацию для импорта данных с Google Диска в Colab.

Теперь вам нужно получить идентификатор файла для ваших наборов данных. В этом руководстве я уже предоставил идентификаторы для двух файлов CSV, используемых в проекте моей группы, но вот ссылка для процесса получения вашего идентификатора файла для конкретного файла с Google Диска.

В новом типе ячейки кода:

# Getting the csv files from Google Drive 
x_data = drive.CreateFile({'id':"1-s6kpsj5Gvc86FtIrfk_AhlRvVZRi8Mj"}) 
y_data = drive.CreateFile({'id': "1tHrpcAJjUuerjXrDJ1RGNRCmffPtkW33"})
x_data.GetContentFile("merged_labeled_DevAttentionX.csv")
y_data.GetContentFile("merged_labeled_DevAttentionY.csv")

Теперь мы готовы приступить к процессу машинного обучения.

Импортируйте следующее:

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt 
from randomizedSearch import noSGDLogisticRegression 
from sklearn.model_selection import train_test_split 
from sklearn.preprocessing import scale
# reading csv files
neuralFeatures = pd.read_csv("merged_labeled_DevAttentionX.csv") 
classValues = pd.read_csv("merged_labeled_DevAttentionY.csv")

Мы будем использовать первые 120000 выборок из обоих наборов данных. Мы также опустим столбец Безымянный, который возникает в результате экспорта измененного фрейма данных в файл csv.

neuralFeatures = neuralFeatures.loc[0:119999] 
classValues = classValues.loc[0:119999] 
neuralFeatures.drop(list(neuralFeatures.columns)[0], axis=1, inplace=True)
classValues.drop(list(classValues.columns)[0], axis=1, inplace=True)

Теперь мы масштабируем функции, а затем разбиваем наборы данных на наборы для обучения и тестирования.

scaledFeatures = scale(neuralFeatures, axis=0) 
Xtrain, Xtest, Ytrain, Ytest = train_test_split(scaledFeatures, classValues, test_size=0.20, random_state=100)

Теперь мы готовы выполнить рандомизированный поиск. В этом руководстве мы будем использовать функцию NoSGDLogisticRegression, которая выполняет рандомизированный поиск гиперпараметров, определенных в скрипте randomizedSearch.py, а также мы будем выполнять перекрестную проверку StratifiedKFold для каждой итерации выбора рандомизированного поиска назначения гиперпараметров для Модель логистической регрессии.

Чтобы увидеть результаты конфигурации гиперпараметров одной модели, выбранной с помощью рандомизированного поиска, мы установим количество итераций n равным 1, проведем 5-кратную перекрестную проверку этой модели и оценим среднюю точность для 5 складки во время тренировки.

logReg_rsearch = noSGDLogisticRegression(Xtrain, Ytrain, cv=5, n=1)  
print(logReg_rsearch)

Когда рандомизированный поиск завершится, результаты покажут вам среднюю точность по пятикратным значениям и параметрам, выбранным рандомизированным поиском. Конечно, лучше увеличить количество итераций, чтобы потенциально увидеть лучшие результаты настройки гиперпараметров, но именно здесь поиск по сетке обеспечит вам большую уверенность за счет увеличения времени обработки.

Из результатов мы видим, что при рандомизированном поиске было выбрано использование логистической регрессии с регуляризацией l2 и масштабированием перехвата, равным 2, с подходящим перехватом, равным False, что делает масштабирование перехвата бесполезным.

Например, этот рандомизированный поиск оказался не таким эффективным, как можно было бы надеяться, но вы понимаете, что с помощью нескольких строк кода вы можете легко перейти от набора данных на вашем Google Диске к запуску рандомизированного поиска, который вы можете изменить количество итераций и складок для эффективной перекрестной проверки. Аналогичный процесс также применяется к файлу gridSearch.py, и поиск по сетке реализован для тех же моделей, что и рандомизированный поиск, поэтому не стесняйтесь попробовать.

Хотя я не рассматриваю это в этом руководстве, следующим шагом здесь будет запуск единственной модели, которая была признана лучшей в соответствии с вашей стратегией поиска, и запуск на ней StratifiedKFold, чтобы получить эффективную рабочую характеристику приемника ( ROC) и матрица неточностей, которые могут дать вам хорошую оценку компромисса смещения и дисперсии в вашем эксперименте с машинным обучением.

Мое следующее руководство будет посвящено построению этой кривой ROC и матрицы путаницы, а также графика важности характеристик вашей лучшей модели.