Автоэнкодер был не тем, с которого я начал свой опыт работы с искусственными нейронными сетями; однако это было первое, что меня смутило. «Зачем людям пытаться обучать сеть с одними и теми же входами и выходами?» Я почти уверен, что некоторые люди могли думать так же, как и я, только до тех пор, пока они не узнали, насколько креативен и полезен автоэнкодер.

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

В этом посте я хотел бы увидеть, как мы можем использовать кодировщик и скрытый слой для уменьшения размерности и выполнять кластеризацию на основе ее результатов в Keras и Scikit-learn. Кроме того, я бы также построил нейронную сеть, которая классифицирует данные по различным группам в зависимости от результатов кластеризации. Поскольку существует множество хороших примеров неконтролируемого обучения с автокодировщиками, особенно с MNIST или подобными наборами данных изображений, я решил использовать в этом случае пример без изображения. В набор данных включена статистика активных футболистов английской премьер-лиги (EPL) сезона 2019/20.

Исследование и предварительная обработка данных

Прежде чем перейти к моделированию, я хотел бы вкратце пояснить свои данные. Данные анализируются непосредственно из раздела Статистика на странице игроков на официальном сайте EPL с использованием Selenium и BeautifulSoup на python. Все данные числовые (например, количество матчей, голы и передачи), за исключением имен игроков и их позиций.

Были отобраны только игроки, входящие в состав на сезон 2019/20, и будет использоваться их карьерная статистика. Игроки, не сыгравшие в карьере 0, были исключены, даже если они включены в сезонный состав. Кроме того, вратари были удалены из набора данных, потому что их показатели отличаются от показателей других игроков позиции. Выполняя обучение без учителя на числовых данных набора данных, я хотел бы увидеть, можно ли разделить игроков на разные группы. Если окажется, что можно сгруппировать игроков по трем различным позициям, таким как нападающий, полузащитник и защитник, только с помощью их числовой статистики, это можно будет в дальнейшем использовать для визуализации различных числовых моделей игроков с разных позиций. Его также можно использовать для прогнозирования или поиска игроков с похожими шаблонами в будущем.

Обучение автоэнкодеру

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

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

Основываясь на этой идее, вот примеры того, как я построил автоэнкодер:

Кластеризация и визуализация с t-SNE

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

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

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

Вот несколько обзоров каждого кластера (здесь он называется «класс»). Конечно, на результат кластеризации могла повлиять и другая статистика, но я произвольно выбрал три статистики для сравнения каждого класса - среднее количество появлений, побед и поражений. Перед запуском этой задачи я предполагал, что в каждом кластере игроки будут иметь одинаковые шаблоны, такие как позиции или связанные статистические данные о соотношении, которые могут быть голами за матч. Все закончилось не так; однако есть несколько классов с интересными результатами.

  • Класс 1: состоит из защитников и полузащитников, которые обычно играют оборонительные роли, за исключением Питера Крауча. Он был единственным нападающим в этом классе.

  • Класс 4: состоит из защитников, которые являются (или были) основным членом Первой команды. Все они сыграли более 100 матчей за свою карьеру в АПЛ.

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

Классификация

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

Предполагая, что класс, определенный результатом модели кластеризации, является достоверным, новая модель классификации имеет точность предсказания теста 59,29%.

Заключение

Я представил один из простейших способов выполнить неконтролируемую кластеризацию, а также построить модель классификации на основе результата кластеризации. Модель классификации, не дающая впечатляющих результатов предсказания тестов, заставила меня задуматься о возможных улучшениях. Используя большее количество наборов данных (возможно, включая данные из других сезонов EPL), можно попытаться нормализовать входные данные перед обучением и изменить структуру нейронной сети для улучшения моделей. Тем не менее, идея использования нелинейной активации в автокодировщике может предлагать различные варианты уменьшения размерности, отличные от линейных методов, таких как PCA и LDA.

Спасибо за то, что прочитали мой пост. Вот ссылки и несколько полезных ссылок:

[1] Исследование данных с помощью состязательных автоэнкодеров Дэнни Янца в книге На пути к науке о данных
[2] Создание автоэнкодеров в Керасе Франсуа Шолле в Керасе Блог
[3] Как сделать неконтролируемую кластеризацию с помощью Keras Ченгвэй в DLology
[4] ван дер Маатен, LJP и Хинтон, GE Визуализация данных используя t-SNE . Journal of Machine Learning Research, Том 9, (ноябрь), стр. 2579–2605.
[5] Хинтон, Г.Е. и Салахутдинов Р.Р. Уменьшение размерности данных с помощью нейронные сети. Science, Vol. 313 нет. 5786, pp. 504–507, 28 июля 2006 г.