Устанавливаем пакет CARET
install.packages("caret",repos = "http://cran.us.r-project.org")
## Устанавливаю пакет в 'C:/Users/jurabek2003/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
##
## В наличии есть бинарная версия, но исходники новее:
## binary source needs_compilation
## caret 6.0-94 7.0-1 TRUE
## устанавливаю пакет '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"
Объявляем переменные х и y
x <- matrix(rnorm(50*5),ncol=5)
y <- factor(rep(c("A","B"),25))
Объединение данных в data.frame
data <- data.frame(x = x, y = y)
Выполнение графического разведочного анализа
feature_plot <- featurePlot(x = data[, 1:5], y = data$y, plot = "pairs")
Сохранение графиков в файлы .jpg
jpeg("feature_plot.jpg")
print(feature_plot)
dev.off()
## jpeg
## 3
Установка и загрузка необходимых пакетов
install.packages("FSelector",repos = "http://cran.us.r-project.org")
## Устанавливаю пакет в 'C:/Users/jurabek2003/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'FSelector' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\jurabek2003\AppData\Local\Temp\RtmpA5fnqC\downloaded_packages
library(FSelector)
Загрузка набора данных iris
data(iris)
Преобразование данных в формат, подходящий для FSelector Мы будем использовать формулу для классификации
formula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
Оценка важности признаков с использованием Information Gain
importance <- information.gain(formula, data = iris)
Вывод результатов
print(importance)
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
Визуализация важности признаков
barplot(importance$attr_importance, names.arg = rownames(importance),
main = "Importance of Features (Information Gain)",
xlab = "Features", ylab = "Importance")
Важность признаков: После выполнения кода мы получили таблицу, в которой указана важность каждого признака (длина и ширина чашелистика и лепестка) в предсказании класса (вида цветка).
Анализ: длина и ширина лепестка (Petal.Length и Petal.Width) имеют более высокую важность по сравнению с длиной и шириной чашелистика (Sepal.Length и Sepal.Width). Это может указывать на то, что лепестки более информативны для различения видов цветка.
Применение: Зная важность признаков, можно оптимизировать модель, отсекая менее важные признаки, что может привести к улучшению производительности и уменьшению времени обучения модели.
Загрузим пакет arules
install.packages("arules",repos = "http://cran.us.r-project.org")
## Устанавливаю пакет в 'C:/Users/jurabek2003/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'arules' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\jurabek2003\AppData\Local\Temp\RtmpA5fnqC\downloaded_packages
library(arules)
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
##
## abbreviate, write
Загрузим данные iris
data(iris)
Метод 1: Равная ширина интервала
discrete_interval <- discretize(iris$Sepal.Length, method = "interval")
Метод 2: Равная частота
discrete_frequency <- discretize(iris$Sepal.Length, method = "frequency")
Метод 3: Кластеризация
discrete_cluster <- discretize(iris$Sepal.Length, method = "cluster")
Метод 4: Задаваемые границы интервалов. Например, зададим границы [4, 5, 6, 7]
fixed_breaks <- c(4, 5, 6, 7)
discrete_fixed <- discretize(iris$Sepal.Length, method = "fixed", breaks = fixed_breaks)
Объединение результатов в data.frame для удобства просмотра
results <- data.frame(
Original = iris$Sepal.Length,
Interval = as.character(discrete_interval),
Frequency = as.character(discrete_frequency),
Cluster = as.character(discrete_cluster),
Fixed = as.character(discrete_fixed)
)
print(results)
## Original Interval Frequency Cluster Fixed
## 1 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 2 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 3 4.7 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 4 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 5 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 6 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 7 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 8 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 9 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 10 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 11 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 12 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 13 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 14 4.3 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 15 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 16 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 17 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 18 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 19 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 20 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 21 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 22 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 23 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 24 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 25 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 26 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 27 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 28 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 29 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 30 4.7 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 31 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 32 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 33 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 34 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 35 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 36 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 37 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 38 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 39 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 40 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 41 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 42 4.5 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 43 4.4 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 44 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 45 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 46 4.8 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 47 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 48 4.6 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 49 5.3 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 50 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 51 7.0 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 52 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 53 6.9 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 54 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 55 6.5 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 56 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 57 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 58 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 59 6.6 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 60 5.2 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 61 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 62 5.9 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 63 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 64 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 65 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 66 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 67 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 68 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 69 6.2 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 70 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 71 5.9 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 72 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 73 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 74 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 75 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 76 6.6 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 77 6.8 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 78 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 79 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 80 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 81 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 82 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 83 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 84 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 85 5.4 [4.3,5.5) [5.4,6.3) [4.3,5.51) [5,6)
## 86 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 87 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 88 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 89 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 90 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 91 5.5 [5.5,6.7) [5.4,6.3) [4.3,5.51) [5,6)
## 92 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 93 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 94 5.0 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 95 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 96 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 97 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 98 6.2 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 99 5.1 [4.3,5.5) [4.3,5.4) [4.3,5.51) [5,6)
## 100 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 101 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 102 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 103 7.1 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 104 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 105 6.5 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 106 7.6 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 107 4.9 [4.3,5.5) [4.3,5.4) [4.3,5.51) [4,5)
## 108 7.3 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 109 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 110 7.2 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 111 6.5 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 112 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 113 6.8 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 114 5.7 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 115 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 116 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 117 6.5 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 118 7.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 119 7.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 120 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 121 6.9 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 122 5.6 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 123 7.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 124 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 125 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 126 7.2 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 127 6.2 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 128 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 129 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 130 7.2 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 131 7.4 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 132 7.9 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 133 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 134 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 135 6.1 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 136 7.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] <NA>
## 137 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 138 6.4 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 139 6.0 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 140 6.9 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 141 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 142 6.9 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 143 5.8 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
## 144 6.8 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 145 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 146 6.7 [6.7,7.9] [6.3,7.9] [6.49,7.9] [6,7]
## 147 6.3 [5.5,6.7) [6.3,7.9] [5.51,6.49) [6,7]
## 148 6.5 [5.5,6.7) [6.3,7.9] [6.49,7.9] [6,7]
## 149 6.2 [5.5,6.7) [5.4,6.3) [5.51,6.49) [6,7]
## 150 5.9 [5.5,6.7) [5.4,6.3) [5.51,6.49) [5,6)
Метод “interval”: Этот метод делит диапазон значений на равные интервалы. Это может быть полезно, если значения равномерно распределены, но может не учитывать плотность данных.
Метод “frequency”: Этот метод создает категории с равным количеством наблюдений. Это может быть полезно, если вы хотите, чтобы каждая категория имела одинаковое представительство, но может привести к неравномерным интервалам.
Метод “cluster”: Этот метод использует алгоритмы кластеризации для определения границ категорий. Это может быть полезно для выявления естественных групп в данных, но требует настройки параметров кластеризации.
Метод “fixed”: Этот метод позволяет задавать конкретные границы для категорий. Это полезно, если у вас есть заранее определенные границы, но требует предварительного знания о данных.
Устанавливаем пакет Boruta
install.packages("Boruta",repos = "http://cran.us.r-project.org")
## Устанавливаю пакет в 'C:/Users/jurabek2003/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'Boruta' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\jurabek2003\AppData\Local\Temp\RtmpA5fnqC\downloaded_packages
library(Boruta)
Получаем данные airquality
data("airquality")
Убираем неопределенные элементы
airquality <- na.omit(airquality)
Создаем новый столбец OzoneLevel, который указывает,
является ли уровень озона для каждой строки высоким или низким по
сравнению с медианным уровнем озона.
airquality$OzoneLevel <- factor(ifelse(airquality$Ozone > median(airquality$Ozone, na.rm = TRUE), "High", "Low"))
Создаем result, который будет содержать информацию о
значимости различных переменных для предсказания уровня озона.
set.seed(123)
result <- Boruta(OzoneLevel ~ ., data = airquality, 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...
## After 10 iterations, +0.28 secs:
## confirmed 5 attributes: Day, Ozone, Solar.R, Temp, Wind;
## still have 1 attribute left.
## 11. run of importance source...
## 12. run of importance source...
## 13. run of importance source...
## 14. run of importance source...
## 15. run of importance source...
## 16. run of importance source...
## 17. run of importance source...
## 18. run of importance source...
## 19. run of importance source...
## 20. run of importance source...
## 21. run of importance source...
## 22. run of importance source...
## 23. run of importance source...
## 24. run of importance source...
## 25. run of importance source...
## 26. run of importance source...
## 27. run of importance source...
## 28. run of importance source...
## 29. run of importance source...
## 30. run of importance source...
## 31. run of importance source...
## 32. run of importance source...
## 33. run of importance source...
## 34. run of importance source...
## 35. run of importance source...
## 36. run of importance source...
## 37. run of importance source...
## 38. run of importance source...
## 39. run of importance source...
## 40. run of importance source...
## 41. run of importance source...
## 42. run of importance source...
## 43. run of importance source...
## 44. run of importance source...
## 45. run of importance source...
## 46. run of importance source...
## 47. run of importance source...
## After 47 iterations, +1.2 secs:
## confirmed 1 attribute: Month;
## no more attributes left.
print(result)
## Boruta performed 47 iterations in 1.187439 secs.
## 6 attributes confirmed important: Day, Month, Ozone, Solar.R, Temp and
## 1 more;
## No attributes deemed unimportant.
Получаем список значимых признаков, которые были определены как важные для предсказания уровня озона в наборе данных airquality.
priznak <- getSelectedAttributes(result, withTentative = FALSE)
print(priznak)
## [1] "Ozone" "Solar.R" "Wind" "Temp" "Month" "Day"
Строим график, который демонстрирует, как уровень солнечной радиации варьируется в зависимости от уровня озона
boxplot(airquality$Solar.R ~ airquality$OzoneLevel,main = "Boxplot of Solar Radiation by Ozone Level",xlab = "Ozone Level", ylab = "Solar Radiation",col = c("lightblue", "lightgreen"))
Строим график, который демонстрирует, как скорость ветра варьируется в зависимости от уровня озона
boxplot(airquality$Wind ~ airquality$OzoneLevel,main = "Boxplot of Wind by Ozone Level",xlab = "Ozone Level", ylab = "Wind", col = c("lightblue", "lightgreen"))
Boruta предоставляет информацию о значимости каждого признака. Признаки, которые были подтверждены как значимые, могут быть использованы для дальнейшего анализа.
Boxplot позволяет визуализировать распределение значимых признаков по категориям целевой переменной Ozone. Мы можем увидеть, как значения признаков различаются в зависимости от уровня озона, что может помочь в понимании их влияния на целевую переменную.
Если boxplot показывает значительные различия между группами, это может указывать на то, что признак имеет значение для предсказания уровня озона. Если различия незначительны, это может указывать на то, что признак не является важным для модели.