Forester: простота AutoML

Mar 09 2023
В этом блоге мы хотели бы подробно описать основную функцию пакета forester под названием train(). Мы сосредоточимся на том, чтобы показать вам, как работают определенные шаги и как пользователь может формировать процесс обучения.

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

Компоненты функции train().

Отчет о проверке данных

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

  1. Основная информация: количество функций и наблюдений, имена столбцов и имя целевого значения.
  2. Статические столбцы: Предоставляет имя и доминирующее значение для статических столбцов (где более 99% наблюдений имеют одинаковое значение).
  3. Повторяющиеся столбцы: информирует о столбцах с одинаковыми значениями.
  4. Отсутствующие поля: сообщает, сколько наблюдений имеют отсутствующие предикторы или целевые значения.
  5. Проверка размерности: сообщает, содержит ли данный набор данных слишком много столбцов для обработки древовидными моделями (более 30 объектов) или столбцов больше, чем строк.
  6. Коррелированные признаки: Распечатывает, какие категориальные или числовые значения имеют высокую (> 0,7) корреляцию в соответствии с V Краммера и коэффициентом ранговой корреляции Спирмена соответственно.
  7. Выбросы: обнаруживает выбросы внутри набора данных. Наблюдение считается выбросом, если оно удовлетворяет трем критериям, основанным на значениях среднего стандартного отклонения, медианного абсолютного отклонения и межквартильного диапазона.
  8. Целевой баланс: информирует о несбалансированности целевых значений и распечатывает значения дисбаланса. Максимальная несбалансированная пропорция для бинарной классификации составляет 40% — 60%, а для регрессии мы рассчитываем 4 квантильных интервала, и доля наблюдений внутри интервала самого большого и самого маленького должна быть между 40% — 60%.
  9. Обнаружение столбца идентификатора: определяет, может ли какой-либо столбец быть идентификатором. Он считается идентификатором, если у него есть имя, указывающее на это, или его значения увеличиваются на единицу с каждой строкой.

Предварительная обработка

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

  1. Удаление статических столбцов, обнаруженных при проверке данных.
  2. Бинаризация цели в классы «1» и «2» для задачи бинарной классификации.
  3. Вменение пропущенных значений с помощью алгоритма MICE .
  4. Удаление сильно коррелированных (> 0,7) признаков из набора данных (по одному признаку на пару).
  5. Удаление столбцов id.
  6. Выбор признаков с помощью алгоритма BORUTA .
  7. Сохранение информации об удаленных столбцах.

Подготовка данных

На этом этапе мы сначала разделяем данный набор данных на наборы данных для обучения, тестирования и проверки в соответствии с параметром set train() , называемым train_test_split . Метод, используемый для разделения, взят из пакета splitTools , который позволяет нам сбалансировать возвращаемые наборы данных.

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

Обучение и настройка модели

Этот этап включает в себя обучение до 5 движков древовидной модели, а именно: random forest , xgboost , дерево решений , lightgbm и catboost . Каждый из них поставляется с другим гиперпараметром, установленным на этапе настройки. Обучение и настройка выполняются тремя существенно разными путями.

Параметры по умолчанию

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

Случайный поиск

Этот метод обучает модели с параметрами, которые являются результатами случайного поиска в пространстве гиперпараметров, определяемом индивидуально для каждой модели. Количество моделей, обученных методом, описывается параметром train() с именем random_evals . Значение 5 означает, что случайный поиск выдаст 5 моделей для каждого двигателя.

Байесовская оптимизация

Последний метод является наиболее продвинутым, поскольку он выполняет байесовскую оптимизацию из пакета ParBayesianOptimisation , чтобы обучать лучшую модель с каждой итерацией. Этот метод является наиболее эффективным и трудоемким. Количество итераций оптимизации описывается параметрами train() , называемыми bayes_iter . Чем больше итераций задает пользователь, тем дольше процесс обучения, но алгоритм также покрывает больший кусок пространства гиперпараметров.

Оценка модели

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

Для бинарной классификации мы рассчитываем точность, AUC ROC (площадь под кривой ROC), f1, полноту и точность, тогда как для регрессии это: RMSE (среднеквадратичная ошибка), MSE (среднеквадратичная ошибка), R2, MAD (среднее абсолютное отклонение) и MAE (средняя абсолютная ошибка).

Пользователь также может предоставить свою собственную функцию с параметрами train() , называемыми metric_function и metric_function_name . Также можно выбрать метрики, которые будут рассчитываться ( metrics ), и изменить, по каким из них будет сортироваться ранжированный список ( sort_by ).

Выходной объект

На выходе пользователь получает список, содержащий более 20 различных объектов, которые кратко описаны в документации train() . Они охватывают различные наборы данных для обучения, тестирования и проверки, используемые во время обучения, прогнозы для заданных наборов данных и их наблюдаемых значений, отчет о проверке данных, список выбросов, обученные модели и многое другое. Однако наиболее важными являются ранжированные списки для наборов данных обучения, тестирования и проверки, которые называются score_train, score_test и score_valid.

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

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

Если вас интересуют другие публикации об объяснимом, справедливом и ответственном ML, подпишитесь на #ResponsibleML на Medium.
Чтобы увидеть больше контента, связанного с R, посетитеhttps://www.r-bloggers.com.