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

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Описание основных пакетов)
(Примеры алгоритмов)
Строка 38: Строка 38:
 
==== Линейная регрессия ====
 
==== Линейная регрессия ====
 
<pre>
 
<pre>
#$$Читаем данные
+
#$$reading data
data <- read.delim('input.dat', header = TRUE)
+
data <- read.csv("input.csv", sep = ',', header = FALSE)
  
#Создаем модель
+
#evaluating linear regression model
data.x <- lm(data$x ~ data$y)
+
model <- lm(data$x ~ data$y)
  
#Получаем информацию о созданной модели
+
#getting summary
summary(data.x)
+
print(summary(model))
  
#Визуализируем данные
+
#visualizing data
 
plot(data$y, data$x)
 
plot(data$y, data$x)
lines(data$y, predict(data.x), col = 'red')
+
lines(data$y, predict(fit), col = 'red')
 
</pre>
 
</pre>
  
 
==== Множественная регрессия ====
 
==== Множественная регрессия ====
 
 
<pre>
 
<pre>
#$$Читаем данные
+
#$$reading data
data <- read.delim('input.dat', header = TRUE)
+
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
  
#Создаем модель множественной регрессии
+
#evaluating regression model
fit <- lm(target ~ x + y + z, data = data)
+
model <- lm(target ~ x + y + z, data = rdata)
  
#Получаем информацию о созданной модели
+
#getting summary
summary(fit)
+
print(summary(model))
 
</pre>
 
</pre>
  
Строка 69: Строка 68:
  
 
<pre>
 
<pre>
#reding data
+
#$$reading data
data <- rawData[,c("target","x","y","z")]
+
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
  
#creating model using glm function
+
#evaluating model
target.data = glm(formula = target ~ x + y + z, data = data, family = binomial)
+
model = glm(formula = target ~ x + y + z, data = rdata, family = binomial)
  
 
#printing summary
 
#printing summary
print(summary(target.data))
+
print(summary(model))
 
</pre>
 
</pre>
  
Строка 88: Строка 87:
  
 
#reading data
 
#reading data
data <- read.delim('input.dat', header = TRUE)
+
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
  
#creating model  
+
#evaluating model
   output.tree <- ctree(target ~ x + y + z, data = data)
+
   output.tree <- ctree(target ~ x + y + z, data = rdata)
  
 
#plotting results
 
#plotting results
 
plot(output.tree)
 
plot(output.tree)
 
 
</pre>
 
</pre>
  
Строка 107: Строка 105:
  
 
#reading data
 
#reading data
data <- read.delim('input.dat', header = TRUE)
+
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
  
 
#creating the forest
 
#creating the forest
 
output.forest <- randomForest(target ~ x + y + z,  
 
output.forest <- randomForest(target ~ x + y + z,  
           data = data)
+
           data = rdata)
  
 
#getting results
 
#getting results
Строка 117: Строка 115:
 
</pre>
 
</pre>
  
=== Байессовская классификация ===
+
=== Байесовская классификация ===
  
 
<pre>
 
<pre>
Строка 124: Строка 122:
  
 
#reading data
 
#reading data
data<- read.csv("input.csv")
+
data <- read.csv("input.csv", sep = ',', header = FALSE)
  
 
#splitting data into training and test data sets
 
#splitting data into training and test data sets
Строка 131: Строка 129:
 
testing <- data[-index,]
 
testing <- data[-index,]
  
#create objects x which holds the predictor variables and y which holds the response variables
+
#create objects x and y for predictor and response variables
 
x = training[,-9]
 
x = training[,-9]
 
y = training$target
 
y = training$target
  
 +
#training model
 
model = train(x,y,'nb',trControl=trainControl(method='cv',number=10))
 
model = train(x,y,'nb',trControl=trainControl(method='cv',number=10))
  
predictions <- predict(model,newdata = testing )
+
#predicting results
</pre>
+
predictions <- predict(model, newdata = testing)
 
 
=== Кластеризация ===
 
 
 
<pre>
 
install.package("ClusterR")
 
data <- read.csv("data.csv")
 
 
 
km = KMeans_arma(data, clusters = 2, n_iter = 10, seed_mode = "random_subset",
 
                verbose = T, CENTROIDS = NULL)
 
pr = predict_KMeans(pca_dat, km)
 
 
 
 
</pre>
 
</pre>
  
Строка 164: Строка 152:
 
training <- data[index,]
 
training <- data[index,]
 
testing <- data[-index,]
 
testing <- data[-index,]
 
 
#defining training function
 
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
 
  
 
#evaluating model  
 
#evaluating model  
Строка 173: Строка 157:
 
             data = train_flats,
 
             data = train_flats,
 
             method = "svmRadial",
 
             method = "svmRadial",
             trControl = ctrl)
+
             trControl = trainControl(method = "repeatedcv", number = 10, repeats = 3))
  
 
#printing parameters
 
#printing parameters
 
print(fit)
 
print(fit)
 +
</pre>
 +
 +
=== Кластеризация ===
 +
Для реализации алгоритма кластеризации k-средних используется пакет ClusterR. В нем реализовано 2 функции:  KMeans_arma и KMeans_rcpp. В примере далее рассмотрена реализация с использованием функции KMeans_arma.
 +
 +
<pre>
 +
#$$ 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)
 +
 
</pre>
 
</pre>
  
 
== См. также ==
 
== См. также ==
 
== Примечания ==
 
== Примечания ==

Версия 18:02, 20 апреля 2020

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

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

Язык постоянно расширяется за счёт новых библиотек (пакетов). Для импорта одного пакета необходимо прописать в файле следующие строки:

install.packages("packageName")
require("packageName")

Для того чтобы импортировать пакет с его зависимостями в код следует включить следующие строки:

library("packageName")

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

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

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

Pipelearner

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

MICE

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

Ggplot2

Данный пакет используется для отрисовки данных и графиков.

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

Caret

В данном пакете представлены модели для регрессии и классификации, а также большая часть популярных метрик. В настоящее время имеется возможность использовать более 180 различных алгоритмов. Основная функция в составе Caret - функция train(). Параметры обучения в ней задаются аргументом trControl, а оценка качества модели - аргументом metric. Отличительными особенностями Caret является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений.

Mlr

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

H2O

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

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

Задачи регрессии

Линейная регрессия

#$$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)

См. также

Примечания