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

Материал из Викиконспекты
Перейти к: навигация, поиск
(GBM)
м (Подсветка синтаксиса)
Строка 4: Строка 4:
  
 
Язык постоянно расширяется за счёт новых библиотек (пакетов). Для импорта одного пакета необходимо прописать в файле следующие строки:
 
Язык постоянно расширяется за счёт новых библиотек (пакетов). Для импорта одного пакета необходимо прописать в файле следующие строки:
<pre>
+
 
install.packages("packageName")
+
  install.packages(<font color="green">"packageName"</font>)
require("packageName")
+
  require(<font color="green">"packageName"</font>)
</pre>
 
  
 
Для того чтобы импортировать пакет с его зависимостями в код следует включить следующие строки:   
 
Для того чтобы импортировать пакет с его зависимостями в код следует включить следующие строки:   
<pre>
+
 
library("packageName")
+
  library(<font color="green">"packageName"</font>)
</pre>
 
  
 
== Описание известных пакетов ==
 
== Описание известных пакетов ==
Строка 58: Строка 56:
 
==== Линейная регрессия ====
 
==== Линейная регрессия ====
 
{{Main|Линейная регрессия|ll=Линейная регрессия}}
 
{{Main|Линейная регрессия|ll=Линейная регрессия}}
<pre>
 
#$$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  
+
<font color="gray"># reading data</font>
plot(data$y, data$x)
+
data <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
lines(data$y, predict(fit), col = 'red')
+
</pre>
+
<font color="gray"># evaluating linear regression model</font>
 +
model <- lm(data$<strong><font color="#660E7A">x</font></strong> ~ data$<strong><font color="#660E7A">y</font></strong>)
 +
 +
<font color="gray"># getting summary</font>
 +
print(summary(model))
 +
 +
<font color="gray"># visualizing data</font>
 +
plot(data$<strong><font color="#660E7A">y</font></strong>, data$<strong><font color="#660E7A">x</font></strong>)
 +
lines(data$<strong><font color="#660E7A">y</font></strong>, predict(fit), <font color="#660099">col</font> = <font color="green">'red'</font>)
  
 
==== Множественная регрессия ====
 
==== Множественная регрессия ====
<pre>
 
#$$reading data
 
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
 
 
#evaluating regression model
 
model <- lm(target ~ x + y + z, data = rdata)
 
  
#getting summary  
+
<font color="gray"># reading data</font>
print(summary(model))
+
rdata <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
</pre>
+
 +
<font color="gray"># evaluating regression model</font>
 +
model <- lm(target ~ x + y + z, <font color="#660099">data</font> = rdata)
 +
 +
<font color="gray"># getting summary</font>
 +
print(summary(model))
  
 
==== Логистическая регрессия ====
 
==== Логистическая регрессия ====
Строка 89: Строка 85:
 
Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке <code>R</code> представлена в следующем фрагменте:  
 
Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке <code>R</code> представлена в следующем фрагменте:  
  
<pre>
+
<font color="gray"># reading data</font>
#$$reading data
+
rdata <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
+
 
+
<font color="gray"># evaluating model</font>
#evaluating model
+
model = glm(<font color="#660099">formula</font> = target ~ x + y + z, <font color="#660099">data</font> = rdata, <font color="#660099">family</font> = binomial)
model = glm(formula = target ~ x + y + z, data = rdata, family = binomial)
+
 
+
<font color="gray"># printing summary</font>
#printing summary
+
print(summary(model))
print(summary(model))
 
</pre>
 
  
 
=== PCA ===
 
=== PCA ===
 
{{Main|Метод главных компонент (PCA)|ll=PCA}}
 
{{Main|Метод главных компонент (PCA)|ll=PCA}}
<pre>
 
#importing library and its' dependencies
 
library(h2o)
 
h2o.init()
 
 
path <- system.file("extdata", "data.csv", package = "h2o")
 
data <- h2o.uploadFile(path = data)
 
  
#evaluating
+
<font color="gray"># importing library and its' dependencies</font>
h2o.prcomp(training_frame = data, k = 8, transform = "STANDARDIZE")
+
library(h2o)
</pre>
+
h2o.init()
 +
 +
