Примеры кода на R — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 2: Строка 2:
 
== Особенности написания кода на R ==
 
== Особенности написания кода на R ==
 
R изначально создавался как интерпретируемый мультипарадигменный язык программирования для статистической обработки данных и работы с графикой. R поддерживает широкий спектр статистических и численных методов, а также расширяется за счёт новых библиотек (пакетов).
 
R изначально создавался как интерпретируемый мультипарадигменный язык программирования для статистической обработки данных и работы с графикой. R поддерживает широкий спектр статистических и численных методов, а также расширяется за счёт новых библиотек (пакетов).
 +
 +
Для использования любого из пакетов необходимо в начале файла прописать
 +
install.packages("packageName")
 +
require("packageName)
 +
 +
Среда статистических вычислений R отличается особенно высоким количеством реализованных в ней алгоритмов машинного обучения, на основе которых можно создавать подобные модели. Однако вместе с явным преимуществом наличия такого большого количества алгоритмов возникают и некоторые проблемы. В частности, для аналитика становится все сложнее помнить особенности применения и синтаксиса соответствующих R-функций. Кроме того, функции, позволяющие реализовать полный цикл разработки предсказательных моделей, часто "разбросаны" по разным пакетам, что требует времени для поиска необходимых функций и их освоения.
  
 
== Описание основных пакетов ==
 
== Описание основных пакетов ==
  
 
===Пакеты для обработки данных===
 
===Пакеты для обработки данных===
 +
 
==== pipelearner ====
 
==== pipelearner ====
Пакет предоставляет базовые возможности по разбивке набора данных на блоки и для обучения моделей
+
Пакет предоставляет базовые возможности для разбиения набора данных на блоки для обучения моделей. В основе пакета лежит концепция конвейеров и аккуратных данных. Пакет хорошо документирован, все непонятные моменты можно прояснить, просто изучив структуру объекта с моделями на каждом этапе.
 
 
  
 
==== MICE ====
 
==== MICE ====
 +
Пакет MICE используется для заполнения пропущенных значений в данных. При этом нет необходимости думать о типах значений: для каждого из них в пакете предусмотрено заполнение по умолчанию.
  
Если необходимо решить, что делать с пропущенными значениями, MICE — именно то, что вам нужно. Когда возникает проблема пропущенных значений, наиболее частый способ ее решения — простые замены: нулями, средним, модой, т.д. Однако, ни один из этих методов не гибок и может привести к несоответствиям в данных.
+
===Пакеты с реализованными алгоритмами машинного обучения===
 
 
Пакет MICE поможет заменить пропущенные значения, используя разнообразные техники, в зависимости от данных, с которыми вы работаете.
 
  
 +
==== Caret ====
 +
В данном пакете представлены модели для регрессии и классификации, реализовано достаточно много популярных метрик.
  
===Пакеты с реализованными алгоритмами машинного обучения===
+
Пакет caret обладает следующими отличительными особенностями:
 +
использование универсального синтаксиса команд, вне зависимости от синтаксиса исходной функции, реализующей тот или иной алгоритм;
 +
автоматизированное нахождение оптимальных значений гиперпараметров моделей ("tuning parameters"), которые обычно невозможно вычислить аналитически;
 +
возможность организации параллельных вычислений, значительно ускоряющих процесс обучения моделей.
  
 +
В состав caret входят функции, способствующие реализации полного цикла разработки предсказательных моделей. основные из них:
 +
featurePlot, findCorrelation, preProcess.
 +
train(): главная "рабочая лошадка" пакета caret, одновременно выполняющая обучение моделей, нахождение оптимальных гиперпараметров и оценку предсказательной силы моделей. Последние две задачи реализуются с использованием разнообразных методов создания повторных выборок (бутстреп, многократный бутстреп, несколько видов перекрестной проверки). Параметры процесса обучения задаются аргументом trControl, на который подается список с параметрами, предварительно созданный при помощи функции trainControl(). Оценка качества модели выполняется на основе критерия, задаваемого аргументом metric (в частности, общая верность классификации - "Accuracy", каппа-статистика - "Kappa", квадратный корень из среднеквадратичной ошибки - "RMSE" и коэффициент детерминации - "Rsquared"). Алгоритм, при помощи которого происходит обучение модели, указывается с помощью аргумента method. В настоящее время имеется возможность использовать более 180 различных алгоритмов.
  
1. caret
 
Помимо встроенной справки и руководства на сайте имеется книга от разработчика, которая может служить еще и отличным учебником по машинному обучению: Applied Predictive Modeling. Много примеров в интернете, много вопросов и ответов на StackOverflow.
 
На момент написания этого сообщения доступно 233 модели: Available Models. Недостатком можно считать то, что представлены только модели для регрессии и классификации. Реализовано достаточно много популярных метрик. Есть несколько способов отбора признаков: от исключения признаков с околонулевой дисперсией до генетических алгоритмов.
 
Можно писать свои собственные метрики качества и обертки для моделей. Это особенно полезно с учетом того, что не все гиперпараметры сделаны настраиваемыми в имеющихся обертках.
 
Возможности имеются, но ограниченные: можно выполнить стандартизацию или трансформацию при помощи PCA, импутацию средним или при помощи метода k-ближайших соседей. Однако новые варианты предобработки так просто не добавить. UPD: если верить Custom preprocessing in caret, скоро все будет (за ссылку спасибо S.Skripko).
 
Ансамбли моделей можно обучать при помощи пакета caretEnsemble. Правильно реализован стекинг: Understanding caretEnsemble.
 
Есть поддержка параллельных вычислений с использованием foreach. В остальном производительность зависит от используемой реализации того или иного алгоритма.
 
  
2. mlr
+
==== Mlr ====
 
Пакет более новый, материалов и примеров по нему меньше. Документирован хорошо, разобраться в любом вопросе можно без проблем.
 
Пакет более новый, материалов и примеров по нему меньше. Документирован хорошо, разобраться в любом вопросе можно без проблем.
 
Количество моделей меньше, чем для caret, но список более разнообразен. В частности, можно использовать модели для кластеризации и анализа выживаемости, чего нет в caret. Более широкие возможности для оценки качества, в том числе функции для анализа ROC-кривых.
 
Количество моделей меньше, чем для caret, но список более разнообразен. В частности, можно использовать модели для кластеризации и анализа выживаемости, чего нет в caret. Более широкие возможности для оценки качества, в том числе функции для анализа ROC-кривых.
Строка 36: Строка 42:
 
Есть поддержка параллельных вычислений, см. Parallelization.
 
Есть поддержка параллельных вычислений, см. Parallelization.
  
3. H2O
+
==== H2O ====
Обширная документация, примеры и книга Practical Machine Learning with H2O.
+
Есть линейные модели, "случайный лес", градиентный бустинг, нейросети прямого распространения (включая автокодировщики), PCA, GLRM, KNN, наивный байесовский классификатор и Word2vec. Также существует отдельная "обертка" для использования deep learning-библиотек, в т.ч. mxnet.  
Моделей немного, и все они реализованы на Java (пакеты для R и Python просто используют API). Есть линейные модели, "случайный лес", градиентный бустинг, нейросети прямого распространения (включая автокодировщики), PCA, GLRM, KNN, наивный байесовский классификатор и Word2vec. Также существует отдельная "обертка" для использования deep learning-библиотек, в т.ч. mxnet. Для отбора признаков алгоритмов нет.
+
Недостатком пакета можно считать невозможность задать параметры для используемых алгоритмов.  
Возможности кастомизации нулевые.
 
Предобработку нужно делать до загрузки данных в H2O.
 
Есть функция h2o.stackedEnsemble().
 
Сильная сторона этой библиотеки – работа с большими объемами данных. Есть поддержка многопоточных вычислений, можно создавать кластеры из нескольких ПК (см. сообщение) или же использовать H2O вместе со Spark-ом.
 
 
 
  
 +
Сильная сторона этой библиотеки – работа с большими объемами данных, есть поддержка многопоточных вычислений.
  
 
== Примеры алгоритмов ==
 
== Примеры алгоритмов ==
 
=== Регрессия ===
 
=== Регрессия ===
 
=== Кластеризация ===
 
=== Кластеризация ===

Версия 19:35, 19 апреля 2020

Особенности написания кода на R

R изначально создавался как интерпретируемый мультипарадигменный язык программирования для статистической обработки данных и работы с графикой. R поддерживает широкий спектр статистических и численных методов, а также расширяется за счёт новых библиотек (пакетов).

Для использования любого из пакетов необходимо в начале файла прописать install.packages("packageName") require("packageName)

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

Описание основных пакетов

Пакеты для обработки данных

pipelearner

Пакет предоставляет базовые возможности для разбиения набора данных на блоки для обучения моделей. В основе пакета лежит концепция конвейеров и аккуратных данных. Пакет хорошо документирован, все непонятные моменты можно прояснить, просто изучив структуру объекта с моделями на каждом этапе.

MICE

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

Пакеты с реализованными алгоритмами машинного обучения

Caret

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

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

В состав caret входят функции, способствующие реализации полного цикла разработки предсказательных моделей. основные из них: featurePlot, findCorrelation, preProcess. train(): главная "рабочая лошадка" пакета caret, одновременно выполняющая обучение моделей, нахождение оптимальных гиперпараметров и оценку предсказательной силы моделей. Последние две задачи реализуются с использованием разнообразных методов создания повторных выборок (бутстреп, многократный бутстреп, несколько видов перекрестной проверки). Параметры процесса обучения задаются аргументом trControl, на который подается список с параметрами, предварительно созданный при помощи функции trainControl(). Оценка качества модели выполняется на основе критерия, задаваемого аргументом metric (в частности, общая верность классификации - "Accuracy", каппа-статистика - "Kappa", квадратный корень из среднеквадратичной ошибки - "RMSE" и коэффициент детерминации - "Rsquared"). Алгоритм, при помощи которого происходит обучение модели, указывается с помощью аргумента method. В настоящее время имеется возможность использовать более 180 различных алгоритмов.


Mlr

Пакет более новый, материалов и примеров по нему меньше. Документирован хорошо, разобраться в любом вопросе можно без проблем. Количество моделей меньше, чем для caret, но список более разнообразен. В частности, можно использовать модели для кластеризации и анализа выживаемости, чего нет в caret. Более широкие возможности для оценки качества, в том числе функции для анализа ROC-кривых. Широчайшие возможности по кастомизации: можно легко добавлять новые модели, метрики, способы импутации и методы отбора признаков. Все этапы можно объединять в цепочки (суть в том, чтобы операции предобработки выполнялись на каждой итерации перекрестной проверки, а не один раз для всего набора данных – это более корректный подход). Более того, можно использовать функцию preProcess() из caret. Отдельно хочу отметить наличие Nested Resampling. Есть возможность обучать метамодели при помощи makeStackedLearner (как просто на предсказаниях по всем данным, так и реализуя полноценный стекинг). Есть поддержка параллельных вычислений, см. Parallelization.

H2O

Есть линейные модели, "случайный лес", градиентный бустинг, нейросети прямого распространения (включая автокодировщики), PCA, GLRM, KNN, наивный байесовский классификатор и Word2vec. Также существует отдельная "обертка" для использования deep learning-библиотек, в т.ч. mxnet. Недостатком пакета можно считать невозможность задать параметры для используемых алгоритмов.

Сильная сторона этой библиотеки – работа с большими объемами данных, есть поддержка многопоточных вычислений.

Примеры алгоритмов

Регрессия

Кластеризация