Использование сложных алгоритмов для построения предсказательных моделей становится все более распространенным в самых разных областях - от академических исследований до всевозможных бизнес-приложений. Среда статистических вычислений R отличается особенно высоким количеством реализованных в ней алгоритмов машинного обучения, на основе которых можно создавать подобные модели. Однако вместе с явным преимуществом наличия такого большого количества алгоритмов возникают и некоторые проблемы. В частности, для аналитика становится все сложнее помнить особенности применения и синтаксиса соответствующих R-функций. Кроме того, функции, позволяющие реализовать полный цикл разработки предсказательных моделей, часто "разбросаны" по разным пакетам, что требует времени для поиска необходимых функций и их освоения. В связи с этим доктор Макс Кун (Max Kuhn; директор отдела неклинических исследований в компании Pfizer) предпринял попытку разработать универсальный интерфейс, предоставляющий доступ к основым алгоритмам машинного обучения, реализованным в R и других специализированных статистических системах (например, Weka). Результатом этой работы стал пакет caret (от "classification and regression training"). Первая статья с описанием основных возможностей этого пакета, была опубликована Максом в журнале Journal of Statistical Software в 2008 г. Сегодня caret стал одним из наиболее популярных инструментов среди пользователей R, занимающихся разработкой предсказательных моделей.
Пакет caret обладает следующими отличительными особенностями:
- использование универсального синтаксиса команд, вне зависимости от синтаксиса исходной функции, реализующей тот или иной алгоритм;
- автоматизированное нахождение оптимальных значений гиперпараметров моделей ("tuning parameters"), которые обычно невозможно вычислить аналитически;
- возможность организации параллельных вычислений, значительно ускоряющих процесс обучения моделей.
- featurePlot(): предназначена для выполнения графического разведочного анализа данных.
- createDataPartion(): помогает разбить данные на обучающую и проверочную выборки.
- nearZeroVar(): облегчает выявление предикторов, дисперсия значений которых близка к нулю (как правило, такие переменные следует исключить из дальнейшего рассмотрения, т.к. они несут очень мало полезной информации).
- findCorrelation(): позволяет выявить предикторы, которые в значительной мере коррелируют с другими предикторами. Многие статистические модели очень чувствительны к наличию подобных переменных и дают неустойчивые решения (т.е. речь идет о проблеме мультиколлинеарности), в связи чем высоко коррелирующие друг с другом предикторы следует исключить из данных.
- preProcess(): выполняет заданные пользователем преобразования исходных значений предикторов, необходимые для корректного использования тех или иных алгоритмов обучения моделей. В частности, имеется возможность выполнить стандартизацию значений числовых переменных, преобразование исходных данных методом главных компонент (что является альтернативой упомянутому выше удалению высоко коррелирующих предикторов), а также преобразование методом "пространственных знаков" ("spatial sign transformation"), которое бывает особенно полезным при наличии многомерных "выбросов".
- train(): главная "рабочая лошадка" пакета caret, одновременно выполняющая обучение моделей, нахождение оптимальных гиперпараметров и оценку предсказательной силы моделей. Последние две задачи реализуются с использованием разнообразных методов создания повторных выборок (бутстреп, многократный бутстреп, несколько видов перекрестной проверки). Параметры процесса обучения задаются аргументом trControl, на который подается список с параметрами, предварительно созданный при помощи функции trainControl(). Оценка качества модели выполняется на основе критерия, задаваемого аргументом metric (в частности, общая верность классификации - "Accuracy", каппа-статистика - "Kappa", квадратный корень из среднеквадратичной ошибки - "RMSE" и коэффициент детерминации - "Rsquared"). Алгоритм, при помощи которого происходит обучение модели, указывается с помощью аргумента method. В настоящее время имеется возможность использовать более 180 различных алгоритмов. Со списком этих алгоритмов, а также с многочисленными примерами использования caret, можно ознакомиться на сайте проекта.
- predict.train(): позволяет получать предсказания значений переменной-отклика на основе новых данных.
- confusionMatrix(): при работе с моделями-классификаторами полезным способом обобщения качества их предсказаний является сведение частот меток классов в т.н. "матрицу неточностей" ("confusion matrix"). Функция confusionMatrix() позволяет создавать подобные матрицы, а также рассчитывать целый набор итоговых статистик, характеризующих качество предсказаний.
- varImp(): рассчитывает количественные показатели (они варьируют в зависимости от конкретного алгоритма), отражающих вклад, или "важность", каждого предиктора ("variable importance") при получении предсказаний на основе той или иной модели.
Приведенные примеры охватывают лишь небольшую часть функций из пакета caret. В последующих сообщениях будут рассмотрены подробности использования как перечисленных, так и других функций, входящих в этот пакет.
Отправить комментарий