path <- system.file(<font color="green">"extdata"</font>, <font color="green">"data.csv"</font>, <font color="#660099">package</font> = <font color="green">"h2o"</font>)
 +
data <- h2o.uploadFile(<font color="#660099">path</font> = data)
 +
 +
<font color="gray"># evaluating</font>
 +
h2o.prcomp(<font color="#660099">training_frame</font> = data, <font color="#660099">k</font> = <font color="blue">8</font>, <font color="#660099">transform</font> = <font color="green">"STANDARDIZE"</font>)
  
 
=== Деревья решений, случайный лес ===
 
=== Деревья решений, случайный лес ===
Строка 119: Строка 112:
 
Для создания ''[[Дерево решений и случайный лес |деревьев решений]]'' в <code>R</code> используется функция <code>ctree()</code> из пакета <code>party</code>.  
 
Для создания ''[[Дерево решений и случайный лес |деревьев решений]]'' в <code>R</code> используется функция <code>ctree()</code> из пакета <code>party</code>.  
  
<pre>
+
<font color="gray"># importing package </font>
#importing package  
+
install.packages(<font color="green">"party"</font>)
install.packages("party")
+
 
+
<font color="gray"># reading data</font>
#reading data
+
rdata <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
+
 
+
<font color="gray"># evaluating model</font>
#evaluating model
+
output.tree <- ctree(target ~ x + y + z, <font color="#660099">data</font> = rdata)
  output.tree <- ctree(target ~ x + y + z, data = rdata)
+
 
+
<font color="gray"># plotting results</font>
#plotting results
+
plot(output.tree)
plot(output.tree)
 
</pre>
 
  
 
==== Случайный лес ====
 
==== Случайный лес ====
 
Для создания ''[[Дерево решений и случайный лес|случайного леса]]'' необходимо импортировать пакет <code>randomForest</code>
 
Для создания ''[[Дерево решений и случайный лес|случайного леса]]'' необходимо импортировать пакет <code>randomForest</code>
  
<pre>
+
<font color="gray"># importing packages </font>
#importing packages  
+
install.packages(<font color="green">"party"</font>)
install.packages("party")
+
install.packages(<font color="green">"randomForest"</font>)
install.packages("randomForest")
+
 
+
<font color="gray"># reading data</font>
#reading data
+
rdata <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
rdata <- read.csv("input.csv", sep = ',', header = FALSE)
+
 
+
<font color="gray"># creating the forest</font>
#creating the forest
+
output.forest <- randomForest(target ~ x + y + z, <font color="#660099">data</font> = rdata)
output.forest <- randomForest(target ~ x + y + z,  
+
          data = rdata)
+
<font color="gray"># getting results</font>
 
+
print(output.forest)  
#getting results
 
print(output.forest)  
 
</pre>
 
  
 
=== Наивный Бейесовский классификатор ===
 
=== Наивный Бейесовский классификатор ===
 
{{Main|Байесовская классификация|ll=Байесовская классификация}}
 
{{Main|Байесовская классификация|ll=Байесовская классификация}}
<pre>
 
#$$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
+
<font color="gray"># importing package and it's dependencies</font>
index <- createDataPartition(y = data$target, p = 0.8,list = FALSE)
+
library(e1071)
training <- data[index,]
+
testing <- data[-index,]
+
<font color="gray"># reading data</font>
 
+
data <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
#create objects x and y for predictor and response variables
+
x = training[,-9]
+
<font color="gray"># splitting data into training and test data sets</font>
y = training$target
+
index <- createDataPartition(<font color="#660099">y</font> = data$<strong><font color="#660E7A">target</font></strong>, <font color="#660099">p</font> = <font color="blue">0.8</font>, <font color="#660099">list</font> = FALSE)
 
+
training <- data[index,]
#training model
+
testing <- data[-index,]
model = train(x,y,'nb',trControl=trainControl(method='cv',number=10))
+
 
+
<font color="gray"># create objects x and y for predictor and response variables</font>
#predicting results
+
x <- training[, -<font color="blue">9</font>]
predictions <- predict(model, newdata = testing)
+
y <- training$<strong><font color="#660E7A">target</font></strong>
</pre>
+
 +
