Изменения

Перейти к: навигация, поиск

Примеры кода на R

8452 байта добавлено, 18:13, 23 апреля 2020
GBM
== Особенности написания кода на R ==
<code>Язык R </code> изначально создавался как язык программирования для работы с графикой и статистической обработки данных. Поэтому он отличается большим количеством реализованных статистических алгоритмов, на основе которых можно создавать модели и алгоритмы машинного обучения.
Язык постоянно расширяется за счёт новых библиотек (пакетов). Для импорта одного пакета необходимо прописать в файле следующие строки:
<pre>
install.packages("packageName")
require("packageName")
</pre>
</pre>
== Описание основных известных пакетов ==Для языка <code>R</code> написано много пакетов, каждый из которых предназначен для решения определенного круга проблем. Например, для обработки данных или реализации основных алгоритмов. В статье представлено несколько наиболее часто используемых пакетов.
===Пакеты для обработки данных===
==== Pipelearner ====
Пакет <code>Pipelearner</code><ref>[https://github.com/drsimonj/pipelearner Pipelearner github repository]</ref> предоставляет базовые возможности для разбиения набора данных на блоки для обучения моделей. В основе пакета лежит концепция работы конвейера. Пакет хорошо документирован, все непонятные моменты можно прояснить, просто изучив структуру объекта на каждом этапе работы алгоритма. 
==== MICE ====
Пакет <code>MICE </code><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> используется для отрисовки данных и графиков. ===Пакеты с реализованными алгоритмами машинного обучения===
==== Caret ====
В данном пакете <ref>[http://topepo.github.io/caret/index.html Caret guide book]</ref> представлены модели для регрессии и классификации, а также большая часть популярных метрик. В настоящее время имеется возможность использовать более 180 различных алгоритмов. Основная функция в составе <code>Caret - </code> — функция <code>train()</code>. Параметры обучения в ней задаются аргументом <code>trControl</code>, а оценка качества модели - аргументом <code>metric</code>.Отличительными особенностями <code>Caret </code> является универсальность используемых команд, наличие автоматического подбора гиперпараметров для алгоритмов, в также наличие параллельных вычислений.==== Party ====Пакет <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'' или ''регрессии выживания''), использующих тесты нестабильности параметров для выбора разделения. ==== RandomForest ====<code>RandomForest</code> <ref>[https://cran.r-project.org/web/packages/randomForest/index.html RandomForest package main info]</ref> — пакет с реализацией алгоритма ''[[Дерево решений и случайный лес | randomForest]]''. Используется для решения задач регрессии и классификации, а также для поиска аномалий и отбора предикторов. ==== 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''). Кроме того, пакет предлагает функции для:* проверки результатов,* построения графика результатов, используя ''[[Оценка качества в задаче кластеризации |метрики]]''* прогнозирования новых наблюдения,* оценки оптимального количества кластеров для каждого алгоритма ==== E1071 ====Пакет <ref>[https://www.rdocumentation.org/packages/e1071/versions/1.7-3 1071 package documentation]</ref> содержит в себя функции для анализа классов, ''кратковременного преобразование Фурье'', ''нечеткой кластеризации'', реализации ''[[Метод опорных векторов (SVM) | SVM]]'', ''вычисления кратчайшего пути'', а также реализации ''наивного байесовского классификатора''. 
==== Mlr ====
В пакете <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 ====
В пакете <code>H20</code> <ref>[https://cran.r-project.org/web/packages/h2o/index.html H20 main info page]</ref> представлены линейные модели, такие как ''[[Бустинг, AdaBoost |градиентный бустинг]]'', нейросети прямого распространения, ''[[Метод главных компонент (PCA)|PCA]]'', ''GLRM'', ''KNN'', Radom forest''[[Дерево решений и случайный лес|RadomForest]]'', ''наивный Байесовский классификатор''. Сильная сторона этой библиотеки – работа с большими объемами данных и поддержка многопоточных вычислений.Однако в ней нет возможности задавать параметры используемых алгоритмов
== Примеры алгоритмов ==
В интернете много хороших примеров реализации алгоритмов на <code>R</code>, но среди них хотелось бы особо отметить один учебник<ref>[https://coderlessons.com/tutorials/kompiuternoe-programmirovanie/learn-r-programmirovanie/uchebnik-po-r Учебник по R]</ref> c портала coderlessons.com. В нем представлена реализация основных алгоритмов в порядке, удобном для изучения.
=== Задачи регрессии ===
==== Линейная регрессия ====
{{Main|Линейная регрессия|ll=Линейная регрессия}}
<pre>
#$$Читаем данныеreading datadata <- read.delimcsv('"input.datcsv", sep = ',', header = TRUEFALSE)
#Создаем модель evaluating linear regression modeldata.x model <- lm(data$x ~ data$y)
#Получаем информацию о созданной моделиgetting summary print(summary(data.xmodel))
#Визуализируем данныеvisualizing data
plot(data$y, data$x)
lines(data$y, predict(data.xfit), col = 'red')
</pre>
==== Множественная регрессия ====
 
<pre>
#$$Читаем данныеreading datadata rdata <- read.delimcsv('"input.datcsv", sep = ',', header = TRUEFALSE)
#Создаем модель множественной регрессииevaluating regression modelfit model <- lm(target ~ x + y + z, data = datardata)
#Получаем информацию о созданной моделиgetting summary print(summary(fitmodel))
</pre>
==== Логистическая регрессия ====
{{Main|Логистическая регрессия|ll=Логистическая регрессия}}Логистическая регрессия – это модель регрессии, в которой переменная ответа принимает значения 0 или 1 (True или False). Реализация на языке <code>R </code> представлена в следующем фрагменте:
<pre>
#reding $$reading datadata rdata <- rawData[,cread.csv("targetinput.csv","x"sep = ',"y"',"z"header = FALSE)]
#creating evaluating model using glm functiontarget.data model = glm(formula = target ~ x + y + z, data = datardata, family = binomial)
#printing summary
print(summary(targetmodel))</pre> === PCA ==={{Main|Метод главных компонент (PCA)|ll=PCA}}<pre>#importing library and its' dependencieslibrary(h2o)h2o.init() path <- system.file("extdata", "data.csv", package = "h2o")data <- h2o.uploadFile(path = data) #evaluatingh2o.prcomp(training_frame = data, k = 8, transform = "STANDARDIZE")
</pre>
=== Деревья решений, случайный лес ===
{{Main|Дерево решений и случайный лес |ll=деревьев решений}}
==== Деревья решений ====
Для создания ''[[Дерево решений и случайный лес |деревьев решений ]]'' в <code>R </code> используется функция <code>ctree ()</code> из пакета <code>party</code>.
<pre>
#reading data
data rdata <- read.delimcsv('"input.datcsv", sep = ',', header = TRUEFALSE)
#creating evaluating model output.tree <- ctree(target ~ x + y + z, data = datardata)
#plotting results
plot(output.tree)
 
</pre>
==== Случайный лес ====
Для создания ''[[Дерево решений и случайный лес|случайного леса ]]'' необходимо импортировать пакет <code>randomForest</code>
<pre>
#reading data
data rdata <- read.delimcsv('"input.datcsv", sep = ',', header = TRUEFALSE)
#creating the forest
output.forest <- randomForest(target ~ x + y + z,
data = datardata)
#getting results
</pre>
=== Байессовская классификация Наивный Бейесовский классификатор ==={{Main|Байесовская классификация|ll=Байесовская классификация}}
<pre>
#$$importing package and it's dependencies
#reading data
data<- read.csv("input.csv", sep = ',', header = FALSE)
#splitting data into training and test data sets
testing <- data[-index,]
#create objects x which holds the and y for predictor variables and y which holds the response variables
x = training[,-9]
y = training$target
#training model
model = train(x,y,'nb',trControl=trainControl(method='cv',number=10))
#predicting resultspredictions <- predict(model,newdata = testing )</pre> === Кластеризация === <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>
=== SVM ===
{{Main|Метод опорных векторов (SVM)|ll=SVM}}
<pre>
#$$ importing package and its' dependencies
training <- data[index,]
testing <- data[-index,]
 
 
#defining training function
ctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
#evaluating model
data = train_flats,
method = "svmRadial",
trControl = ctrltrainControl(method = "repeatedcv", number = 10, repeats = 3))
#printing parameters
</pre>
=== GBM ==={{Main|Бустинг, AdaBoost|ll=Бустинг}}<pre>#loading librariesinstall.packages("mlr")library(mlr) #loading datatrain <- read.csv("input.csv")test <- read.csv("testInput.csv") #loading GBMgetParamSet("classif.gbm")baseLearner <- makeLearner("classif.gbm", predict.type = "response") #specifying parameterscontrolFunction <- makeTuneControlRandom(maxit = 50000)#specifying tuning methodcvFunction <- makeResampleDesc("CV",iters = 100000) #definig cross-validation function gbmParameters<- makeParamSet(makeDiscreteParam("distribution", values = "bernoulli"),makeIntegerParam("n.trees", lower = 100, upper = 1000), #number of treesmakeIntegerParam("interaction.depth", lower = 2, upper = 10), #depth of treemakeIntegerParam("n.minobsinnode", lower = 10, upper = 80),makeNumericParam("shrinkage",lower = 0.01, upper = 1)) #tunning parametersgbmTuningParameters <- tuneParams(learner = baseLearner, task = trainTask,resampling = cvFunction,measures = acc,par.set = gbmParameters,control = controlFunction) #creating model parametersmodel <- setHyperPars(learner = baseLearner, par.vals = gbmTuningParameters) #evaluating modelfit <- train(model, train)predictions <- predict(fit, test)</pre> === Кластеризация ===Для реализации алгоритма кластеризации ''k-средних'' используется пакет <code>ClusterR</code>. В нем реализовано 2 функции: <code>KMeans_arma()</code> и <code>KMeans_rcpp()</code>. В примере далее рассмотрена реализация с использованием функции <code>KMeans_arma()</code>. <pre>#$$ importing package and its' dependencieslibrary(ClusterR) #reading datadata <- read.csv("data.csv") #evaluating modelmodel = KMeans_arma(data, clusters = 2, n_iter = 10, seed_mode = "random_subset", verbose = T, CENTROIDS = NULL) #predicting resultspredictions = predict_KMeans(test_data, model) </pre> == См. также ==*[[:Примеры кода на Scala|Примеры кода на Scala]]*[[:Примеры кода на Java|Примеры кода на Java]]*[[:Обзор библиотек для машинного обучения на Python|Обзор библиотек для машинного обучения на Python]] 
== Примечания ==
<references/>
[[Категория: Машинное обучение]] [[Категория: Примеры кода]]
67
правок

Навигация