Когда я впервые начал изучать машинное обучение, я начал с набора данных, такого как MNIST, который позволяет мне воспроизводить результат с помощью современных алгоритмов. Иногда это заставляет меня чувствовать себя слишком хорошо, чтобы быть правдой, потому что входные данные очень чистые, данные очень сбалансированы и распределение согласовано между обучающими и тестовыми наборами. Однако на самом деле мы вряд ли можем встретить столь совершенные данные; не говоря уже о том, чтобы напрямую подключить алгоритм из справочного документа.
Kaggle, с другой стороны, обеспечивает отличный переход от идеальности к реальности для всех специалистов по данным. Проблема, размещенная там, имеет хорошие определения, но с большими или меньшими трудностями и, как правило, без современных решений. Во время конкурса участники могли учиться у других посредством обсуждений и обмена записными книжками.
Kaggle подходит тем, кто
- Начните изучать мир науки о данных, но хотите учиться.
- Имеете достаточный опыт в области интеллектуального анализа данных и машинного обучения и хотите улучшить свои навыки.
- Хотите выиграть денежный приз и поставить достижение в свое резюме.
Конкуренция
Чтобы упростить задачу, давайте сначала рассмотрим несколько концепций:
- Возможности: также называются независимыми переменными. Их можно наблюдать или строить из выборочных данных, и обычно они являются исходными данными для моделей.
- Ярлык: также называется целевой переменной. Обычно они являются результатом моделей.
- Данные обучения: набор данных, предоставленный спонсором с известным ярлыком.
- Тестовые данные: набор данных, также предоставленный спонсором, с неизвестным ярлыком. Они используются для оценки конечной производительности.
- Обучающий набор: подмножество, извлеченное из обучающих данных. Участники могут использовать это для калибровки своей модели.
- Действительный набор: подмножество, извлеченное из данных обучения. Участники могут использовать это для проверки своей модели.
Шаг за шагом
1. Оцените проблему
Первым делом нам нужно преобразовать существующую проблему в проблему машинного обучения. В соревнованиях Kaggle наиболее частыми проблемами являются:
- Проблема регрессии: прогнозирование непрерывной величины.
- Проблема классификации: прогнозирование дискретной метки (бинарные группы и классификации с несколькими метками).
2. Исследование данных
Очень важно вникнуть в данные и выяснить, какую ценность мы ищем. На протяжении всего исследования нам нужно думать над следующими вопросами:
- Как лучше всего очистить данные?
- Какие типы объектов можно было извлечь?
- Какие функции потенциально могут быть полезны для прогнозирования ярлыков?
2.1 Статистическая сводка
Что касается числовых переменных, мы можем легко оценить статистику (мин / макс / средний / средний / стандарт) с помощью панд.
Из вышеприведенного вывода мы можем проверить, сбалансирован ли Метка для задачи классификации (или насколько распределение метки похоже на задачу регрессии). Мы также можем проверить корреляционную матрицу среди различных числовых переменных.
2.2 Визуализация
В большинстве случаев мы можем получить интуитивное представление о статистике с помощью графиков.
Или просто постройте корреляционную матрицу с помощью matplotlib и seaborn. Вы можете пропустить этот шаг, если не находите визуализацию настолько полезной :)
3. Предварительная обработка данных
В большинстве данных, предоставляемых Kaggle, много шума, а иногда и информации не хватает. Поэтому для Kagglers очень важно тратить время на очистку данных.
- Для числовых переменных нам нужно обработать пропущенное значение и выбросы.
- Для категориальных переменных мы можем преобразовать их с помощью горячего кодирования.
- Для текстовых данных нам нужно обрабатывать множество случаев, таких как опечатки, математические формулы, типы даты / времени, а также знаки препинания.
4. Разработка функций
Известно, что данные и извлеченные функции определяют верхний предел машинного обучения. Чтобы достичь удовлетворительного результата, нам необходимо изучить данные и извлечь разумные особенности из необработанных данных.
4.1 Извлечение функций
Нам нужно извлечь как можно больше функций. Это, наверное, самая трудоемкая часть на протяжении всего соревнования. Если вы считаете, что какая-то функция может быть полезна для решения проблемы, ее следует извлечь и протестировать с помощью модели. Это ключ к победе и, безусловно, стоит потраченного времени.
Итак, как мы можем извлечь функции? В Kaggle это довольно удобно, потому что вы можете найти множество блокнотов, которыми пользуются другие Kagglers. Есть несколько способов, которые могут помочь вам начать работу:
- Для числовой переменной мы можем попробовать использовать линейную комбинацию, чтобы обнаружить новые функции.
- Для текстовых данных есть несколько типичных функций, таких как длина текста, вложения, TF-IDF, LDA или даже скрытые переменные из фреймворка глубокого обучения.
- Новые функции также можно обнаружить путем анализа ошибок.
4.2 Выбор функций
Во время извлечения функций мы стараемся извлечь как можно больше функций. Но слишком много функций приведет к переобучению и избыточности. Использование выбора функций может помочь ускорить обучение модели, а иногда даже повысить эффективность.
Есть много разных способов сделать выбор. Чаще всего используется коэффициент корреляции, который находится в диапазоне от -1 до 1 и используется для описания линейной зависимости между двумя переменными.
Матрица коэффициентов корреляции является симметричной матрицей, поэтому нам нужно только обратить внимание на верхний правый или нижний левый треугольник. Есть две основные части:
i) Чем выше корреляция между функцией и меткой, тем важнее эта функция. В этом смысле Feature1 более важен, чем функция 2 из приведенной выше диаграммы.
ii) Чем ниже корреляция между функциями, тем лучше. Если есть две функции, которые имеют высокую корреляцию, это может означать, что у нас есть избыточность в извлеченных функциях.
Кроме того, мы также можем обучать модели выполнять выбор функций, например линейные модели со штрафом L1 и случайным лесом.
5. Моделирование
Наконец-то! Здесь мы подошли к основному этапу машинного обучения. В этом разделе мы собираемся выбрать подходящий инструмент, чтобы собрать все воедино.
5.1 Часто используемые модели
Существуют разные типы моделей машинного обучения. Если позволяет время, мы, вероятно, должны попробовать их все и получить некоторое представление о методах. Распространенные модели:
- Линейная модель (со штрафом)
- "Нейронная сеть"
К счастью, эти модели уже существуют в виде четко определенных пакетов (например, scikit-learn, XGBoost, LightGBM) и готовы к использованию. Но пользователям настоятельно рекомендуется понять принципы, прежде чем начинать настройку гиперпараметров.
5.2 Анализ ошибок
Идеальной модели не существует. Чтобы понять, что пошло не так, мы можем изучить образец, показывающий, что модель не работает должным образом, и суммировать общие черты, которые могут позволить нам обучить лучшую модель. Это немного похоже на буст в ансамбле. Но разница в том, что мы можем сделать это человеком.
5.3 Настройка гиперпараметров
Перед обучением модели нам нужно будет настроить гиперпараметры (например, максимальную глубину случайных лесов или скорость обучения при градиентном спуске). Подобрать оптимальные параметры довольно сложно. Тем не менее, такие правила можно обобщить из опыта согласно Эндрю Нгу из курса Deep Learning, предлагаемого deepingLearning.ai:
- Выберите гиперпараметры, которые больше влияют на производительность модели.
- Выберите пространство поиска для каждого отдельного параметра
- Выберите алгоритм поиска, например Случайный поиск или Поиск по сетке.
5.4 Проверка
Когда метки тестовых данных неизвестны, нам нужно будет построить набор проверки, чтобы мы могли оценить обученную модель. Наивный способ построения состоит в том, чтобы разделить данные поезда на набор для обучения модели и набор для проверки для проверки модели. Очевидно, что у этого метода есть некоторые проблемы, поскольку он не использует все данные обучения. Если размер данных поезда не вызывает беспокойства, большинство исследователей предпочли бы вместо этого использовать перекрестную проверку.
Перекрестная проверка - это процедура повторной выборки, которую можно использовать для оценки машинного обучения на ограниченной выборке данных. Он разбивает весь набор данных на K групп (выбор K обычно составляет от 4 до 10). Каждый раз мы оставляем одну в качестве тестового набора, а остальные группы K-1 используем в качестве обучающей выборки для обучения модели. Затем мы вычислим среднее значение и стандартное отклонение моделей K, чтобы оценить качество модели.
Вышеупомянутый процесс называется K-складывание. Если метка данных не сбалансирована для каждого набора, мы можем рассмотреть возможность использования Стратифицированного K-кратного, чтобы сохранить соотношение меток как в обучающем, так и в проверочном наборе.
6. Ансамбль
Если особенности определяют верхний предел модели, ансамбль, вероятно, является приближением к этому пределу.
Распространенные способы ансамбля: упаковка, усиление, укладка и смешивание. Мы расскажем о них в отдельной статье (см. Ниже).
7. Последующий анализ
Иногда, когда мы можем подтвердить отсутствие переобучения и увидеть разумный хороший результат перекрестной проверки, мы не можем получить такой хороший результат от тестов. Для этих сценариев возможно, что обучающая выборка имеет совсем другое распределение, чем тестовая. Чтобы улучшить результат, нам необходимо скорректировать распределение результатов тестирования.
Спасибо за прочтение!
Если вам понравилось, подпишитесь на меня на Medium, чтобы узнать больше. Это отличное кардио для 👏 И поможет другим людям увидеть историю.
Если вы хотите и дальше получать этот тип статей, вы можете поддержать меня, став Средним подписчиком. Это стоит 5 долларов в месяц. Мне достается часть вашей абонентской платы .