Примеры кода на R
Особенности написания кода на 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)