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

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

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

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

Вывод data_check() выводится на консоль только в том случае, если пользователь устанавливает для параметра verbose значение «ИСТИНА».

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

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

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

В функции train() есть параметр advanced_preprocessing, который указывает, какой метод предварительной обработки будет выполняться. При значении по умолчанию «ЛОЖЬ» базовый метод содержит шаги 1, 2, 3 и 7, тогда как другой вариант охватывает все 7 шагов. Расширенный метод может привести к повышению производительности, однако он сильно зависит от заданного набора данных.

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

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

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

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

Этот этап включает в себя обучение до 5 движков древовидной модели: случайный лес, 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. Также можно выбрать метрики, которые будут рассчитываться (метрики), и изменить, по каким из них будет сортироваться ранжированный список (sort_by).

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

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

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

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

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