Серия Tabular Playground - октябрь 2021 г.

Kaggle - известная платформа для соревнований по машинному обучению и обучения. Соревнования по kaggle довольно обширны, и люди тратят много времени на разработку выигрышной стратегии.

Я до сих пор помню, как один из моих наставников стал мастером набора данных, и я познакомился с kaggle. Однако я не смог изучить Kaggle из-за моей докторской степени. работа и постоянная работа. Пока не наступил октябрь… ..

Серия Tabular Playground - октябрь 2021 г.

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

Набор данных о соревнованиях

Октябрьское соревнование Табличная игровая площадка имело синтетический набор данных, созданный с использованием условной GAN. Он имитировал набор данных о биологических реакциях с учетом химических свойств. Набор функций был обширен, и все функции были анонимными. Переменные отражают свойства реальных объектов. Столбцы были разделены на непрерывные и двоичные функции, и задача заключалась в том, чтобы предсказать двоичный класс с лучшим показателем AUC.

Обучение 101 - 1 миллион строк

Данные для обучения были огромными и занимали около 2,32 ГБ. Количество строк составляло около 1000000. Использовать такой объем данных для построения базовой модели было непросто. Итак, первый урок, который я усвоил, заключался в том, чтобы минимизировать количество строк для базовой модели или начального исследования данных. Очень полезное обсуждение этой части провел один из участников kaggle.

train_data = pd.read_csv('train.csv', nrows=100000)

Обучение 101 - Уменьшение памяти

Как описано ранее, обучающих данных было много, и в большинстве случаев записные книжки kaggle сталкивались с ошибками нехватки памяти. Следующим был очень простой трюк: уменьшить размер функций перед их использованием. В соревнованиях есть разные коды, но наиболее интересным и быстрым было использование datatable. Вот ссылка на код.

import datatable as dt
df = dt.Frame(df)
for i,col in enumerate(df):
    if col.type.name == 'float64':
        df[:,i] = dt.as_type(col,'float32')
df = df.to_pandas()

Обучение 101 - Выбор функций

Большинство соревнований по kaggle выигрывают с помощью двух разных подходов: разработка функций и глубокие нейронные сети. Выбор функций - лучший подход, если вы разбираетесь в данных. Первым шагом является сбор данных и использование различных графиков для детального изучения данных. В случае нашего табличного конкурса игровых площадок данные были анонимными. Однако первоначальное исследование показало, что существует странная особенность с очень высокой корреляцией с целевой переменной. Двоичный объект «f22» имел высокую корреляцию по сравнению с другими двоичными функциями. Коэффициент корреляции Пирсона и Спирмена составил 0,51.

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

Обучение 101 - Разработка функций

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

Обучение 101 - Моделирование

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

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

Следующим шагом было использование разных складок для обучения моей модели. Были использованы различные складки со стратифицированной выборкой, и я выбрал семикратную, поскольку производительность модели при этом количестве становилась немного лучше. Наилучший показатель AUC, достигнутый моей моделью, составляет 0,85647. Сейчас я планирую использовать ансамбль моделей, включая модели CatBoost, XGBoost и LighGBM.

Заключение

Табличные соревнования по игровым площадкам еще продолжаются, и я нахожусь в числе 18% лучших участников. Соревнование закончится через пару дней, и в частной таблице лидеров будет указано наше текущее положение. Но настоящая суть kaggle - это процесс обучения, и если вы застряли где-то в соревновании, опубликуйте свою проблему и посмотрите код, созданный другими.

До следующего раза, Happy kaggling… ..