Пример применения AutoEncoder к табличным данным

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

Я смутно помню, что было одно соревнование Kaggle, в котором первое призовое решение использовало автоэнкодер для уменьшения размерности. Итак, в этом посте давайте немного поговорим об автокодировщике и о том, как применить его к общим табличным данным. Структура следующая:

  1. Просмотрите быстрый пример, чтобы понять концепцию автоэнкодера.
  2. Применить автоэнкодер к данным о соревнованиях

Отличный пример автоэнкодера

Здесь есть отличное объяснение автоэнкодера. Давайте начнем с самого простого примера, иллюстрирующего работу автокодировщика, а затем применим его к общему варианту использования данных о соревнованиях.

Самый фундаментальный автоэнкодер имеет следующую структуру:

Обратите внимание, что вход и выход имеют одинаковое количество измерений (фактически, вход используется как «метка» для выхода), а скрытый слой имеет меньшие размеры, поэтому он содержит сжатую информацию входного слоя, поэтому он действует как уменьшение размера исходного ввода. Из скрытого слоя нейронная сеть может декодировать информацию до исходных размеров. From input_layer -> hidden_layer называется кодированием, а hidden_layer -> output_layer называется декодированием.

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

Автоэнкодеры изучаются автоматически из примеров данных, что является полезным свойством: это означает, что легко обучить специализированные экземпляры алгоритма, которые будут хорошо работать с определенным типом входных данных. Это не требует никаких новых разработок, только соответствующие данные для обучения.

Давайте рассмотрим пример, чтобы понять механизм автоэнкодера.

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

Постройте сеть

Пример взят из Keras Blog.

Наша сеть проста: входное изображение размером 784 пройдет через плотный слой и будет закодировано в размер 32, из которого слой декодирования восстановится до исходного размера с размером 784. Структура очень проста:

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

Подготовить набор данных и обучение

Данные нормализуются до 0 и 1 и передаются в наш автоэнкодер. Обратите внимание, что и вход, и выход x_train, идея состоит в том, что мы надеемся, что наш закодированный слой будет достаточно сочным, чтобы восстановить как можно больше информации.

Визуализируйте результат

Исходное изображение сравнивается с изображением, восстановленным из нашего закодированного слоя.

Обратите внимание на то, что наш скрытый слой 32-го измерения может восстанавливать изображение 784-го измерения и достаточно хорошо улавливать информацию.

Теперь давайте применим эту технику уменьшения размеров к набору данных о соревнованиях.

Автоэнкодер табличных данных

В посте здесь мы применили некоторые общие техники проектирования признаков и сгенерировали более 170 функций на наборе данных. Попробуем уменьшить его размер.

Мы разделяем данные на обучение и проверку, и обучающие данные выглядят следующим образом с 171 столбцом:

Теперь используем ту же технику и уменьшаем размерность до 40,

encoder будет использоваться позже для уменьшения размеров.

Теперь давайте применим прогноз к уменьшенным размерам,

Для сравнения, мы по-прежнему применяли lightgbm для прогнозирования и получили результат 0,595 только с 40 функциями, тогда как ранее 0,57 с 171 характеристикой. Хотя модель с уменьшенной размерностью не превосходит предыдущую, я считаю, что мы видим преимущества автоэнкодера. ("код")

Заключение

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

Еще одно преимущество автоэнкодера в конкурентной борьбе заключается в том, что можно построить автоэнкодер на основе как данных обучения, так и данных тестирования, что означает, что закодированный слой также будет содержать информацию из данных тестирования! В сообщении, которое я прочитал о решении за первый приз на конкурсе Kaggle, использовался шумоподавляющий автоэнкодер путем добавления некоторого шума к исходным функциям, чтобы сделать его сеть более надежной, в то же время он также использовал данные тестирования в своей модели, которые, как я полагаю, также вносят свой вклад. к его победе.

Ссылка:

[1] https://blog.keras.io/building-autoencoders-in-keras.html