library(caret)
models <- names(getModelInfo())
length(models)
## [1] 239
head(models, 30)
## [1] "ada" "AdaBag" "AdaBoost.M1" "adaboost"
## [5] "amdai" "ANFIS" "avNNet" "awnb"
## [9] "awtan" "bag" "bagEarth" "bagEarthGCV"
## [13] "bagFDA" "bagFDAGCV" "bam" "bartMachine"
## [17] "bayesglm" "binda" "blackboost" "blasso"
## [21] "blassoAveraged" "bridge" "brnn" "BstLm"
## [25] "bstSm" "bstTree" "C5.0" "C5.0Cost"
## [29] "C5.0Rules" "C5.0Tree"
Команда names(getModelInfo()) выводит список доступных
методов машинного обучения в пакете caret.
set.seed(123)
x <- matrix(rnorm(50*5), ncol=5)
y <- factor(rep(c("A", "B"), 25))
colnames(x) <- paste0("X", 1:5)
jpeg("plots/caret_box.jpg", width=1200, height=900, res=150)
featurePlot(x=x, y=y, plot="box")
dev.off()
## quartz_off_screen
## 2
jpeg("plots/caret_density.jpg", width=1200, height=900, res=150)
featurePlot(x=x, y=y, plot="density")
dev.off()
## quartz_off_screen
## 2
jpeg("plots/caret_pairs.jpg", width=1200, height=900, res=150)
featurePlot(x=x, y=y, plot="pairs")
dev.off()
## quartz_off_screen
## 2
Вывод:
Так как признаки были получены случайной генерацией с помощью rnorm(),
значения классов A и B сильно пересекаются. Явных границ между классами
по отдельным признакам не наблюдается, что указывает на слабую
способность данных различать классы в данном эксперименте.
library(FSelector)
data(iris)
ig <- information.gain(Species ~ ., iris)
ig[order(-ig$attr_importance), , drop=FALSE]
## attr_importance
## Petal.Width 0.9554360
## Petal.Length 0.9402853
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
Вывод:
Наибольший вклад в определение вида ириса вносят признаки Petal.Length и
Petal.Width. Признаки, связанные с чашелистиками, оказывают менее
выраженное влияние. Таким образом, параметры лепестков являются
ключевыми для классификации.
library(arules)
x_cont <- iris$Petal.Length
summary(x_cont)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.600 4.350 3.758 5.100 6.900
d_interval <- discretize(x_cont, method="interval", categories=4)
table(d_interval)
## d_interval
## [1,2.48) [2.48,3.95) [3.95,5.43) [5.43,6.9]
## 50 11 61 28
d_frequency <- discretize(x_cont, method="frequency", categories=4)
table(d_frequency)
## d_frequency
## [1,1.6) [1.6,4.35) [4.35,5.1) [5.1,6.9]
## 37 38 33 42
d_cluster <- discretize(x_cont, method="cluster", categories=4)
table(d_cluster)
## d_cluster
## [1,2.77) [2.77,4.52) [4.52,5.45) [5.45,6.9]
## 50 37 35 28
d_fixed <- discretize(
x_cont,
method="fixed",
breaks=c(-Inf, 2, 4, 5.5, Inf),
labels=c("short","medium","long","very_long")
)
table(d_fixed)
## d_fixed
## short medium long very_long
## 50 11 61 28
Вывод:
Метод interval разбивает диапазон значений на интервалы одинаковой
ширины, что может приводить к неравномерному распределению наблюдений.
Метод frequency обеспечивает одинаковое количество объектов в каждом
интервале. Метод cluster использует структуру данных для формирования
интервалов. Метод fixed позволяет явно задать границы интервалов и
подходит при наличии заранее определённых пороговых значений. —
library(mlbench)
library(Boruta)
data("Ozone")
oz <- na.omit(Ozone)
target <- names(oz)[ncol(oz)]
form <- as.formula(paste(target, "~ ."))
set.seed(123)
bor <- Boruta(form, data=oz, doTrace=1)
bor
## Boruta performed 33 iterations in 3.225101 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V4 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
jpeg("plots/boruta_boxplot.jpg", width=1800, height=1200, res=200)
plot(bor, las=2, cex.axis=0.8)
dev.off()
## quartz_off_screen
## 2
getSelectedAttributes(bor, withTentative = TRUE)
## [1] "V1" "V4" "V5" "V7" "V8" "V9" "V10" "V11" "V12"
bor_fixed <- TentativeRoughFix(bor)
getSelectedAttributes(bor_fixed, withTentative = FALSE)
## [1] "V1" "V4" "V5" "V7" "V8" "V9" "V10" "V11" "V12"
Вывод:
Метод Boruta оценивает значимость признаков, сопоставляя их с
искусственно созданными случайными признаками. В результате все
переменные распределяются на подтверждённые, отклонённые и
неопределённые. Диаграмма boxplot наглядно показывает, какие признаки
обладают значимой информативностью и превосходят уровень случайного
шума.