Установим и подключим пакет caret.
library(caret)
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
Выведем список доступных моделей:
names(getModelInfo())
## [1] "ada" "AdaBag" "AdaBoost.M1"
## [4] "adaboost" "amdai" "ANFIS"
## [7] "avNNet" "awnb" "awtan"
## [10] "bag" "bagEarth" "bagEarthGCV"
## [13] "bagFDA" "bagFDAGCV" "bam"
## [16] "bartMachine" "bayesglm" "binda"
## [19] "blackboost" "blasso" "blassoAveraged"
## [22] "bridge" "brnn" "BstLm"
## [25] "bstSm" "bstTree" "C5.0"
## [28] "C5.0Cost" "C5.0Rules" "C5.0Tree"
## [31] "cforest" "chaid" "CSimca"
## [34] "ctree" "ctree2" "cubist"
## [37] "dda" "deepboost" "DENFIS"
## [40] "dnn" "dwdLinear" "dwdPoly"
## [43] "dwdRadial" "earth" "elm"
## [46] "enet" "evtree" "extraTrees"
## [49] "fda" "FH.GBML" "FIR.DM"
## [52] "foba" "FRBCS.CHI" "FRBCS.W"
## [55] "FS.HGD" "gam" "gamboost"
## [58] "gamLoess" "gamSpline" "gaussprLinear"
## [61] "gaussprPoly" "gaussprRadial" "gbm_h2o"
## [64] "gbm" "gcvEarth" "GFS.FR.MOGUL"
## [67] "GFS.LT.RS" "GFS.THRIFT" "glm.nb"
## [70] "glm" "glmboost" "glmnet_h2o"
## [73] "glmnet" "glmStepAIC" "gpls"
## [76] "hda" "hdda" "hdrda"
## [79] "HYFIS" "icr" "J48"
## [82] "JRip" "kernelpls" "kknn"
## [85] "knn" "krlsPoly" "krlsRadial"
## [88] "lars" "lars2" "lasso"
## [91] "lda" "lda2" "leapBackward"
## [94] "leapForward" "leapSeq" "Linda"
## [97] "lm" "lmStepAIC" "LMT"
## [100] "loclda" "logicBag" "LogitBoost"
## [103] "logreg" "lssvmLinear" "lssvmPoly"
## [106] "lssvmRadial" "lvq" "M5"
## [109] "M5Rules" "manb" "mda"
## [112] "Mlda" "mlp" "mlpKerasDecay"
## [115] "mlpKerasDecayCost" "mlpKerasDropout" "mlpKerasDropoutCost"
## [118] "mlpML" "mlpSGD" "mlpWeightDecay"
## [121] "mlpWeightDecayML" "monmlp" "msaenet"
## [124] "multinom" "mxnet" "mxnetAdam"
## [127] "naive_bayes" "nb" "nbDiscrete"
## [130] "nbSearch" "neuralnet" "nnet"
## [133] "nnls" "nodeHarvest" "null"
## [136] "OneR" "ordinalNet" "ordinalRF"
## [139] "ORFlog" "ORFpls" "ORFridge"
## [142] "ORFsvm" "ownn" "pam"
## [145] "parRF" "PART" "partDSA"
## [148] "pcaNNet" "pcr" "pda"
## [151] "pda2" "penalized" "PenalizedLDA"
## [154] "plr" "pls" "plsRglm"
## [157] "polr" "ppr" "pre"
## [160] "PRIM" "protoclass" "qda"
## [163] "QdaCov" "qrf" "qrnn"
## [166] "randomGLM" "ranger" "rbf"
## [169] "rbfDDA" "Rborist" "rda"
## [172] "regLogistic" "relaxo" "rf"
## [175] "rFerns" "RFlda" "rfRules"
## [178] "ridge" "rlda" "rlm"
## [181] "rmda" "rocc" "rotationForest"
## [184] "rotationForestCp" "rpart" "rpart1SE"
## [187] "rpart2" "rpartCost" "rpartScore"
## [190] "rqlasso" "rqnc" "RRF"
## [193] "RRFglobal" "rrlda" "RSimca"
## [196] "rvmLinear" "rvmPoly" "rvmRadial"
## [199] "SBC" "sda" "sdwd"
## [202] "simpls" "SLAVE" "slda"
## [205] "smda" "snn" "sparseLDA"
## [208] "spikeslab" "spls" "stepLDA"
## [211] "stepQDA" "superpc" "svmBoundrangeString"
## [214] "svmExpoString" "svmLinear" "svmLinear2"
## [217] "svmLinear3" "svmLinearWeights" "svmLinearWeights2"
## [220] "svmPoly" "svmRadial" "svmRadialCost"
## [223] "svmRadialSigma" "svmRadialWeights" "svmSpectrumString"
## [226] "tan" "tanSearch" "treebag"
## [229] "vbmpRadial" "vglmAdjCat" "vglmContRatio"
## [232] "vglmCumulative" "widekernelpls" "WM"
## [235] "wsrf" "xgbDART" "xgbLinear"
## [238] "xgbTree" "xyf"
Создадим набор данных согласно заданию:
set.seed(123)
x <- matrix(rnorm(50 * 5), ncol = 5)
y <- factor(rep(c("A", "B"), 25))
jpeg(
"feature_box.jpg",
width = 1200,
height = 900,
res = 150
)
featurePlot(
x = x,
y = y,
plot = "box"
)
dev.off()
## png
## 2
Для отображения графика в HTML:
featurePlot(
x = x,
y = y,
plot = "box"
)
jpeg(
"feature_strip.jpg",
width = 1200,
height = 900,
res = 150
)
featurePlot(
x = x,
y = y,
plot = "strip",
jitter = TRUE
)
dev.off()
## png
## 2
featurePlot(
x = x,
y = y,
plot = "strip",
jitter = TRUE
)
jpeg(
"feature_density.jpg",
width = 1200,
height = 900,
res = 150
)
featurePlot(
x = x,
y = y,
plot = "density"
)
dev.off()
## png
## 2
featurePlot(
x = x,
y = y,
plot = "density"
)
jpeg(
"feature_pairs.jpg",
width = 1200,
height = 900,
res = 150
)
featurePlot(
x = x,
y = y,
plot = "pairs"
)
dev.off()
## png
## 2
featurePlot(
x = x,
y = y,
plot = "pairs"
)
В результате графического разведочного анализа были построены графики
boxplot, strip plot, распределения плотности и попарных зависимостей
признаков с использованием функции featurePlot(). Поскольку
исходные признаки были случайно сгенерированы из нормального
распределения, выраженного разделения классов A и B по признакам не
наблюдается. Графический анализ позволяет оценить распределение
признаков и различия между классами.
Подключим пакет FSelector и загрузим набор данных
iris.
library(FSelector)
data(iris)
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
ig <- information.gain(
Species ~ .,
data = iris
)
ig
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
gr <- gain.ratio(
Species ~ .,
data = iris
)
gr
## attr_importance
## Sepal.Length 0.4196464
## Sepal.Width 0.2472972
## Petal.Length 0.8584937
## Petal.Width 0.8713692
chi <- chi.squared(
Species ~ .,
data = iris
)
chi
## attr_importance
## Sepal.Length 0.6288067
## Sepal.Width 0.4922162
## Petal.Length 0.9346311
## Petal.Width 0.9432359
su <- symmetrical.uncertainty(
Species ~ .,
data = iris
)
su
## attr_importance
## Sepal.Length 0.4155563
## Sepal.Width 0.2452743
## Petal.Length 0.8571872
## Petal.Width 0.8705214
В результате применения методов пакета FSelector была
определена информативность признаков набора iris
относительно целевой переменной Species. Полученные
значения показывают, что признаки имеют различную степень важности для
классификации. Наибольшую информативность имеют признаки
Petal.Length и Petal.Width, тогда как признаки
Sepal.Length и Sepal.Width имеют меньшую
информативность. Таким образом, размеры лепестка являются наиболее
существенными признаками для определения вида ириса.
Подключим пакет arules и загрузим набор данных
iris.
library(arules)
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
##
## abbreviate, write
data(iris)
x <- iris$Sepal.Length
d_interval <- discretize(
x,
method = "interval",
breaks = 3
)
d_interval
## [1] [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5)
## [8] [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5)
## [15] [5.5,6.7) [5.5,6.7) [4.3,5.5) [4.3,5.5) [5.5,6.7) [4.3,5.5) [4.3,5.5)
## [22] [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5)
## [29] [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [5.5,6.7) [4.3,5.5)
## [36] [4.3,5.5) [5.5,6.7) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5)
## [43] [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5) [4.3,5.5)
## [50] [4.3,5.5) [6.7,7.9] [5.5,6.7) [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7)
## [57] [5.5,6.7) [4.3,5.5) [5.5,6.7) [4.3,5.5) [4.3,5.5) [5.5,6.7) [5.5,6.7)
## [64] [5.5,6.7) [5.5,6.7) [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7)
## [71] [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [6.7,7.9]
## [78] [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7)
## [85] [4.3,5.5) [5.5,6.7) [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7)
## [92] [5.5,6.7) [5.5,6.7) [4.3,5.5) [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7)
## [99] [4.3,5.5) [5.5,6.7) [5.5,6.7) [5.5,6.7) [6.7,7.9] [5.5,6.7) [5.5,6.7)
## [106] [6.7,7.9] [4.3,5.5) [6.7,7.9] [6.7,7.9] [6.7,7.9] [5.5,6.7) [5.5,6.7)
## [113] [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7) [5.5,6.7) [6.7,7.9] [6.7,7.9]
## [120] [5.5,6.7) [6.7,7.9] [5.5,6.7) [6.7,7.9] [5.5,6.7) [6.7,7.9] [6.7,7.9]
## [127] [5.5,6.7) [5.5,6.7) [5.5,6.7) [6.7,7.9] [6.7,7.9] [6.7,7.9] [5.5,6.7)
## [134] [5.5,6.7) [5.5,6.7) [6.7,7.9] [5.5,6.7) [5.5,6.7) [5.5,6.7) [6.7,7.9]
## [141] [6.7,7.9] [6.7,7.9] [5.5,6.7) [6.7,7.9] [6.7,7.9] [6.7,7.9] [5.5,6.7)
## [148] [5.5,6.7) [5.5,6.7) [5.5,6.7)
## attr(,"discretized:breaks")
## [1] 4.3 5.5 6.7 7.9
## attr(,"discretized:method")
## [1] interval
## Levels: [4.3,5.5) [5.5,6.7) [6.7,7.9]
d_frequency <- discretize(
x,
method = "frequency",
breaks = 3
)
d_frequency
## [1] [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [5.4,6.3) [4.3,5.4)
## [8] [4.3,5.4) [4.3,5.4) [4.3,5.4) [5.4,6.3) [4.3,5.4) [4.3,5.4) [4.3,5.4)
## [15] [5.4,6.3) [5.4,6.3) [5.4,6.3) [4.3,5.4) [5.4,6.3) [4.3,5.4) [5.4,6.3)
## [22] [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4)
## [29] [4.3,5.4) [4.3,5.4) [4.3,5.4) [5.4,6.3) [4.3,5.4) [5.4,6.3) [4.3,5.4)
## [36] [4.3,5.4) [5.4,6.3) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4)
## [43] [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4) [4.3,5.4)
## [50] [4.3,5.4) [6.3,7.9] [6.3,7.9] [6.3,7.9] [5.4,6.3) [6.3,7.9] [5.4,6.3)
## [57] [6.3,7.9] [4.3,5.4) [6.3,7.9] [4.3,5.4) [4.3,5.4) [5.4,6.3) [5.4,6.3)
## [64] [5.4,6.3) [5.4,6.3) [6.3,7.9] [5.4,6.3) [5.4,6.3) [5.4,6.3) [5.4,6.3)
## [71] [5.4,6.3) [5.4,6.3) [6.3,7.9] [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [78] [6.3,7.9] [5.4,6.3) [5.4,6.3) [5.4,6.3) [5.4,6.3) [5.4,6.3) [5.4,6.3)
## [85] [5.4,6.3) [5.4,6.3) [6.3,7.9] [6.3,7.9] [5.4,6.3) [5.4,6.3) [5.4,6.3)
## [92] [5.4,6.3) [5.4,6.3) [4.3,5.4) [5.4,6.3) [5.4,6.3) [5.4,6.3) [5.4,6.3)
## [99] [4.3,5.4) [5.4,6.3) [6.3,7.9] [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [106] [6.3,7.9] [4.3,5.4) [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [113] [6.3,7.9] [5.4,6.3) [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [120] [5.4,6.3) [6.3,7.9] [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [127] [5.4,6.3) [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [134] [6.3,7.9] [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9] [5.4,6.3) [6.3,7.9]
## [141] [6.3,7.9] [6.3,7.9] [5.4,6.3) [6.3,7.9] [6.3,7.9] [6.3,7.9] [6.3,7.9]
## [148] [6.3,7.9] [5.4,6.3) [5.4,6.3)
## attr(,"discretized:breaks")
## [1] 4.3 5.4 6.3 7.9
## attr(,"discretized:method")
## [1] frequency
## Levels: [4.3,5.4) [5.4,6.3) [6.3,7.9]
set.seed(123)
d_cluster <- discretize(
x,
method = "cluster",
breaks = 3
)
d_cluster
## [1] [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [5.37,6.36)
## [7] [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [5.37,6.36) [4.3,5.37)
## [13] [4.3,5.37) [4.3,5.37) [5.37,6.36) [5.37,6.36) [5.37,6.36) [4.3,5.37)
## [19] [5.37,6.36) [4.3,5.37) [5.37,6.36) [4.3,5.37) [4.3,5.37) [4.3,5.37)
## [25] [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37)
## [31] [4.3,5.37) [5.37,6.36) [4.3,5.37) [5.37,6.36) [4.3,5.37) [4.3,5.37)
## [37] [5.37,6.36) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37)
## [43] [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37) [4.3,5.37)
## [49] [4.3,5.37) [4.3,5.37) [6.36,7.9] [6.36,7.9] [6.36,7.9] [5.37,6.36)
## [55] [6.36,7.9] [5.37,6.36) [5.37,6.36) [4.3,5.37) [6.36,7.9] [4.3,5.37)
## [61] [4.3,5.37) [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36) [6.36,7.9]
## [67] [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36)
## [73] [5.37,6.36) [5.37,6.36) [6.36,7.9] [6.36,7.9] [6.36,7.9] [6.36,7.9]
## [79] [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36) [5.37,6.36)
## [85] [5.37,6.36) [5.37,6.36) [6.36,7.9] [5.37,6.36) [5.37,6.36) [5.37,6.36)
## [91] [5.37,6.36) [5.37,6.36) [5.37,6.36) [4.3,5.37) [5.37,6.36) [5.37,6.36)
## [97] [5.37,6.36) [5.37,6.36) [4.3,5.37) [5.37,6.36) [5.37,6.36) [5.37,6.36)
## [103] [6.36,7.9] [5.37,6.36) [6.36,7.9] [6.36,7.9] [4.3,5.37) [6.36,7.9]
## [109] [6.36,7.9] [6.36,7.9] [6.36,7.9] [6.36,7.9] [6.36,7.9] [5.37,6.36)
## [115] [5.37,6.36) [6.36,7.9] [6.36,7.9] [6.36,7.9] [6.36,7.9] [5.37,6.36)
## [121] [6.36,7.9] [5.37,6.36) [6.36,7.9] [5.37,6.36) [6.36,7.9] [6.36,7.9]
## [127] [5.37,6.36) [5.37,6.36) [6.36,7.9] [6.36,7.9] [6.36,7.9] [6.36,7.9]
## [133] [6.36,7.9] [5.37,6.36) [5.37,6.36) [6.36,7.9] [5.37,6.36) [6.36,7.9]
## [139] [5.37,6.36) [6.36,7.9] [6.36,7.9] [6.36,7.9] [5.37,6.36) [6.36,7.9]
## [145] [6.36,7.9] [6.36,7.9] [5.37,6.36) [6.36,7.9] [5.37,6.36) [5.37,6.36)
## attr(,"discretized:breaks")
## [1] 4.300000 5.371213 6.361482 7.900000
## attr(,"discretized:method")
## [1] cluster
## Levels: [4.3,5.37) [5.37,6.36) [6.36,7.9]
d_fixed <- discretize(
x,
method = "fixed",
breaks = c(-Inf, 5, 6, Inf)
)
d_fixed
## [1] [5,6) [-Inf,5) [-Inf,5) [-Inf,5) [5,6) [5,6) [-Inf,5) [5,6)
## [9] [-Inf,5) [-Inf,5) [5,6) [-Inf,5) [-Inf,5) [-Inf,5) [5,6) [5,6)
## [17] [5,6) [5,6) [5,6) [5,6) [5,6) [5,6) [-Inf,5) [5,6)
## [25] [-Inf,5) [5,6) [5,6) [5,6) [5,6) [-Inf,5) [-Inf,5) [5,6)
## [33] [5,6) [5,6) [-Inf,5) [5,6) [5,6) [-Inf,5) [-Inf,5) [5,6)
## [41] [5,6) [-Inf,5) [-Inf,5) [5,6) [5,6) [-Inf,5) [5,6) [-Inf,5)
## [49] [5,6) [5,6) [6, Inf] [6, Inf] [6, Inf] [5,6) [6, Inf] [5,6)
## [57] [6, Inf] [-Inf,5) [6, Inf] [5,6) [5,6) [5,6) [6, Inf] [6, Inf]
## [65] [5,6) [6, Inf] [5,6) [5,6) [6, Inf] [5,6) [5,6) [6, Inf]
## [73] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [5,6)
## [81] [5,6) [5,6) [5,6) [6, Inf] [5,6) [6, Inf] [6, Inf] [6, Inf]
## [89] [5,6) [5,6) [5,6) [6, Inf] [5,6) [5,6) [5,6) [5,6)
## [97] [5,6) [6, Inf] [5,6) [5,6) [6, Inf] [5,6) [6, Inf] [6, Inf]
## [105] [6, Inf] [6, Inf] [-Inf,5) [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf]
## [113] [6, Inf] [5,6) [5,6) [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf]
## [121] [6, Inf] [5,6) [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf]
## [129] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf]
## [137] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [5,6) [6, Inf]
## [145] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [6, Inf] [5,6)
## attr(,"discretized:breaks")
## [1] -Inf 5 6 Inf
## attr(,"discretized:method")
## [1] fixed
## Levels: [-Inf,5) [5,6) [6, Inf]
data.frame(
Original = x,
Interval = d_interval,
Frequency = d_frequency,
Cluster = d_cluster,
Fixed = d_fixed
)
## Original Interval Frequency Cluster Fixed
## 1 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 2 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 3 4.7 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 4 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 5 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 6 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 7 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 8 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 9 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 10 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 11 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 12 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 13 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 14 4.3 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 15 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 16 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 17 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 18 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 19 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 20 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 21 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 22 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 23 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 24 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 25 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 26 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 27 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 28 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 29 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 30 4.7 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 31 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 32 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 33 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 34 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 35 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 36 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 37 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 38 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 39 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 40 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 41 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 42 4.5 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 43 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 44 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 45 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 46 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 47 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 48 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 49 5.3 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 50 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 51 7.0 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 52 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 53 6.9 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 54 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 55 6.5 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 56 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 57 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 58 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 59 6.6 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 60 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 61 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 62 5.9 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 63 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 64 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 65 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 66 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 67 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 68 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 69 6.2 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 70 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 71 5.9 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 72 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 73 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 74 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 75 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 76 6.6 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 77 6.8 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 78 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 79 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 80 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 81 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 82 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 83 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 84 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 85 5.4 [4.3,5.5) [5.4,6.3) [5.37,6.36) [5,6)
## 86 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 87 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 88 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 89 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 90 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 91 5.5 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 92 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 93 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 94 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 95 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 96 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 97 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 98 6.2 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 99 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.37) [5,6)
## 100 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 101 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 102 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 103 7.1 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 104 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 105 6.5 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 106 7.6 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 107 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.37) [-Inf,5)
## 108 7.3 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 109 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 110 7.2 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 111 6.5 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 112 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 113 6.8 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 114 5.7 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 115 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 116 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 117 6.5 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 118 7.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 119 7.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 120 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 121 6.9 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 122 5.6 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 123 7.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 124 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 125 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 126 7.2 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 127 6.2 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 128 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 129 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 130 7.2 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 131 7.4 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 132 7.9 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 133 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 134 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 135 6.1 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 136 7.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 137 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 138 6.4 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 139 6.0 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 140 6.9 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 141 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 142 6.9 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 143 5.8 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
## 144 6.8 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 145 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 146 6.7 [6.7,7.9] [6.3,7.9] [6.36,7.9] [6, Inf]
## 147 6.3 [5.5,6.7) [6.3,7.9] [5.37,6.36) [6, Inf]
## 148 6.5 [5.5,6.7) [6.3,7.9] [6.36,7.9] [6, Inf]
## 149 6.2 [5.5,6.7) [5.4,6.3) [5.37,6.36) [6, Inf]
## 150 5.9 [5.5,6.7) [5.4,6.3) [5.37,6.36) [5,6)
В результате выполнения дискретизации непрерывная переменная
Sepal.Length была преобразована в категориальную четырьмя
различными способами. Метод interval формирует интервалы
одинаковой ширины, frequency — интервалы с примерно
одинаковым количеством наблюдений, cluster определяет
категории на основе кластеризации методом k-means, а fixed
использует заданные пользователем границы. В результате разные методы
приводят к различному разбиению исходной непрерывной переменной на
категории.
Подключим пакет Boruta и пакет mlbench,
содержащий набор данных Ozone.
library(Boruta)
library(mlbench)
data(Ozone)
ozo <- na.omit(Ozone)
head(ozo)
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
## 5 1 5 1 5 5760 3 51 54 45.32 1450 25 57.02 60
## 6 1 6 2 6 5720 4 69 35 49.64 1568 15 53.78 60
## 7 1 7 3 4 5790 6 19 45 46.40 2631 -33 54.14 100
## 8 1 8 4 4 5790 3 25 55 52.70 554 -28 64.76 250
## 9 1 9 5 6 5700 3 73 41 48.02 2083 23 52.52 120
## 12 1 12 1 6 5720 3 44 51 54.32 111 9 63.14 150
Проверим наличие пропущенных значений:
sum(is.na(ozo))
## [1] 0
Выполним выбор признаков:
set.seed(123)
boruta_result <- Boruta(
V4 ~ .,
data = ozo,
doTrace = 2
)
## 1. run of importance source...
## 2. run of importance source...
## 3. run of importance source...
## 4. run of importance source...
## 5. run of importance source...
## 6. run of importance source...
## 7. run of importance source...
## 8. run of importance source...
## 9. run of importance source...
## 10. run of importance source...
## 11. run of importance source...
## After 11 iterations, +0.17 secs:
## confirmed 9 attributes: V1, V10, V11, V12, V13 and 4 more;
## rejected 1 attribute: V3;
## still have 2 attributes left.
## 12. run of importance source...
## 13. run of importance source...
## 14. run of importance source...
## 15. run of importance source...
## After 15 iterations, +0.23 secs:
## rejected 1 attribute: V6;
## still have 1 attribute left.
## 16. run of importance source...
## 17. run of importance source...
## 18. run of importance source...
## After 18 iterations, +0.27 secs:
## rejected 1 attribute: V2;
## no more attributes left.
print(boruta_result)
## Boruta performed 18 iterations in 0.2735691 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V13 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
boruta_result$finalDecision
## V1 V2 V3 V5 V6 V7 V8 V9
## Confirmed Rejected Rejected Confirmed Rejected Confirmed Confirmed Confirmed
## V10 V11 V12 V13
## Confirmed Confirmed Confirmed Confirmed
## Levels: Tentative Confirmed Rejected
getSelectedAttributes(boruta_result)
## [1] "V1" "V5" "V7" "V8" "V9" "V10" "V11" "V12" "V13"
plot(
boruta_result,
las = 2
)
В результате применения алгоритма Boruta была выполнена оценка
значимости признаков относительно целевой переменной V4.
Алгоритм сравнивает важность исходных признаков с важностью случайных
shadow-признаков. В результате признаки получают решения
Confirmed, Tentative или
Rejected. Подтверждённые признаки являются информативными
для рассматриваемой задачи, а отклонённые признаки не показали
достаточной значимости. На графике boxplot представлены распределения
важности признаков, полученные в процессе работы алгоритма.
В ходе лабораторной работы были рассмотрены методы графического анализа, оценки важности и отбора признаков, а также дискретизации непрерывных данных.
С помощью пакета caret выполнен графический разведочный
анализ признаков с использованием функции featurePlot(). С
помощью пакета FSelector определена важность признаков для
классификации набора данных iris.
С использованием функции discretize() пакета
arules непрерывная переменная была преобразована в
категориальную четырьмя методами: interval,
frequency, cluster и fixed.
С помощью алгоритма Boruta выполнен выбор информативных признаков для
набора данных Ozone и построен boxplot важности
признаков.