Использование, тестирование и сравнение нескольких моделей машинного обучения

Теперь, когда мы успешно выполнили жесткую частичную очистку и обработку данных каждого проекта в области науки о данных, мы перейдем к самой интересной части - моделированию!

Хотя эта статья может быть самостоятельной, рекомендуется сначала прочитать часть 1 и часть 2.

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

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

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

Сохраните .0001 прирост производительности для ваших соревнований по машинному обучению, потому что большую часть времени в реальном мире эти незначительные различия не имеют большого значения, потому что нам нужны более простые интерпретируемые модели.

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

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

Мы создаем функцию перекрестной проверки, как показано ниже.

ДЛЯ ЗАДАЧИ РЕГРЕССИИ НАЧНИТЕ С ПРОСТОЙ ЛИНЕЙНОЙ РЕГРЕССИИ

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

Что мы можем настроить

Линейная регрессия проста и поэтому не требует настройки большого количества параметров. Поэтому мы просто используем параметры по умолчанию.

MAE Sccore:  0.42615411746170206

ИСПОЛЬЗОВАНИЕ ДЕРЕВА РЕШЕНИЙ

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

Что мы можем настроить

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

  1. max_depth: параметр max_depth указывает, насколько глубоким может быть дерево. Чем глубже дерево, тем сложнее становится модель и тем выше она может собрать больше информации о данных. Если ваша модель слишком проста, попробуйте увеличить max_depth и наоборот.
  2. min_samples_leaf: это минимальное количество выборок, которое требуется для конечного узла. Большее количество створок приводит к упрощению модели и может помочь в переобучении, тогда как меньшее количество может привести к недообучению.
  3. min_samples_split: это минимальное количество выборок, необходимое для разделения внутреннего узла. Увеличение этого параметра приводит к более простой / ограниченной модели.
  4. max_features: это количество функций, которые учитывает модель перед разделением узла.
MAE Sccore:  0.4280371717119684

ИСПОЛЬЗОВАНИЕ K-NEAREST NEIGHBOR

Затем мы пробуем популярный алгоритм, основанный на расстоянии, который называется k-ближайший сосед.

Что мы можем настроить

KNN содержит несколько гиперпараметров. Наиболее важные из них для настройки:

  1. n_neighbors: количество соседей, используемых при голосовании. Чем выше число, тем точнее он становится (хотя иногда), но за счет скорости.
MAE Sccore:  0.431624658307474

Глядя на оценку MAE (средняя абсолютная ошибка) простых моделей, мы видим, что дерево решений на данный момент является лучшим. Это будет наша базовая модель. Любая модель, которая работает лучше, становится следующей базовой линией, которую нужно превзойти.

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

Ниже мы воспользуемся популярным ансамблевым методом и сравним их эффективность.

АЛГОРИТМЫ БЕГА

СЛУЧАЙНЫЙ ЛЕС

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

Что мы можем настроить

Случайный лес может содержать гиперпараметры, но наиболее важными из них являются:

  1. n_estimators: количество создаваемых деревьев решений. Как мы можем догадаться, большее количество деревьев приведет к получению лучшей модели, но за счет более длительного времени обучения.
  2. max_depths: максимальная глубина отдельных деревьев. Чем больше число, тем проще деревья и, следовательно, более простой ансамбль случайных лесов.
  3. max_features: определяет максимальное количество функций, разрешенных для разделения.
  4. min_samples_split: это минимальное количество выборок, необходимое в листовом узле перед разделением.
MAE Sccore:  0.41512597643232896

ДОПОЛНИТЕЛЬНЫЕ ДЕРЕВЬЯ

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

Что мы можем настроить

Extra Trees содержит гиперпараметр, аналогичный Random Forest. Важные параметры для настройки:

  1. n_estimators: количество создаваемых деревьев решений. Как мы можем догадаться, большее количество деревьев приведет к получению лучшей модели, но за счет более длительного времени обучения.
  2. max_depths: максимальная глубина отдельных деревьев. Чем больше число, тем проще деревья и, следовательно, более простой ансамбль случайных лесов.
  3. max_features: определяет максимальное количество функций, разрешенных для разделения.
  4. min_samples_split: это минимальное количество выборок, необходимое в листовом узле перед разделением.
MAE Sccore:  0.4131678014407999

БАГГИНГ МЕТА-ОЦЕНКА

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

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. base_estimator: это оценщик, используемый при выполнении упаковки. Мета-оценщик пакетов строит несколько моделей на основе указанного базового оценщика.
  2. n_estimators: количество создаваемых базовых оценок. Чем больше количество оценщиков, тем лучше модель, но также и за счет более длительного времени обучения.
  3. max_samples: определяет максимальное количество выборок для обучения каждого базового оценщика.
  4. max_features: это максимальное количество функций, которые можно извлечь из набора данных при обучении каждой базовой оценки.