<font color="gray"># training model</font>
 +
model <- train(x, y, <font color="green">'nb'</font>, <font color="#660099">trControl</font> = trainControl(<font color="#660099">method</font> = <font color="green">'cv'</font>, <font color="#660099">number</font> = <font color="blue">10</font>))
 +
 +
<font color="gray"># predicting results</font>
 +
predictions <- predict(model, <font color="#660099">newdata</font> = testing)
  
 
=== SVM ===
 
=== SVM ===
 
{{Main|Метод опорных векторов (SVM)|ll=SVM}}
 
{{Main|Метод опорных векторов (SVM)|ll=SVM}}
<pre>
 
#$$ 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
+
<font color="gray"># importing package and its' dependencies</font>
print(fit)
+
library(caret)
</pre>
+
 +
<font color="gray">#reading data</font>
 +
data <- read.csv(<font color="green">"input.csv"</font>, <font color="#660099">sep</font> = <font color="green">','</font>, <font color="#660099">header</font> = FALSE)
 +
 +
<font color="gray"># splitting data into train and test sets</font>
 +
index <- createDataPartition(<font color="#660099">y</font> = data$<strong><font color="#660E7A">target</font></strong>, <font color="#660099">p</font> = <font color="blue">0.8</font>, <font color="#660099">list</font> = FALSE)
 +
training <- data[index,]
 +
testing <- data[-index,]
 +
 +
<font color="gray"># evaluating model</font>
 +
fit <- train(target ~ x + y + z,
 +
              <font color="#660099">data</font> = train_flats,
 +
              <font color="#660099">method</font> = <font color="green">"svmRadial"</font>,
 +
              <font color="#660099">trControl</font> = trainControl(<font color="#660099">method</font> = <font color="green">"repeatedcv"</font>, <font color="#660099">number</font> = <font color="blue">10</font>, <font color="#660099">repeats</font> = <font color="blue">3</font>))
 +
 +
<font color="gray"># printing parameters</font>
 +
print(fit)
  
 
=== GBM ===
 
=== GBM ===
 
{{Main|Бустинг, AdaBoost|ll=Бустинг}}
 
{{Main|Бустинг, AdaBoost|ll=Бустинг}}
<pre>
 
#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
+
<font color="gray"># loading libraries</font>
controlFunction <- makeTuneControlRandom(maxit = 50000)#specifying tuning method
+
install.packages(<font color="green">"mlr"</font>)
cvFunction <- makeResampleDesc("CV",iters = 100000) #definig cross-validation function
+
library(mlr)
 
+
gbmParameters<- makeParamSet(
+
<font color="gray"># loading data</font>
makeDiscreteParam("distribution", values = "bernoulli"),
+
train <- read.csv(<font color="green">"input.csv"</font>)
makeIntegerParam("n.trees", lower = 100, upper = 1000), #number of trees
+
test <- read.csv(<font color="green">"testInput.csv"</font>)
makeIntegerParam("interaction.depth", lower = 2, upper = 10), #depth of tree
+
makeIntegerParam("n.minobsinnode", lower = 10, upper = 80),
+
<font color="gray"># loading GBM</font>
makeNumericParam("shrinkage",lower = 0.01, upper = 1)
+
getParamSet(<font color="green">"classif.gbm"</font>)
)
+
baseLearner <- makeLearner(<font color="green">"classif.gbm"</font>, <font color="#660099">predict.type</font> = <font color="green">"response"</font>)
 
+
#tunning parameters
+
<font color="gray"># specifying parameters</font>
gbmTuningParameters <- tuneParams(learner = baseLearner, task = trainTask,resampling = cvFunction,measures = acc,par.set = gbmParameters,control = controlFunction)
+
controlFunction <- makeTuneControlRandom(<font color="#660099">maxit</font> = <font color="blue">50000</font>) <font color="gray"># specifying tuning method</font>
 
