Задание №1

Устанавливаем пакет 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

Выводы:

  1. Разделимость классов: графики показывают четкое разделение между классами A и B, это указывает на то, что признаки могут быть полезны для классификации.
  2. Корреляция между признаками: на графиках видно, что некоторые признаки сильно коррелируют друг с другом, это может указывать на избыточность информации
  3. Шумовые данные: классы пересекаются и не имеют четкого разделения, это может указывать на то, что данные содержат шум или что выбранные признаки не являются хорошими предикторами для классификации.

Задание №2

Установка и загрузка необходимых пакетов

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")

Выводы:

  1. Важность признаков: После выполнения кода мы получили таблицу, в которой указана важность каждого признака (длина и ширина чашелистика и лепестка) в предсказании класса (вида цветка).

  2. Анализ: длина и ширина лепестка (Petal.Length и Petal.Width) имеют более высокую важность по сравнению с длиной и шириной чашелистика (Sepal.Length и Sepal.Width). Это может указывать на то, что лепестки более информативны для различения видов цветка.

  3. Применение: Зная важность признаков, можно оптимизировать модель, отсекая менее важные признаки, что может привести к улучшению производительности и уменьшению времени обучения модели.

Задание № 3

Загрузим пакет 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)

Выводы:

  1. Метод “interval”: Этот метод делит диапазон значений на равные интервалы. Это может быть полезно, если значения равномерно распределены, но может не учитывать плотность данных.

  2. Метод “frequency”: Этот метод создает категории с равным количеством наблюдений. Это может быть полезно, если вы хотите, чтобы каждая категория имела одинаковое представительство, но может привести к неравномерным интервалам.

  3. Метод “cluster”: Этот метод использует алгоритмы кластеризации для определения границ категорий. Это может быть полезно для выявления естественных групп в данных, но требует настройки параметров кластеризации.

  4. Метод “fixed”: Этот метод позволяет задавать конкретные границы для категорий. Это полезно, если у вас есть заранее определенные границы, но требует предварительного знания о данных.

Задание №4

Устанавливаем пакет 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"))

Выводы:

  1. Boruta предоставляет информацию о значимости каждого признака. Признаки, которые были подтверждены как значимые, могут быть использованы для дальнейшего анализа.

  2. Boxplot позволяет визуализировать распределение значимых признаков по категориям целевой переменной Ozone. Мы можем увидеть, как значения признаков различаются в зависимости от уровня озона, что может помочь в понимании их влияния на целевую переменную.

  3. Если boxplot показывает значительные различия между группами, это может указывать на то, что признак имеет значение для предсказания уровня озона. Если различия незначительны, это может указывать на то, что признак не является важным для модели.