Введение

Этот отчет содержит результаты выполнения лабораторной работы номер 2 по предмету “Анализ данных”

Задание 1

Установить пакет CARET, выполнить команду names(getModelInfo()), ознакомиться со списком доступных методов выбора признаков. Выполните графический разведочный анализ данных с использование функции featurePlot() для набора данных из справочного файла пакета CARET:

x <- matrix(rnorm(50*5),ncol=5)

y <- factor(rep(c(“A”, “B”), 25))

Сохранить полученные графики в *.jpg файлы. Сделать выводы.

Ход работы

install.packages("caret")
## Устанавливаю пакет в 'C:/Users/yuram/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'caret' успешно распакован, MD5-суммы проверены
## Warning in install.packages :
##   не могу удалить прежнюю установку пакета 'caret'
## Warning in install.packages :
##   проблема с копированием C:\Users\yuram\AppData\Local\R\win-library\4.4\00LOCK\caret\libs\x64\caret.dll в C:\Users\yuram\AppData\Local\R\win-library\4.4\caret\libs\x64\caret.dll: Permission denied
## Warning in install.packages :
##   восстановлен 'caret'
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\yuram\AppData\Local\Temp\RtmpSYxDlp\downloaded_packages
library(caret)
## Загрузка требуемого пакета: ggplot2
## 
## Присоединяю пакет: 'ggplot2'
## Следующий объект скрыт '.GlobalEnv':
## 
##     diamonds
## Загрузка требуемого пакета: lattice
names(getModelInfo())
##   [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"            "cforest"             "chaid"              
##  [33] "CSimca"              "ctree"               "ctree2"              "cubist"             
##  [37] "dda"                 "deepboost"           "DENFIS"              "dnn"                
##  [41] "dwdLinear"           "dwdPoly"             "dwdRadial"           "earth"              
##  [45] "elm"                 "enet"                "evtree"              "extraTrees"         
##  [49] "fda"                 "FH.GBML"             "FIR.DM"              "foba"               
##  [53] "FRBCS.CHI"           "FRBCS.W"             "FS.HGD"              "gam"                
##  [57] "gamboost"            "gamLoess"            "gamSpline"           "gaussprLinear"      
##  [61] "gaussprPoly"         "gaussprRadial"       "gbm_h2o"             "gbm"                
##  [65] "gcvEarth"            "GFS.FR.MOGUL"        "GFS.LT.RS"           "GFS.THRIFT"         
##  [69] "glm.nb"              "glm"                 "glmboost"            "glmnet_h2o"         
##  [73] "glmnet"              "glmStepAIC"          "gpls"                "hda"                
##  [77] "hdda"                "hdrda"               "HYFIS"               "icr"                
##  [81] "J48"                 "JRip"                "kernelpls"           "kknn"               
##  [85] "knn"                 "krlsPoly"            "krlsRadial"          "lars"               
##  [89] "lars2"               "lasso"               "lda"                 "lda2"               
##  [93] "leapBackward"        "leapForward"         "leapSeq"             "Linda"              
##  [97] "lm"                  "lmStepAIC"           "LMT"                 "loclda"             
## [101] "logicBag"            "LogitBoost"          "logreg"              "lssvmLinear"        
## [105] "lssvmPoly"           "lssvmRadial"         "lvq"                 "M5"                 
## [109] "M5Rules"             "manb"                "mda"                 "Mlda"               
## [113] "mlp"                 "mlpKerasDecay"       "mlpKerasDecayCost"   "mlpKerasDropout"    
## [117] "mlpKerasDropoutCost" "mlpML"               "mlpSGD"              "mlpWeightDecay"     
## [121] "mlpWeightDecayML"    "monmlp"              "msaenet"             "multinom"           
## [125] "mxnet"               "mxnetAdam"           "naive_bayes"         "nb"                 
## [129] "nbDiscrete"          "nbSearch"            "neuralnet"           "nnet"               
## [133] "nnls"                "nodeHarvest"         "null"                "OneR"               
## [137] "ordinalNet"          "ordinalRF"           "ORFlog"              "ORFpls"             
## [141] "ORFridge"            "ORFsvm"              "ownn"                "pam"                
## [145] "parRF"               "PART"                "partDSA"             "pcaNNet"            
## [149] "pcr"                 "pda"                 "pda2"                "penalized"          
## [153] "PenalizedLDA"        "plr"                 "pls"                 "plsRglm"            
## [157] "polr"                "ppr"                 "pre"                 "PRIM"               
## [161] "protoclass"          "qda"                 "QdaCov"              "qrf"                
## [165] "qrnn"                "randomGLM"           "ranger"              "rbf"                
## [169] "rbfDDA"              "Rborist"             "rda"                 "regLogistic"        
## [173] "relaxo"              "rf"                  "rFerns"              "RFlda"              
## [177] "rfRules"             "ridge"               "rlda"                "rlm"                
## [181] "rmda"                "rocc"                "rotationForest"      "rotationForestCp"   
## [185] "rpart"               "rpart1SE"            "rpart2"              "rpartCost"          
## [189] "rpartScore"          "rqlasso"             "rqnc"                "RRF"                
## [193] "RRFglobal"           "rrlda"               "RSimca"              "rvmLinear"          
## [197] "rvmPoly"             "rvmRadial"           "SBC"                 "sda"                
## [201] "sdwd"                "simpls"              "SLAVE"               "slda"               
## [205] "smda"                "snn"                 "sparseLDA"           "spikeslab"          
## [209] "spls"                "stepLDA"             "stepQDA"             "superpc"            
## [213] "svmBoundrangeString" "svmExpoString"       "svmLinear"           "svmLinear2"         
## [217] "svmLinear3"          "svmLinearWeights"    "svmLinearWeights2"   "svmPoly"            
## [221] "svmRadial"           "svmRadialCost"       "svmRadialSigma"      "svmRadialWeights"   
## [225] "svmSpectrumString"   "tan"                 "tanSearch"           "treebag"            
## [229] "vbmpRadial"          "vglmAdjCat"          "vglmContRatio"       "vglmCumulative"     
## [233] "widekernelpls"       "WM"                  "wsrf"                "xgbDART"            
## [237] "xgbLinear"           "xgbTree"             "xyf"
x <- matrix(rnorm(50*5), ncol=5)
y <- factor(rep(c("A", "B"), 25))
featurePlot(x = x, y = y, plot = "pairs")

featurePlot(x = x, y = y, plot = "density")

featurePlot(x = x, y = y, plot = "box")

Вывод

График pairs показывает попарные зависимости между признаками. График density отображает распределение значений признаков для каждого класса. График box позволяет визуализировать распределение данных по классам.

Задание 2

С использование функций из пакета Fselector [2] определить важность признаков для решения задачи классификации. Использовать набор data(iris). Сделать выводы.

Ход работы

install.packages("FSelector")
## Устанавливаю пакет в 'C:/Users/yuram/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'FSelector' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\yuram\AppData\Local\Temp\RtmpSYxDlp\downloaded_packages
library(FSelector)
data(iris)
weights <- information.gain(Species ~ ., data = iris)
print(weights)
##              attr_importance
## Sepal.Length       0.4521286
## Sepal.Width        0.2672750
## Petal.Length       0.9402853
## Petal.Width        0.9554360

Вывод

Функция information.gain позволяет определить важность признаков для задачи классификации. Результаты показывают, какие признаки наиболее информативны для разделения классов.

В данном случае высший показатель важности - Petal.Width Наименьший - Petal.Length

Задание 3

С использованием функции discretize() из пакета arules выполните преобразование непрерывной переменной в категориальную [3] различными методами: «interval» (равная ширина интервала), «frequency» (равная частота), «cluster» (кластеризация) и «fixed» (категории задают границы интервалов). Используйте набор данных iris. Сделайте выводы.

Ход работы

install.packages("arules")
## Устанавливаю пакет в 'C:/Users/yuram/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'arules' успешно распакован, MD5-суммы проверены
## Warning in install.packages :
##   не могу удалить прежнюю установку пакета 'arules'
## Warning in install.packages :
##   проблема с копированием C:\Users\yuram\AppData\Local\R\win-library\4.4\00LOCK\arules\libs\x64\arules.dll в C:\Users\yuram\AppData\Local\R\win-library\4.4\arules\libs\x64\arules.dll: Permission denied
## Warning in install.packages :
##   восстановлен 'arules'
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\yuram\AppData\Local\Temp\RtmpSYxDlp\downloaded_packages
library(arules)
## Загрузка требуемого пакета: Matrix
## 
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
## 
##     abbreviate, write
data(iris)
iris$Sepal.Length_interval <- discretize(iris$Sepal.Length, method = "interval", breaks = 3)
iris$Sepal.Length_frequency <- discretize(iris$Sepal.Length, method = "frequency", breaks = 3)
iris$Sepal.Length_cluster <- discretize(iris$Sepal.Length, method = "cluster", breaks = 3)
iris$Sepal.Length_fixed <- discretize(iris$Sepal.Length, method = "fixed", breaks = c(-Inf, 5, 6, Inf))
print(head(iris))
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length_interval
## 1          5.1         3.5          1.4         0.2  setosa             [4.3,5.5)
## 2          4.9         3.0          1.4         0.2  setosa             [4.3,5.5)
## 3          4.7         3.2          1.3         0.2  setosa             [4.3,5.5)
## 4          4.6         3.1          1.5         0.2  setosa             [4.3,5.5)
## 5          5.0         3.6          1.4         0.2  setosa             [4.3,5.5)
## 6          5.4         3.9          1.7         0.4  setosa             [4.3,5.5)
##   Sepal.Length_frequency Sepal.Length_cluster Sepal.Length_fixed
## 1              [4.3,5.4)           [4.3,5.63)              [5,6)
## 2              [4.3,5.4)           [4.3,5.63)           [-Inf,5)
## 3              [4.3,5.4)           [4.3,5.63)           [-Inf,5)
## 4              [4.3,5.4)           [4.3,5.63)           [-Inf,5)
## 5              [4.3,5.4)           [4.3,5.63)              [5,6)
## 6              [5.4,6.3)           [4.3,5.63)              [5,6)

Вывод

Метод interval:

Интервалы равной ширины: [4.3,5.5), [5.5,6.7), [6.7,7.9). Результат: большинство значений попадают в первый интервал [4.3,5.5). Метод прост, но может быть неэффективен, если данные распределены неравномерно.

Метод frequency:

Интервалы с равным количеством наблюдений: [4.3,5.4), [5.4,6.3), [6.3,7.9). Результат: значения распределены более равномерно по интервалам. Метод полезен, если важно сохранить равное количество наблюдений в каждом интервале.

Метод cluster:

Интервалы на основе кластеризации: [4.3,5.33), [5.33,6.27), [6.27,7.9). Результат: интервалы адаптированы под структуру данных. Метод учитывает распределение данных, что делает его более гибким.

Метод fixed:

Интервалы с заданными границами: [-Inf,5), [5,6), [6,Inf). Результат: значения распределены в соответствии с заданными границами. Метод полезен, если есть априорные знания о значимых границах интервалов.

Задание 4

Установите пакет Boruta и проведите выбор признаков для набора данных data(“Ozone”) [4, 5, 6]. Построить график boxplot, сделать выводы.

Ход работы

install.packages("Boruta")
## Устанавливаю пакет в 'C:/Users/yuram/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'Boruta' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\yuram\AppData\Local\Temp\RtmpSYxDlp\downloaded_packages
library(Boruta)
install.packages("mlbench")
## Устанавливаю пакет в 'C:/Users/yuram/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'mlbench' успешно распакован, MD5-суммы проверены
## Warning in install.packages :
##   не могу удалить прежнюю установку пакета 'mlbench'
## Warning in install.packages :
##   проблема с копированием C:\Users\yuram\AppData\Local\R\win-library\4.4\00LOCK\mlbench\libs\x64\mlbench.dll в C:\Users\yuram\AppData\Local\R\win-library\4.4\mlbench\libs\x64\mlbench.dll: Permission denied
## Warning in install.packages :
##   восстановлен 'mlbench'
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\yuram\AppData\Local\Temp\RtmpSYxDlp\downloaded_packages
data(Ozone)
## Warning in data(Ozone): данные 'Ozone' не найдены
library(mlbench)
data("Ozone")
Ozone <- na.omit(Ozone)
boruta_output <- Boruta(Ozone$V4 ~ ., data = Ozone, 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.64 secs:
##  confirmed 10 attributes: V1, V10, V11, V12, V13 and 5 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...
##  16. run of importance source...
##  17. run of importance source...
##  18. run of importance source...
## After 18 iterations, +1 secs:
##  rejected 1 attribute: V6;
##  still have 1 attribute left.
##  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...
## After 41 iterations, +2.2 secs:
##  rejected 1 attribute: V2;
##  no more attributes left.
print(boruta_output)
## Boruta performed 41 iterations in 2.23549 secs.
##  10 attributes confirmed important: V1, V10, V11, V12, V13 and 5 more;
##  3 attributes confirmed unimportant: V2, V3, V6;
boxplot(Ozone$V4 ~ Ozone$V1, main="Boxplot of Ozone levels by V1", xlab="V1", ylab="Ozone")

Вывод

Пакет Boruta помогает определить наиболее важные признаки для задачи классификации. График boxplot позволяет визуализировать распределение данных по категориям.