+
cvFunction <- makeResampleDesc(<font color="green">"CV"</font>, <font color="#660099">iters</font> = <font color="blue">100000</font>) <font color="gray"># definig cross-validation function</font>
#creating model parameters
+
model <- setHyperPars(learner = baseLearner, par.vals = gbmTuningParameters)
+
gbmParameters<- makeParamSet(
 
+
  makeDiscreteParam(<font color="green">"distribution"</font>, <font color="#660099">values</font> = <font color="green">"bernoulli"</font>),
#evaluating model
+
  makeIntegerParam(<font color="green">"n.trees"</font>, <font color="#660099">lower</font> = <font color="blue">100</font>, <font color="#660099">upper</font> = <font color="blue">1000</font>), <font color="gray"># number of trees</font>
fit <- train(model, train)
+
  makeIntegerParam(<font color="green">"interaction.depth"</font>, <font color="#660099">lower</font> = <font color="blue">2</font>, <font color="#660099">upper</font> = <font color="blue">10</font>), <font color="gray"># depth of tree</font>
predictions <- predict(fit, test)
+
  makeIntegerParam(<font color="green">"n.minobsinnode"</font>, <font color="#660099">lower</font> = <font color="blue">10</font>, <font color="#660099">upper</font> = <font color="blue">80</font>),
</pre>
+
  makeNumericParam(<font color="green">"shrinkage"</font>, <font color="#660099">lower</font> = <font color="blue">0.01</font>, <font color="#660099">upper</font> = <font color="blue">1</font>)
 +
)
 +
 +
<font color="gray"># tunning parameters</font>
 +
gbmTuningParameters <- tuneParams(<font color="#660099">learner</font> = baseLearner,
 +
                                  <font color="#660099">task</font> = trainTask,
 +
                                  <font color="#660099">resampling</font> = cvFunction,
 +
                                  <font color="#660099">measures</font> = acc,
 +
                                  <font color="#660099">par.set</font> = gbmParameters,
 +
                                  <font color="#660099">control</font> = controlFunction)
 +
 +
<font color="gray"># creating model parameters</font>
 +
model <- setHyperPars(<font color="#660099">learner</font> = baseLearner, <font color="#660099">par.vals</font> = gbmTuningParameters)
 +
 +
<font color="gray"># evaluating model</font>
 +
fit <- train(model, train)
 +
predictions <- predict(fit, test)
  
 
=== Кластеризация ===
 
=== Кластеризация ===
 
Для реализации алгоритма кластеризации ''k-средних'' используется пакет <code>ClusterR</code>. В нем реализовано 2 функции:  <code>KMeans_arma()</code> и <code>KMeans_rcpp()</code>. В примере далее рассмотрена реализация с использованием функции <code>KMeans_arma()</code>.
 
Для реализации алгоритма кластеризации ''k-средних'' используется пакет <code>ClusterR</code>. В нем реализовано 2 функции:  <code>KMeans_arma()</code> и <code>KMeans_rcpp()</code>. В примере далее рассмотрена реализация с использованием функции <code>KMeans_arma()</code>.
  
<pre>
+
<font color="gray"># importing package and its' dependencies</font>
#$$ importing package and its' dependencies
+
library(ClusterR)
library(ClusterR)
+
 
+
<font color="gray"># reading data</font>
#reading data
+
data <- read.csv(<font color="green">"data.csv"</font>)
data <- read.csv("data.csv")
+
 
+
<font color="gray"># evaluating model</font>
#evaluating model
+
model <- KMeans_arma(data, <font color="#660099">clusters</font> = <font color="blue">2</font>, <font color="#660099">n_iter</font> = <font color="blue">10</font>, <font color="#660099">seed_mode</font> = <font color="green">"random_subset"</font>,  
model = KMeans_arma(data, clusters = 2, n_iter = 10, seed_mode = "random_subset",  
+
                      <font color="#660099">verbose</font> = T, <font color="#660099">CENTROIDS</font> = NULL)
                verbose = T, CENTROIDS = NULL)
+
 
+
<font color="gray"># predicting results</font>
#predicting results
+
predictions <- predict_KMeans(test_data, model)
predictions = predict_KMeans(test_data, model)
 
 
 
</pre>
 
  
 
==См. также==
 
==См. также==

Версия 18:52, 28 сентября 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)

См. также

Примечания