Машинное обучение играет важную роль для ученых в понимании взаимосвязи между определенными видами деятельности мозга, связанными с некоторыми природными явлениями. Поиск ключа к закодированной мозговой деятельности с использованием необработанных сигналов становится критически важным, и именно тогда машинное обучение начинает действовать. Нейробиологи часто используют для своего анализа модели машинного обучения и глубокого обучения. Но иногда бывает очень сложно выбрать правильный порядок для нашей модели. Такие проблемы, как недостаточная и чрезмерная подгонка, были постоянной проблемой для Data Scientist, и были найдены различные решения. Честно говоря, не существует особого подхода к решению этой неоднозначности, все зависит от сложности модели и характеристик компромисса смещения и дисперсии. Мы можем получить представление о том, как выбрать лучшую модель для заданного набора данных, используя эксперименты и исследования, описанные ниже.

Загрузка набора данных:

Нейроны - это строительные блоки мозга. Они отвечают за получение сенсорных действий из внешнего мира. Процесс коммуникации между нейронами посредством шипов или потенциала действия, который приводит к быстрому изменению напряжения в активности нейрона. Данные, используемые для этого анализа, взяты из этого Журнала. Спайки в этом эксперименте были зарегистрированы для 196 нейронов в первичной моторной коре (M1) обезьяны с электродной решеткой, имплантированной через поверхность мозга. Данные записывались для различных задач по вытягиванию и движения руки обезьяны, то есть также записывалась скорость руки в направлении x и скорость в направлении y. Хотя иногда необработанные мозговые сигналы очень трудно прочитать, а могут быть очень большими, но благодаря удивительным усилиям команды Kording Lab в UPenn. Они создали удивительное хранилище с предварительно обработанными сигналами мозга. Доступ к файлу данных example_data_s1.pickle можно получить, используя ссылку Dropbox. Мы можем получить доступ к данным напрямую, используя следующую команду:

!wget 'https://www.dropbox.com/sh/n4924ipcfjqc0t6/AADOv9JYMUBK1tlg9P71gSSra/example_data_s1.pickle?dl=1' -O example_data_s1.pickle

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

Изучение данных:

Этот файл представляет собой структуру данных pickle, которая использует пакет Python pickle для сериализации объектов Python в файлы данных. После того, как вы загрузили файл, вы можете запустить следующую команду, чтобы получить данные из файла pickle.

with open('example_data_s1.pickle', 'rb') as fp:
X,y = pickle.load(fp)

Данные здесь будут сигналами, зависящими от времени, и позже для их эффективного использования потребуется обработка. Матрица X - это матрица количества импульсов от разных нейронов, где X[i,j] - количество импульсов от нейрона j во временном интервале i.

Матрица y имеет два столбца:

  • y[i,0] = скорость руки обезьяны в x-направлении
  • y[i,1] = скорость руки обезьяны в направлении y. Наша цель - предсказать y из X.

Каждый временной интервал представляет tsamp=0.05 секунд времени. Используя X.shape и y.shape, мы можем вычислить и распечатать:

  • nt = общее количество временных интервалов
  • nneuron = общее количество нейронов
  • nout = общее количество выходных переменных для отслеживания = количество столбцов в y
  • ttotal = общее время эксперимента составляет секунды.

Используйте следующий код, чтобы найти значение каждого параметра.

Чтобы визуализировать данные мозга за несколько минут, мы можем использовать следующий код:

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

Подбираем простую линейную модель:

Сначала мы выбираем линейную модель, чтобы уменьшить зависимость функций. Сначала мы разделяем данные на обучающие и тестовые с помощью train_test_split. Значение по умолчанию для аргумента перемешивания в train_test_split - «Истина». Для нашего анализа у нас есть данные временных рядов, и перетасовка данных временных рядов не рекомендуется, поскольку мы теряем целостность данных, а также истинный характер данных. Нам нужно установить shuffle = False. Давайте создадим наш обучающий и тестовый набор с test_size=0.33. Теперь примените линейную регрессию к обучающим данным Xtr,ytr. Сделайте прогноз yhat, используя тестовые данные, Xts. Сравните yhat с yts, чтобы измерить rsq, значение R2. Для этого мы можем использовать метод r2_score. После выполнения вышеуказанных шагов мы можем увидеть, как предсказанное значение направления X ведет себя с исходным значением направления X, то же самое можно сделать и для y.

Примерка модели с опозданием:

Поскольку очевидно, что простая линейная модель - не лучший выбор, можно повысить точность, добавив в модель больше функций. Для этого мы можем использовать модель с задержкой. Чтобы смоделировать этот эффект, мы добавляем дополнительные функции к каждой строке данных, представляющие количество импульсов каждого нейрона в предыдущей строке. Затем выходной сигнал в момент времени i будет смоделирован как эффект срабатывания нейронов во время i и эффект срабатывания нейронов во время i-1. Выполните следующие действия, чтобы создать модель с задержкой:

Теперь мы подбираем линейную модель с задержкой с задержкой dly=2. То есть,

  • Создать отложенные данные Xdly,ydly=create_dly_data(X,y,dly=2)
  • Разделите данные на обучение и тестирование, как раньше
  • Подобрать модель на тренировочных данных
  • Измерьте результат R^2 на тестовых данных.

Как мы видим, мы получаем лучшую точность и более высокий балл R2, просто добавляя несколько функций. Теперь осталось выбрать модель с оптимальной задержкой. Для этого мы реализуем кросс-валидацию K-Fold.

Выбор оптимальной задержки с K-кратным CV:

Ранее мы использовали задержку (dly = 2), но, безусловно, мы можем улучшить модель, используя K-кратное CV. Поскольку выборка огромна, мы можем рассмотреть только 10% точек выборки для нашего анализа. Мы вычислим Xred и yred, взяв первые nred=6000 выборок данных X и y. После этого будем рассматривать при заказе моделей до dmax=15. Мы создадим матрицу отложенных данных, Xdly,ydly, используя create_dly_data с сокращенными данными Xred,yred и dly=dmax. Мы собираемся использовать K-кратное CV с nfold=10, чтобы найти оптимальную задержку для всех значений задержки в dtest_list.

Теперь мы вычисляем среднее значение и стандартную ошибку значений R2 для каждой модели (каждое значение задержки) и строим график как функцию задержки. Мы можем использовать график 45_. После этого мы вычисляем задержку, которая имеет наивысшую проверку R2, и строим ее.

Заключение:

Применение машинного обучения широко распространено, будь то простые рекламные данные или сложные нейронные сигналы. Таким образом, с помощью приведенного выше анализа мы можем сказать, что добавление дополнительных функций к заданным выборочным данным может помочь нам повысить точность модели. С помощью функции задержки мы смогли создать важные функции из данного набора данных, это очень важно для оценки временных рядов, поскольку мы называем системы без памяти в области обработки сигналов. Введение задержки во временную последовательность помогает нам воспроизвести один и тот же сигнал, а также расширить функции для большей точности модели. Мы рассчитали значение R2 и заметили, что чем ближе значение R2 к единице, тем выше точность модели. В конце концов, чтобы получить оптимальную задержку, мы использовали K-кратную CV и обнаружили, что модель лучше всего работает при order = 7.

Ссылка: