Выбор модели является ключевым элементом в длинной и важной серии шагов, связанных с созданием модели машинного обучения (ML), которая будет развернута в рабочей среде.

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

Начнем с понимания того, что такое выбор модели:

Что такое выбор модели

Выбор модели – это задача (или процесс) выбора статистической модели из набора моделей-кандидатов с учетом данных. Wikipedia.

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

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

Является ли набор данных чистым?

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

Поверьте мне! Очистка данных — очень длительный и утомительный процесс. Это целая отдельная тема, которая необходима, поэтому ценные материалы в помощь новичкам доступны в разделе Дополнительная литература ниже.

Каков размер набора данных?

Следующим, что мы рассмотрим, будет размер данных. Насколько велики данные? Достаточно ли велики данные, чтобы их можно было разделить на 3 набора (Обучение, Проверка и Тестовый набор), или они настолько малы, что мы даже не можем извлечь достаточно хороший тестовый набор (пример: набор данных радужной оболочки глаза).

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

Как мы определяем небольшой набор данных?

Набор данных из 1000 наборов и меньше можно считать небольшим. Набор выше 1000 по-прежнему может считаться небольшим в зависимости от проблемы, которую вы пытаетесь решить.

если вы попытаетесь наивно обработать небольшой набор данных, это все равно сработает. Если вы попытаетесь обработать большой набор данных наивно, это займет на несколько порядков больше времени, чем допустимо (и, возможно, также истощит ваши вычислительные ресурсы). ~Карлос Барж

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

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

Примечание. При оценке модели учитывайте эмпирическое правило обучения модели.

Ваша модель должна обучаться как минимум на порядок большем количестве примеров, чем обучаемые параметры developers.google.com

Эти шаги включают в себя:

  1. Преобразование категориальных столбцов в числовые (если есть)
  2. Выполните k-кратную перекрестную проверку
  3. Выбрать модели-кандидаты
  4. Выполните оценку модели
  5. Выбор модели

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

Преобразование категориальных столбцов в числовые

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

В большинстве случаев столбцы, которые необходимо преобразовать в числовые значения, представляют собой столбцы категорий, такие как [низкий, средний, высокий] или [Да, Нет] или [Мужской, Женский].

Scikit-learn — это набор инструментов, созданный для обработки этих преобразований: они включают в себя LabelEncoder, OrdinalEncoder, OneHotEncoder и т. д. Все это доступно в sklearn.preprocessing.

Ресурсы к статьям, разъясняющим эти инструменты, можно найти в разделе Дополнительная литература этой статьи.

Выполните k-кратную перекрестную проверку

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

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

После выполнения K-кратной перекрестной проверки мы получаем число N одного и того же набора данных с N различными наборами для обучения и тестирования (где N — количество разбиений, примененных к набору данных).

Существует два (2) способа использования k-кратной перекрестной проверки:

  1. Использование k-кратной перекрестной проверки для оценки производительности модели
  2. Использование k-кратной перекрестной проверки для настройки гиперпараметров

Есть прекрасная статья Рукшан Прамодитха под названием К-кратная перекрестная проверка, объясненная простым языком, в которой объясняется и то, и другое. Однако мы будем использовать k-fold для оценки производительности модели в этом тестовом примере.

Целью выполнения k-кратной перекрестной проверки является расширение набора данных.

Что я имею в виду? Набор данных радужной оболочки, например, содержит в общей сложности 150 данных, которые настолько малы, что извлечение набора тестов и перекрестной проверки оставит нам очень мало для обучения.

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

Выбрать модели-кандидаты

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

Набор данных Iris — это задача классификации. Он состоит из четырех (4) столбцов признаков: «длина чашелистика (см)», «ширина чашелистика (см)», «длина лепестка (см)» и «ширина лепестка (см)». Все столбцы непрерывных функций.

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

Вопрос: Какие модели лучше всего решают эти отношения?

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

Мы выберем LogisticRegression, SVC, KNN, и RandomForestClassifier.

Выполните оценку модели

