ГЛАВА 3 Пакет caret - инструмент построения статистических моделей в R

3.1 Универсальный интерфейс доступа к функциям машинного обучения в пакете caret

Использование сложных алгоритмов построения статистических моделей становится все более распространенной тенденцией в самых разных областях - от академических исследований до всевозможных бизнес-приложений. Среда статистических вычислений R отличается особенно богатым набором пакетов для создания различных моделей классификации и регрессии. Однако такое высокое разнообразие реализованных алгоритмов создает и ряд некоторых проблем.

Для аналитика становится затруднительным выбрать конкретный алгоритм машинного обучения, составить план оптимизации параметров, учесть синтаксические нюансы каждой функции и отследить особенности ее выполнения. Кроме того, процедуры, позволяющие реализовать полный цикл разработки предсказательных моделей, часто “разбросаны” по разным пакетам, что требует времени для поиска необходимых компонент и их освоения. Возникает потребность как-то интегрировать разные функции и методы в рамках некоторой единой надстройки, что позволило бы обобщить характерные для всех моделей процедуры вычислений.

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

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

Результатом этой работы стал пакет caret (сокращение от Classication and Regression Training), который сегодня стал одним из наиболее популярных инструментов среди пользователей R, занимающихся разработкой предсказательных моделей. Основные возможности пакета caret достаточно полно представлены в публикациях разработчиков (Kuhn, 2008, 2012, 2013; Kuhn, Johnson, 2013).

На момент написания этой книги пакет caret включал унифицированный интерфейс со 147 функциями из 27 пакетов, которые автоматически подгружаются по мере необходимости (в случае, когда они установлены в системе). Наиболее распространенная технология работы с функциями пакета связана с автоматизированным нахождением оптимальных значений гиперпараметров моделей (tuning parameters), которые обычно невозможно вычислить аналитически, и построена по следующей формальной схеме:

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

  1. Разбиение исходных данных на обучающую и контрольную выборки. Формирование индексов любой такой последовательности для вектора x случайным образом в заданном соотношении p осуществляется функцией createDataPartition(x, p = 3/4, list = FALSE), что, в целом, эквивалентно использованию функции sample(length(x), size = 0.75*length(x)). C помощью аналогичных функций createResample(), createFolds() и createMultiFolds() можно создать бутстреп-выборки или произвольные разбиения на части в любом количестве повторностей.
  2. Разведочный анализ исходных переменных. Графический анализ характера распределения данных и их взаимной зависимости, наличие выбросов и других аномальных ситуаций может быть выполнен с помощью функции featurePlot(). Функция nearZeroVar() позволяет исключить предикторы, дисперсия значений которых близка к нулю, а findCorrelation() позволяет выявить переменные, которые в значительной мере коррелируют с другими признаками.
  3. Предварительная обработка исходной выборки (“выравнивание” дисперсий, приведение к нормальному распределению, сглаживание выбросов, заполнение пропущенных значений и проч., что часто является эффективной мерой улучшения структуры данных). Функция preProcess() и метод predict.preProcess() могут выполнить большое количество различных процедур трансформации данных и других операций предобработки.
  4. Обучение моделей, нахождение оптимальных гиперпараметров и оценка точности предсказания. Последние две задачи реализуются с использованием разнообразных методов ресэмплинга. Все эти процедуры выполняются функцией train(), а predict.train() позволяет получать предсказания значений переменной-отклика на основе выбранной оптимальной модели.
  5. Оценка “важности” предикторов (variable importance) и селекция оптимального их набора. Функция varImp() рассчитывает для каждой переменной количественные показатели, отражающих их вклад в получение точных предсказаний в рамках построенной модели. Отбор информативного комплекса переменных может быть осуществлен также с помощью функции rfe(), выполняющей рекурсивное исключение переменных, или функции gafs (), в которой реализован генетический алгоритм.

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