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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Примеры алгоритмов)
(GBM)
(не показаны 22 промежуточные версии этого же участника)
Строка 31: Строка 31:
 
==== Party ====
 
==== Party ====
 
Пакет <code>Party</code> <ref>[https://cran.r-project.org/web/packages/party/index.html party package main info page]</ref> содержит в себе инструменты для рекурсивного разбиения данных на классы. В пакета также доступна расширяемая функциональность для визуализации древовидных регрессионных моделей.  
 
Пакет <code>Party</code> <ref>[https://cran.r-project.org/web/packages/party/index.html party package main info page]</ref> содержит в себе инструменты для рекурсивного разбиения данных на классы. В пакета также доступна расширяемая функциональность для визуализации древовидных регрессионных моделей.  
Основная функция пакета — <code>ctree()</code>, которая используется для создания деревьев решения для таких задач регрессии как номинальные, порядковые, числовые а также многовариантные переменные отклика. На основе деревьев условного вывода <code>cforest()</code> предоставляет реализацию случайных лесов Бреймана. Функция <code>mob()</code> реализует алгоритм рекурсивного разделения на основе параметрических моделей (например, линейных моделей, GLM или регрессии выживания), использующих тесты нестабильности параметров для выбора разделения.
+
Основная функция пакета — <code>ctree()</code>, которая используется для создания деревьев решения для таких задач регрессии как номинальные, порядковые, числовые а также многовариантные переменные отклика. На основе деревьев условного вывода <code>cforest()</code> предоставляет реализацию ''случайных лесов Бреймана''. Функция <code>mob()</code> реализует алгоритм рекурсивного разделения на основе параметрических моделей (например, ''линейных моделей'', ''GLM'' или ''регрессии выживания''), использующих тесты нестабильности параметров для выбора разделения.
 +
 
 
==== RandomForest ====
 
==== RandomForest ====
<code>RandomForest</code> <ref>[https://cran.r-project.org/web/packages/randomForest/index.html RandomForest package main info]</ref> — пакет с реализацией алгоритма randomForest. Используется для решения задач регрессии и классификации, а также для поиска аномалий и отбора предикторов.  
+
<code>RandomForest</code> <ref>[https://cran.r-project.org/web/packages/randomForest/index.html RandomForest package main info]</ref> — пакет с реализацией алгоритма ''[[Дерево решений и случайный лес | randomForest]]''. Используется для решения задач регрессии и классификации, а также для поиска аномалий и отбора предикторов.
 +
 
 
==== ClusterR ====
 
==== ClusterR ====
Пакет <code>ClusterR</code> <ref>[https://cran.r-project.org/web/packages/ClusterR/vignettes/the_clusterR_package.html ClusterR documentation]</ref> состоит из алгоритмов кластеризации на основе центроидов (k-means, mini-batch-kmeans, k-medoids) и распределений (GMM). Кроме того, пакет предлагает функции для:
+
Пакет <code>ClusterR</code> <ref>[https://cran.r-project.org/web/packages/ClusterR/vignettes/the_clusterR_package.html ClusterR documentation]</ref> состоит из алгоритмов кластеризации на основе центроидов (''k-means'', ''mini-batch-kmeans'', ''k-medoids'') и распределений (''GMM''). Кроме того, пакет предлагает функции для:
* проверки результатов
+
* проверки результатов,
* построения графика результатов, используя либо силуэт, либо 2-мерный график,
+
* построения графика результатов, используя ''[[Оценка качества в задаче кластеризации |метрики]]''
 
* прогнозирования новых наблюдения,
 
* прогнозирования новых наблюдения,
*оценки оптимального количества кластеров для каждого алгоритма  
+
* оценки оптимального количества кластеров для каждого алгоритма
 +
 
 
==== E1071 ====
 
==== E1071 ====
Пакет <ref>[https://www.rdocumentation.org/packages/e1071/versions/1.7-3 1071 package documentation]</ref> содержит в себя функции для анализа классов, кратковременного преобразование Фурье, нечеткой кластеризации, реализации SVM, вычисления кратчайшего пути, а также реализации наивного байесовского классификатора.
+
Пакет <ref>[https://www.rdocumentation.org/packages/e1071/versions/1.7-3 1071 package documentation]</ref> содержит в себя функции для анализа классов, ''кратковременного преобразование Фурье'', ''нечеткой кластеризации'', реализации ''[[Метод опорных векторов (SVM) | SVM]]'', ''вычисления кратчайшего пути'', а также реализации ''наивного байесовского классификатора''.
 +
 
 
==== Mlr ====
 
==== Mlr ====
В пакете <code>Mlr</code> <ref>[https://cran.r-project.org/web/packages/mlr/mlr.pdf Mlr package documentation]</ref> представлены модели для регрессии, классификации, кластеризации и анализа выживаемости, а также  широкие возможности для оценки качества (в том числе функции для анализа ROC-кривых).
+
В пакете <code>Mlr</code> <ref>[https://cran.r-project.org/web/packages/mlr/mlr.pdf Mlr package documentation]</ref> представлены модели для регрессии, классификации, кластеризации и анализа выживаемости, а также  широкие возможности для оценки качества (в том числе функции для анализа ''[https://en.wikipedia.org/wiki/Receiver_operating_characteristic ROC-кривых]'').
 
Есть поддержка параллельных вычислений и конвейерных операций.
 
Есть поддержка параллельных вычислений и конвейерных операций.
 +
 
==== H2O ====
 
==== H2O ====
В пакете <code>H20</code> <ref>[https://cran.r-project.org/web/packages/h2o/index.html H20 main info page]</ref> представлены линейные модели, такие как градиентный бустинг, PCA, GLRM, KNN, Radom forest, наивный Байесовский классификатор. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений.Однако в ней нет возможности задавать параметры используемых алгоритмов
+
В пакете <code>H20</code> <ref>[https://cran.r-project.org/web/packages/h2o/index.html H20 main info page]</ref> представлены линейные модели, такие как ''[[Бустинг, AdaBoost |градиентный бустинг]]'', ''[[Метод главных компонент (PCA)|PCA]]'', ''GLRM'', ''KNN'', ''[[Дерево решений и случайный лес|RadomForest]]'', ''наивный Байесовский классификатор''. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений. Однако в ней нет возможности задавать параметры используемых алгоритмов
  
 
== Примеры алгоритмов ==
 
== Примеры алгоритмов ==
Строка 52: Строка 57:
 
=== Задачи регрессии ===
 
=== Задачи регрессии ===
 
==== Линейная регрессия ====
 
==== Линейная регрессия ====
 +
{{Main|Линейная регрессия|ll=Линейная регрессия}}
 
<pre>
 
<pre>
 
#$$reading data
 
#$$reading data
Строка 80: Строка 86:
  
 
==== Логистическая регрессия ====
 
==== Логистическая регрессия ====
Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке R представлена в следующем фрагменте:  
+
{{Main|Логистическая регрессия|ll=Логистическая регрессия}}
 +
Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке <code>R</code> представлена в следующем фрагменте:  
  
 
<pre>
 
<pre>
Строка 94: Строка 101:
  
 
=== PCA ===
 
=== PCA ===
 +
{{Main|Метод главных компонент (PCA)|ll=PCA}}
 
<pre>
 
<pre>
 
#importing library and its' dependencies
 
#importing library and its' dependencies
Строка 107: Строка 115:
  
 
=== Деревья решений, случайный лес ===
 
=== Деревья решений, случайный лес ===
 +
{{Main|Дерево решений и случайный лес |ll=деревьев решений}}
 
==== Деревья решений ====
 
==== Деревья решений ====
Для создания деревьев решений в R используется функция ctree из пакета party.  
+
Для создания ''[[Дерево решений и случайный лес |деревьев решений]]'' в <code>R</code> используется функция <code>ctree()</code> из пакета <code>party</code>.  
  
 
<pre>
 
<pre>
Строка 125: Строка 134:
  
 
==== Случайный лес ====
 
==== Случайный лес ====
Для создания случайного леса необходимо импортировать пакет randomForest
+
Для создания ''[[Дерево решений и случайный лес|случайного леса]]'' необходимо импортировать пакет <code>randomForest</code>
  
 
<pre>
 
<pre>
Строка 144: Строка 153:
  
 
=== Наивный Бейесовский классификатор ===
 
=== Наивный Бейесовский классификатор ===
 
+
{{Main|Байесовская классификация|ll=Байесовская классификация}}
 
<pre>
 
<pre>
 
#$$importing package and it's dependencies
 
#$$importing package and it's dependencies
Строка 169: Строка 178:
  
 
=== SVM ===
 
=== SVM ===
 +
{{Main|Метод опорных векторов (SVM)|ll=SVM}}
 
<pre>
 
<pre>
 
#$$ importing package and its' dependencies
 
#$$ importing package and its' dependencies
Строка 192: Строка 202:
  
 
=== GBM ===
 
=== GBM ===
 +
{{Main|Бустинг, AdaBoost|ll=Бустинг}}
 
<pre>
 
<pre>
 
#loading libraries
 
#loading libraries
Строка 229: Строка 240:
  
 
=== Кластеризация ===
 
=== Кластеризация ===
Для реализации алгоритма кластеризации k-средних используется пакет <code>ClusterR<code>. В нем реализовано 2 функции:  KMeans_arma() и KMeans_rcpp(). В примере далее рассмотрена реализация с использованием функции KMeans_arma().
+
Для реализации алгоритма кластеризации ''k-средних'' используется пакет <code>ClusterR</code>. В нем реализовано 2 функции:  <code>KMeans_arma()</code> и <code>KMeans_rcpp()</code>. В примере далее рассмотрена реализация с использованием функции <code>KMeans_arma()</code>.
  
 
<pre>
 
<pre>

Версия 18:13, 23 апреля 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 является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений.

Party

Пакет Party [5] содержит в себе инструменты для рекурсивного разбиения данных на классы. В пакета также доступна расширяемая функциональность для визуализации древовидных регрессионных моделей. Основная функция пакета — ctree(), которая используется для создания деревьев решения для таких задач регрессии как номинальные, порядковые, числовые а также многовариантные переменные отклика. На основе деревьев условного вывода cforest() предоставляет реализацию случайных лесов Бреймана. Функция mob() реализует алгоритм рекурсивного разделения на основе параметрических моделей (например, линейных моделей, GLM или регрессии выживания), использующих тесты нестабильности параметров для выбора разделения.

RandomForest

RandomForest [6] — пакет с реализацией алгоритма randomForest. Используется для решения задач регрессии и классификации, а также для поиска аномалий и отбора предикторов.

ClusterR

Пакет ClusterR [7] состоит из алгоритмов кластеризации на основе центроидов (k-means, mini-batch-kmeans, k-medoids) и распределений (GMM). Кроме того, пакет предлагает функции для:

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

E1071

Пакет [8] содержит в себя функции для анализа классов, кратковременного преобразование Фурье, нечеткой кластеризации, реализации SVM, вычисления кратчайшего пути, а также реализации наивного байесовского классификатора.

Mlr

В пакете Mlr [9] представлены модели для регрессии, классификации, кластеризации и анализа выживаемости, а также широкие возможности для оценки качества (в том числе функции для анализа ROC-кривых). Есть поддержка параллельных вычислений и конвейерных операций.

H2O

В пакете H20 [10] представлены линейные модели, такие как градиентный бустинг, PCA, GLRM, KNN, RadomForest, наивный Байесовский классификатор. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений. Однако в ней нет возможности задавать параметры используемых алгоритмов

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

В интернете много хороших примеров реализации алгоритмов на R, но среди них хотелось бы особо отметить один учебник[11] 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))

PCA

#importing library and its' dependencies
library(h2o)
h2o.init()

path <- system.file("extdata", "data.csv", package = "h2o")
data <- h2o.uploadFile(path = data)

#evaluating
h2o.prcomp(training_frame = data, k = 8, transform = "STANDARDIZE")

Деревья решений, случайный лес

Деревья решений

Для создания деревьев решений в 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)

GBM

Основная статья: Бустинг, AdaBoost
#loading libraries
install.packages("mlr")
library(mlr)

#loading data
train <- read.csv("input.csv")
test <- read.csv("testInput.csv")

#loading GBM
getParamSet("classif.gbm")
baseLearner <- makeLearner("classif.gbm", predict.type = "response")

#specifying parameters
controlFunction <- makeTuneControlRandom(maxit = 50000)#specifying tuning method
cvFunction <- makeResampleDesc("CV",iters = 100000) #definig cross-validation function

gbmParameters<- makeParamSet(
makeDiscreteParam("distribution", values = "bernoulli"),
makeIntegerParam("n.trees", lower = 100, upper = 1000), #number of trees
makeIntegerParam("interaction.depth", lower = 2, upper = 10), #depth of tree
makeIntegerParam("n.minobsinnode", lower = 10, upper = 80),
makeNumericParam("shrinkage",lower = 0.01, upper = 1)
)

#tunning parameters
gbmTuningParameters <- tuneParams(learner = baseLearner, task = trainTask,resampling = cvFunction,measures = acc,par.set = gbmParameters,control = controlFunction)

#creating model parameters
model <- setHyperPars(learner = baseLearner, par.vals = gbmTuningParameters)

#evaluating model
fit <- train(model, train)
predictions <- predict(fit, test)

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

Для реализации алгоритма кластеризации 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)

См. также

Примечания