Теперь, когда мы определились с моделями машинного обучения (ML), мы можем приступить к оценке моделей с нашим набором данных с использованием перекрестной проверки.

Мы будем использовать sklearn.model_selection.cross_val_score для перекрестной проверки набора данных и получения оценок производительности модели по каждому сгибу.

Выбор модели

После перекрестной проверки набора данных мы можем теперь сделать вывод, что наиболее эффективными моделями являются модели логистической регрессии и модели K-ближайшего соседа, точность которых составляет 97,33%.

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

После перекрестной проверки набора данных мы можем теперь сделать вывод, что наиболее эффективными моделями являются модели логистической регрессии и модели K-ближайших соседей, точность которых составляет 97,33%.

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

Теперь, когда мы выяснили, как обращаться с меньшими наборами данных, как нам обращаться с большими?

Как определить большой набор данных?

Что я имею в виду под большим набором данных? Набор данных примерно из 10 000 строк вверх является большим, в то время как наборы данных в диапазоне, скажем, от 2 000 до 10 000 являются достаточно средними. Конечно, этот показатель не самый лучший.

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

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

Ну, в отличие от меньшего набора данных, мы не можем наивно обрабатывать этот набор данных. Таким образом, мы должны разделить его. Именно здесь вступает в игру сокращение набора данных до трех (3) наборов для обучения и оценки.

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

  1. Преобразование категориальных столбцов в числовые (если есть)
  2. Масштабирование непрерывных столбцов (при необходимости)
  3. Разделить набор данных
  4. Выбрать модель-кандидата
  5. Выполните оценку модели
  6. Выбор модели

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

Набор данных Цены на жилье сам по себе не такой большой, но должен хорошо объяснить концепцию наших шагов.

Блокнот, в котором собраны коды для набора данных и проделанная нами работа, можно найти на моей странице kaggle.

Я бы сразу перешел к разделению набора данных. Ниже приведен код для очистки набора данных и преобразования столбцов — на случай, если вы захотите использовать набор данных Цены на жилье.

Разделить набор данных

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

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

Поэтому мы должны разделить набор данных на набор поездов и тестов. Учитывая, что весь набор данных имеет вид (1460, 80) и (1460, 74) после очистки и преобразование, мы можем выполнить перекрестную оценку на наборе поездов и оценить производительность нашей модели на тестовом наборе.

Выбрать модель-кандидата

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

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

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

Мы также должны выбрать такие модели, как регрессор опорных векторов, линейная регрессия и регрессор K-соседей, поскольку мы выполняем оценки.

XGBoost окажется очень важным инструментом в вашем путешествии по машинному обучению, и я предлагаю изучить его использование в блокноте XGBoost гроссмейстера Kaggle Dans Becker. Дополнительные ресурсы по XGBoost см. в разделе Дополнительная литература.

Выполните оценку модели

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

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

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

Выбор модели

После разделения набора данных, выбора модели-кандидата и выполнения оценки модели мы можем прийти к выводу, что регрессор случайного леса лучше всего подходит для развертывания со средней абсолютной ошибкой (MAE) 6732,92.

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

Вы можете попробовать XGBoost и сравнить его, чтобы увидеть, работает ли он лучше. Что, если вы также настроите модель XGBoost !!!

Заключение

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

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

Мы также говорили о том, почему мы оцениваем модели и как мы выбираем модели-кандидаты перед оценкой модели.

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

Дальнейшее чтение

Очистка данных

- Полное руководство по очистке данных
- Очистка данных с помощью Python и Pandas

Кодирование столбцов категорий

- Кодирование категориальных данных в машинном обучении
- Руководство по кодированию категориальных признаков с использованием Scikit-Learn для машинного обучения

Модели Scikit-Learn

- Машина опорных векторов
- Случайный лес
- K-ближайший сосед
- Линейная регрессия
- Логистическая регрессия

Дополнительная литература по выбору модели

- Короткое введение в выбор модели»
- Нежное введение в выбор модели для машинного обучения

Связанные блокноты

- Этапы выбора модели для небольшого набора данных
- Этапы выбора модели для большого набора данных

Забронировать

- Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow