Примеры кода на R — различия между версиями
(→Примеры алгоритмов) |
м (→Описание известных пакетов: links refactored) |
||
Строка 17: | Строка 17: | ||
Для языка R написано много пакетов, каждый из которых предназначен для решения определенного круга проблем. Например, для обработки данных или реализации основных алгоритмов. В статье представлено несколько наиболее часто используемых пакетов. | Для языка R написано много пакетов, каждый из которых предназначен для решения определенного круга проблем. Например, для обработки данных или реализации основных алгоритмов. В статье представлено несколько наиболее часто используемых пакетов. | ||
===Пакеты для обработки данных=== | ===Пакеты для обработки данных=== | ||
− | ==== Pipelearner<ref>[https://github.com/drsimonj/pipelearner Pipelearner github repository]</ref> | + | ==== Pipelearner ==== |
− | + | Пакет Pipelearner<ref>[https://github.com/drsimonj/pipelearner Pipelearner github repository]</ref> предоставляет базовые возможности для разбиения набора данных на блоки для обучения моделей. В основе пакета лежит концепция работы конвейера. Пакет хорошо документирован, все непонятные моменты можно прояснить, просто изучив структуру объекта на каждом этапе работы алгоритма. | |
− | ==== MICE <ref>[https://cran.r-project.org/web/packages/mice/mice.pdf MICE package documentation]</ref> | + | ==== MICE ==== |
− | + | Пакет MICE<ref>[https://cran.r-project.org/web/packages/mice/mice.pdf MICE package documentation]</ref> используется для заполнения пропущенных значений в данных. При этом нет необходимости думать о типах значений: для каждого из них в пакете предусмотрено заполнение по умолчанию. | |
− | ==== Ggplot2 <ref>[https://cran.r-project.org/web/packages/ggplot2/index.html Ggplot2 main info page]</ref> | + | ==== Ggplot2 ==== |
− | + | Данный пакет<ref>[https://cran.r-project.org/web/packages/ggplot2/index.html Ggplot2 main info page]</ref> используется для отрисовки данных и графиков. | |
=== Пакеты с реализованными алгоритмами машинного обучения === | === Пакеты с реализованными алгоритмами машинного обучения === | ||
− | ==== Caret <ref>[http://topepo.github.io/caret/index.html Caret guide book]</ref> | + | ==== Caret ==== |
− | + | В данном пакете <ref>[http://topepo.github.io/caret/index.html Caret guide book]</ref> представлены модели для регрессии и классификации, а также большая часть популярных метрик. В настоящее время имеется возможность использовать более 180 различных алгоритмов. | |
Основная функция в составе Caret - функция train(). Параметры обучения в ней задаются аргументом trControl, а оценка качества модели - аргументом metric. | Основная функция в составе Caret - функция train(). Параметры обучения в ней задаются аргументом trControl, а оценка качества модели - аргументом metric. | ||
Отличительными особенностями Caret является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений. | Отличительными особенностями Caret является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений. | ||
− | ==== Mlr <ref>[https://cran.r-project.org/web/packages/mlr/mlr.pdf Mlr package documentation]</ref> | + | ==== Mlr ==== |
− | + | В пакете Mlr <ref>[https://cran.r-project.org/web/packages/mlr/mlr.pdf Mlr package documentation]</ref> представлены модели для регрессии, классификации, кластеризации и анализа выживаемости, а также широкие возможности для оценки качества (в том числе функции для анализа ROC-кривых). | |
Есть поддержка параллельных вычислений и конвейерных операций. | Есть поддержка параллельных вычислений и конвейерных операций. | ||
− | ==== H2O <ref>[https://cran.r-project.org/web/packages/h2o/index.html H20 main info page]</ref> | + | ==== H2O ==== |
− | + | В пакете H20 <ref>[https://cran.r-project.org/web/packages/h2o/index.html H20 main info page]</ref> представлены линейные модели, такие как градиентный бустинг, PCA, GLRM, KNN, Radom forest, наивный Байесовский классификатор. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений.Однако в ней нет возможности задавать параметры используемых алгоритмов | |
== Примеры алгоритмов == | == Примеры алгоритмов == |
Версия 18:32, 20 апреля 2020
Содержание
Особенности написания кода на R
Язык R изначально создавался как язык программирования для работы с графикой и статистической обработки данных. Поэтому он отличается большим количеством реализованных статистических алгоритмов, на основе которых можно создавать модели и алгоритмы машинного обучения.
Язык постоянно расширяется за счёт новых библиотек (пакетов). Для импорта одного пакета необходимо прописать в файле следующие строки:
install.packages("packageName") require("packageName")
Для того чтобы импортировать пакет с его зависимостями в код следует включить следующие строки:
library("packageName")
Описание известных пакетов
Для языка R написано много пакетов, каждый из которых предназначен для решения определенного круга проблем. Например, для обработки данных или реализации основных алгоритмов. В статье представлено несколько наиболее часто используемых пакетов.
Пакеты для обработки данных
Pipelearner
Пакет Pipelearner[1] предоставляет базовые возможности для разбиения набора данных на блоки для обучения моделей. В основе пакета лежит концепция работы конвейера. Пакет хорошо документирован, все непонятные моменты можно прояснить, просто изучив структуру объекта на каждом этапе работы алгоритма.
MICE
Пакет MICE[2] используется для заполнения пропущенных значений в данных. При этом нет необходимости думать о типах значений: для каждого из них в пакете предусмотрено заполнение по умолчанию.
Ggplot2
Данный пакет[3] используется для отрисовки данных и графиков.
Пакеты с реализованными алгоритмами машинного обучения
Caret
В данном пакете [4] представлены модели для регрессии и классификации, а также большая часть популярных метрик. В настоящее время имеется возможность использовать более 180 различных алгоритмов. Основная функция в составе Caret - функция train(). Параметры обучения в ней задаются аргументом trControl, а оценка качества модели - аргументом metric. Отличительными особенностями Caret является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений.
Mlr
В пакете Mlr [5] представлены модели для регрессии, классификации, кластеризации и анализа выживаемости, а также широкие возможности для оценки качества (в том числе функции для анализа ROC-кривых). Есть поддержка параллельных вычислений и конвейерных операций.
H2O
В пакете H20 [6] представлены линейные модели, такие как градиентный бустинг, PCA, GLRM, KNN, Radom forest, наивный Байесовский классификатор. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений.Однако в ней нет возможности задавать параметры используемых алгоритмов
Примеры алгоритмов
В интернете много хороших примеров реализации алгоритмов на R, но среди них хотелось бы особо отметить один учебник[7] c портала coderlessons.com. В нем представлена реализация основных алгоритмов в порядке, удобном для изучения.
Задачи регрессии
Линейная регрессия
#$$reading data data <- read.csv("input.csv", sep = ',', header = FALSE) #evaluating linear regression model model <- lm(data$x ~ data$y) #getting summary print(summary(model)) #visualizing data plot(data$y, data$x) lines(data$y, predict(fit), col = 'red')
Множественная регрессия
#$$reading data rdata <- read.csv("input.csv", sep = ',', header = FALSE) #evaluating regression model model <- lm(target ~ x + y + z, data = rdata) #getting summary print(summary(model))
Логистическая регрессия
Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке R представлена в следующем фрагменте:
#$$reading data rdata <- read.csv("input.csv", sep = ',', header = FALSE) #evaluating model model = glm(formula = target ~ x + y + z, data = rdata, family = binomial) #printing summary print(summary(model))
Деревья решений, случайный лес
Деревья решений
Для создания деревьев решений в R используется функция ctree из пакета party.
#importing package install.packages("party") #reading data rdata <- read.csv("input.csv", sep = ',', header = FALSE) #evaluating model output.tree <- ctree(target ~ x + y + z, data = rdata) #plotting results plot(output.tree)
Случайный лес
Для создания случайного леса необходимо импортировать пакет randomForest
#importing packages install.packages("party") install.packages("randomForest") #reading data rdata <- read.csv("input.csv", sep = ',', header = FALSE) #creating the forest output.forest <- randomForest(target ~ x + y + z, data = rdata) #getting results print(output.forest)
Наивный Бейесовский классификатор
#$$importing package and it's dependencies library(e1071) #reading data data <- read.csv("input.csv", sep = ',', header = FALSE) #splitting data into training and test data sets index <- createDataPartition(y = data$target, p = 0.8,list = FALSE) training <- data[index,] testing <- data[-index,] #create objects x and y for predictor and response variables x = training[,-9] y = training$target #training model model = train(x,y,'nb',trControl=trainControl(method='cv',number=10)) #predicting results predictions <- predict(model, newdata = testing)
SVM
#$$ importing package and its' dependencies library(caret) #reading data data <- read.csv("input.csv", sep = ',', header = FALSE) #splitting data into train and test sets index <- createDataPartition(y = data$target, p=0.8, list = FALSE) training <- data[index,] testing <- data[-index,] #evaluating model fit <- train(target ~ x + y + z, data = train_flats, method = "svmRadial", trControl = trainControl(method = "repeatedcv", number = 10, repeats = 3)) #printing parameters print(fit)
Кластеризация
Для реализации алгоритма кластеризации k-средних используется пакет ClusterR. В нем реализовано 2 функции: KMeans_arma и KMeans_rcpp. В примере далее рассмотрена реализация с использованием функции KMeans_arma.
#$$ importing package and its' dependencies library(ClusterR) #reading data data <- read.csv("data.csv") #evaluating model model = KMeans_arma(data, clusters = 2, n_iter = 10, seed_mode = "random_subset", verbose = T, CENTROIDS = NULL) #predicting results predictions = predict_KMeans(test_data, model)