В этом блоге мы хотели бы подробно описать основную функцию пакета forester, которая называется train(). Мы сосредоточимся на том, чтобы показать вам, как работают определенные шаги и как пользователь может формировать процесс обучения. Концепция пакета описана в предыдущих сообщениях блога, представляющих пакет, описывающих его более подробно и предоставляющих сценарий варианта использования.
Отчет о проверке данных
Первым шагом конвейера AutoML является запуск функции check_data(), которая предоставляет пользователю информацию о заданном наборе данных, разделенную на несколько категорий:
- Основная информация: количество объектов и наблюдений, имена столбцов и имя целевого значения.
- Статические столбцы. Предоставляет имя и доминирующее значение для статических столбцов (где более 99 % наблюдений имеют одинаковое значение).
- Повторяющиеся столбцы: сообщает о столбцах с одинаковыми значениями.
- Отсутствующие поля: сообщает, сколько наблюдений имеют отсутствующие предикторы или целевые значения.
- Проверка размерности. Сообщает, содержит ли данный набор данных слишком много столбцов для обработки древовидными моделями (более 30 объектов) или столбцов больше, чем строк.
- Коррелированные признаки: показывает, какие категориальные или числовые значения имеют высокую (> 0,7) корреляцию в соответствии с V Краммера и коэффициентом ранговой корреляции Спирмена соответственно.
- Выбросы. Обнаруживает выбросы в наборе данных. Наблюдение считается выбросом, если оно удовлетворяет трем критериям, основанным на значениях среднего стандартного отклонения, медианного абсолютного отклонения и межквартильного диапазона.
- Целевой баланс: информирует о несбалансированности целевых значений и распечатывает значения дисбаланса. Максимальная несбалансированная пропорция для бинарной классификации составляет 40% — 60%, а для регрессии мы рассчитываем 4 квантильных интервала, и доля наблюдений внутри интервала самого большого и самого маленького должна быть между 40% — 60%.
- Обнаружение столбца идентификатора: определяет, может ли какой-либо столбец быть идентификатором. Он считается идентификатором, если у него есть имя, указывающее на это, или его значения увеличиваются на единицу с каждой строкой.
Вывод data_check() выводится на консоль только в том случае, если пользователь устанавливает для параметра verbose значение «ИСТИНА».
Предварительная обработка
Предварительная обработка — это первая функция, выполняемая внутри конвейера train(). Этоповышает общее качество фрейма данных за несколько шагов, представленных ниже:
- Удаление статических столбцов, обнаруженных при проверке данных.
- Бинаризация цели в классы «1» и «2» для задачи бинарной классификации.
- Вменение пропущенных значений алгоритмом MICE.
- Удаление высококоррелированных (>0,7) признаков из набора данных (по одному признаку на пару).
- Удаление столбцов id.
- Выбор признаков с помощью алгоритма BORUTA.
- Сохранение информации об удаленных столбцах.
В функции 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.