Построение вашей первой нейронной сети на основе структурированного набора данных (с использованием Keras)

Вводная часть
Применяли ли вы когда-нибудь модель нейронной сети для структурированного набора данных? Если ответ «нет», то какая из следующих причин применима к Вам?
Это очень сложно применять
Нейронная сеть хороша для неструктурированных наборов данных, таких как изображения, аудио и текст, и не очень хорошо работает со структурированными наборами данных.
Это не так просто, как построить модель с помощью scikit-learn / caret
Время обучения слишком велико
Нейронная сеть требует высокой вычислительной мощности

В этой статье я остановлюсь на первых трех причинах и продемонстрирую, как легко вы можете применить модель нейронной сети к структурированному набору данных, используя популярную библиотеку высокого уровня — «Keras».
***рис***

Понять постановку проблемы
В этой статье мы будем работать с набором данных «Черная пятница». Это регрессионная задача, в которой нам необходимо прогнозировать объем покупок клиента по различным продуктам. Нам предоставили различную информацию о демографии клиентов (age, gender, marital status, city_type, stay_in_current_city) — (возраст, пол, семейное положение, тип города, пребывание в этом городе) и сведения о продукте (продукт id и категория продукта) — (product_id and product category). Ниже приведен словарь данных:
*** рис ***

Метрикой оценки для этой задачи является среднеквадратическая ошибка (RMSE).

Предпосылки
В этой статье я решу проблему «Черной пятницы» с использованием модели Random Forest (RF) с использованием scikit-learn и базовой модели нейронной сети (NN) с использованием keras. Идея этой статьи состоит в том, чтобы показать, как легко мы можем построить модель NN на основе структурированного набора данных (это похоже на построение модели RF с использованием библиотеки scikit-learn). В этой статье предполагается, что у вас есть достаточный опыт создания модели машинного обучения, scikit-learn и основ нейронной сети. Если вы не знакомы с этими концепциями, я бы рекомендовал сначала просмотреть следующие статьи:
— Введение в основы Deep Learning Neural Networks (Глубокое обучение нейронных сетей)
— Понимание и кодирования нейронных сетей с нуля в Python
— Общие алгоритмы машинного обучения

Подход к решению проблемы с использованием машинного (глубокого) обучения
Я собираюсь разделить свой подход в целом на четыре подраздела:
Подготовка данных
Построение модели (Random Forest и Нейронная Сеть)
Оценка
Прогнозирование


Подготовка данных
В этом разделе я сосредоточусь на основных этапах подготовки данных, таких как загрузка набора данных, вложение пропущенных значений, обработка категориальных переменных, нормализация данных и создание набора проверки. Я буду следовать тем же шагам и для Случайного леса, и для нашей модели NN.
*** Рис ***

Загрузка данных: здесь я импортирую необходимые библиотеки для загрузки набора данных, объединяю train и test для совместной предварительной обработки, а также создаю для них флаг.
***КОД***

Вменять пропущенные значения: методы обработки пропущенных значений для категориальных и непрерывных переменных будут разными.
Итак, нашим первым шагом будет определение столбца идентификатора, целевой переменной, категориальных и непрерывных независимых переменных.
После этого мы создадим фиктивные флаги для пропущенных значений. Зачем это делать? Потому что иногда пропущенные значения сами могут нести большое количество информации. Наконец, мы будем вменять отсутствующие значения непрерывных переменных в среднее значение этих столбцов, а для категориальной переменной мы создадим новый уровень.
***КОД***

Обработка категориальных значений: мы создадим кодировщик меток для категориальных переменных.
***КОД***

Нормализация данных: масштабируйте (нормализуйте) независимые переменные от 0 до 1. Это поможет нам сравнительно быстрее сходиться.
***КОД***

Создайте проверочный набор: здесь мы отделим тест поезда от полного набора данных и удалим флаг теста поезда из списка возможностей. При построении нашей модели у нас есть целевые значения только для набора данных поезда, поэтому мы создадим набор проверок из этого набора данных поезда для оценки производительности модели. Здесь я использую train_test_split, чтобы разделить набор данных поезда при обучении и проверке в соотношении 70:30.
***КОД***

Построение модели с использованием случайного леса
Эта часть довольно проста, и я писал об этом несколько раз раньше. Если вы все еще хотите просмотреть алгоритм случайного леса и его параметры, я бы порекомендовал ознакомиться с этой статьей: Учебное пособие по алгоритмам на основе деревьев (Tutorial on Tree Based Algorithms).
***КОД***