MAE Sccore:  0.4045400489482442

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

Затем давайте попробуем несколько алгоритмов повышения.

УСИЛЕНИЕ АЛГОРИТМОВ

Бустинг - еще один популярный и эффективный прием ансамбля. В Boosting несколько моделей обучаются последовательно. Цель состоит в том, чтобы обучать моделей, которые работают лучше своих предшественников. Это означает, что мы должны учитывать области, в которых предыдущие модели работали плохо, и улучшать эти области.

ADABOOST

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

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. n_estimators: количество используемых базовых оценок. Более высокое значение обычно дает лучшую производительность.
  2. Learning_rate: этот параметр управляет обновлением тренировочного веса. Обычно настраивается вместе с n_estimators. Популярное практическое правило гласит: «Когда вы увеличиваете n_estimator в 10 раз, вы также уменьшаете скорость обучения в 10 раз.
  3. base_estimator: указывает базовую модель для повышения.
  4. max_depth: определяет глубину базовых оценок.
MAE Sccore:  0.4243339946387083

ГРАДИЕНТНОЕ ПОДДЕРЖАНИЕ

Еще один популярный алгоритм повышения - это градиентное усиление.

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. n_estimators: количество используемых базовых оценок. Более высокое значение обычно дает лучшую производительность.
  2. max_depth: определяет глубину базовых оценок.
  3. min_samples_split: определяет минимальное количество выборок, необходимых для разделения внутреннего узла.
  4. max_features: максимальное количество функций, которые можно извлечь из набора данных при обучении каждой базовой оценки.
MAE Sccore:  0.4063934439500354

XGBOOST

«Если есть сомнения, используйте XGBoost» - одна из самых популярных цитат платформы kaggle в последние годы.

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

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. eta: просто другое название скорости обучения. Помогает в обновлении веса модели.
  2. min_child_weight: указывает минимальную сумму весов всех функций, необходимых для дочернего узла. В основном он используется для контроля переобучения.
  3. max_depth: используется для определения максимальной глубины каждого узла дерева. Чем больше глубина, тем сложнее модель, и наоборот.
  4. max_leaf_nodes: определяет максимальное количество листьев в дереве.
  5. Гамма: значение гаммы указывает минимальное снижение потерь, необходимое для разделения. Узел разделяется только тогда, когда результирующее разбиение дает положительное уменьшение функции потерь. Значения могут варьироваться в зависимости от функции потерь и должны быть настроены.
  6. Подвыборка: указывает долю функций, которые будут случайным образом выбираться для каждого дерева. Более низкие значения делают алгоритм более простым и предотвращают переоснащение.
MAE Sccore:  0.4099352064907469

LIGHTGBM

LightGBM - это алгоритм повышения от Microsoft. Это один из самых быстрых алгоритмов повышения; эффективный и готовый к использованию, когда речь идет о больших структурированных данных.

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. num_iterations: указывает количество выполняемых итераций повышения.
  2. num_leaves: указывает количество листьев, которые должны быть сформированы в дереве. Примечание: В Light GBM, поскольку разделение происходит по листам, а не по глубине, num_leaves должно быть меньше 2 ^ (max_depth), иначе это может привести к переобучению.
  3. min_data_in_leaf: это один из наиболее важных параметров при переобучении.
  4. max_depth: указывает максимальную глубину, до которой может расти дерево. Очень высокое значение этого параметра может привести к переобучению.
  5. bagging_fraction: используется для указания доли данных, которые будут использоваться для каждой итерации. Этот параметр обычно используется для ускорения обучения.
MAE Sccore:  0.4084352064907469

CATBOOST

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

CatBoost может автоматически работать с категориальными переменными и не требует обширной предварительной обработки данных, как другие алгоритмы машинного обучения.

Что мы можем настроить

Здесь важны следующие гиперпараметры:

  1. loss_function: указывает показатель, который будет использоваться для обучения.
  2. Итерации: максимальное количество деревьев, которые можно построить.
  3. Learning_rate: указывает скорость обучения, которая используется для уменьшения шага градиента.
  4. глубина: определяет глубину создаваемых деревьев.
MAE Score: 0.4123613834195344

ЗАКЛЮЧИТЕЛЬНЫЕ МЫСЛИ

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

  1. Выберите хорошую стратегию проверки. (Перекрестная проверка для небольших наборов данных, разделение для больших наборов данных)
  2. Начните с простого, получите базовую модель.
  3. Постоянно улучшайте модель, настраивая и измеряя производительность.

Более продвинутая техника после ручной настройки вашей лучшей модели - это использование алгоритма автоматического поиска гиперпараметров, такого как поиск по сетке или случайный поиск.

И помните, что ваша модель должна быть как можно более простой и понятной.

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

Ссылка на полную версию Блокнота с кодом и пояснениями на GitHub.

Свяжитесь со мной в Twitter.

Свяжитесь со мной в LinkedIn.