Построение модели с использованием модели глубокого обучения (Keras)
Здесь я остановлюсь на этапах построения базовой модели глубокого обучения. Это поможет новичкам в создании собственных моделей в будущем. Шаги, чтобы сделать это:
***Рис***

Определить модель: для построения модели глубокого обучения нам нужно определить слои (входной, скрытый и выходной). Здесь мы продолжим работу с последовательной моделью, что означает, что мы будем определять слои последовательно. Кроме того, мы продолжим работу с полностью подключенной сетью.
1. Сначала мы сосредоточимся на определении входного слоя . Это можно указать при создании первого слоя с входным аргументом dim и установке его в 11 для 11 независимых переменных.
2. Затем определите количество скрытых слоев.наряду с количеством нейронов и функций активации. Нужное число можно получить, пройдя несколько итераций. Чем выше число, тем сложнее ваша модель. Для начала я просто использую два скрытых слоя. У одного есть 100 нейронов, а у другого — 50 с той же функцией активации — «relu».
3. Наконец, нам нужно определить выходной слой с 1 нейроном, чтобы предсказать сумму покупки. Проблема в данном случае — это регрессионная задача, поэтому мы можем продолжить линейное преобразование на выходном слое. Следовательно, нет необходимости упоминать какую-либо функцию активации (по умолчанию она является линейной).
***КОД***

***Рис***
***Рис***
Скомпилируйте модель. На этом этапе мы настроим модель для обучения. Мы установим оптимизатор для изменения весов и смещений, а также функции потерь и метрики для оценки производительности модели. Здесь мы будем использовать «adam» в качестве оптимизатора, «среднеквадратичную ошибку» в качестве показателя потерь. В зависимости от типа проблемы, которую мы решаем, мы можем изменить наши потери и показатели. Для бинарной классификации мы используем «бинарную кроссцентропию» в качестве функции потерь.

Подгонка модели: теперь последний шаг построения модели — это подгонка модели к набору обучающих данных (который на самом деле составляет 70% от полного набора данных). Нам нужно предоставить как независимые, так и зависимые переменные, а также количество обучающих итераций, т.е. эпох. Здесь мы взяли 10 эпох.
***КОД***

***Рис***
оценка
Теперь, когда мы построили модель с использованием методов случайного леса и нейронной сети, следующим шагом будет оценка производительности набора данных проверки для обеих моделей.
Оценка для модели случайного леса: мы получим прогнозы для набора данных проверки и проведем оценку с фактическими целевыми значениями (y_valid). Мы получаем среднеквадратичную ошибку как ~ 3106.
***КОД***

Оценка для модели нейронной сети: аналогичным образом, мы получим прогнозы для набора данных проверки с использованием модели нейронной сети и вычислим среднеквадратичную ошибку. RMSE с базовой моделью NN составляет ~ 4214. Это довольно базовая модель, вы можете пойти дальше и настроить гиперпараметры для построения более сложной сети. Вы можете передать данные валидации в качестве аргумента при подборе NN-модели, чтобы посмотреть оценку валидации после каждой эпохи.
***КОД***

прогнозирование
После оценки модели и окончательной доработки параметров модели мы можем продолжить прогнозирование данных испытаний. Ниже приведен код для этого с использованием моделей случайного леса и NN.
***КОД***

Что дальше
Идея этой статьи состояла в том, чтобы показать, насколько легко мы можем построить модель NN на основе структурированного набора данных, чтобы мы не сосредоточились на других аспектах улучшения предсказаний модели. Ниже приведен мой список идей, которые вы можете применить для построения нейронной сети:
Вменять пропущенные значения после просмотра отношения переменной к переменной
Feature Engineering (идентификаторы продуктов могут содержать некоторую информацию о сумме покупки)
Выберите правильные гиперпараметры
Создайте более сложную сеть, добавив больше скрытых слоев
Используйте регуляризацию
Тренируйся на большее количество эпох
Возьмите ансамбль РФ с моделью NN

Резюме
В этой статье мы обсудили различные этапы построения модели, такие как подготовка данных, построение модели, оценка и, наконец, прогнозирование. Мы также рассмотрели, как мы можем применить модель нейронной сети к структурированному набору данных, используя керасы.
Далее мы узнали о различных этапах построения модели в кератах, таких как определение, компиляция и подгонка модели. Производительность простой модели NN была впечатляющей, и мы можем улучшить ее, превратив ее в более сложную сеть. В следующей статье мы рассмотрим, как мы можем применить модель RNN к задаче временного ряда.

Источник: https://medium.com/analytics-vidhya/build-your-first-neural-network-model-on-a-structured-dataset-using-keras-d9e7de5c6724

Оставить комментарий

avatar
  Подписаться  
Уведомление о