Установить пакет CARET, выполнить команду names(getModelInfo()), ознакомиться со списком доступных методов выбора признаков. Выполните графический разведочный анализ данных с использование функции featurePlot() для набора данных из справочного файла пакета CARET:
install.packages("caret")
## пакет 'caret' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\dasha\AppData\Local\Temp\Rtmp4M0gys\downloaded_packages
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"
x <- matrix(rnorm(50*5), ncol=5)
y <- factor(rep(c("A", "B"), 25))
df <- data.frame(x)
colnames(df) <- paste0("Var", 1:5)
featurePlot(x = df, y = y, plot = "pairs")
#По графику видно, что исходные признаки (Var1–Var5) не обладают ярко выраженной способностью к разделению классов A и B. Во всех парах признаков наблюдается значительное пересечение точек разных классов. Это указывает на то, что без дополнительного анализа (например, отбора признаков или построения новых признаков) использовать эти данные для классификации будет затруднительно.
jpeg("feature_plot.jpg")
featurePlot(x = df, y = y, plot = "pairs")
dev.off()
## png
## 2
install.packages("FSelector")
## пакет 'FSelector' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\dasha\AppData\Local\Temp\Rtmp4M0gys\downloaded_packages
library(FSelector)
data(iris)
info_gain<-information.gain(Species ~ ., data=iris)
print(info_gain)
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
info_gain[order(-info_gain$attr_importance),]
## [1] 0.9554360 0.9402853 0.4521286 0.2672750
#Результаты оценки важности признаков с помощью Information Gain показали, что признаки Petal.Width и Petal.Length имеют наибольшую информативность (0.955 и 0.940 соответственно) и, следовательно, являются наиболее важными для классификации видов ирисов. Признаки Sepal.Length и особенно Sepal.Width имеют значительно меньшую информативность, что может говорить об их слабом влиянии на результат модели.
install.packages("arules")
## пакет 'arules' успешно распакован, MD5-суммы проверены
## Warning: не могу удалить прежнюю установку пакета 'arules'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): проблема с копированием
## D:\R-4.5.1\library\00LOCK\arules\libs\x64\arules.dll в
## D:\R-4.5.1\library\arules\libs\x64\arules.dll: Permission denied
## Warning: восстановлен 'arules'
##
## Скачанные бинарные пакеты находятся в
## C:\Users\dasha\AppData\Local\Temp\Rtmp4M0gys\downloaded_packages
library(arules)
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
##
## abbreviate, write
data(iris)
x<-iris$Petal.Length
interval <- discretize(x, method="interval", categories=3)
## Warning in discretize(x, method = "interval", categories = 3): Parameter
## categories is deprecated. Use breaks instead! Also, the default method is now
## frequency!
table(interval)
## interval
## [1,2.97) [2.97,4.93) [4.93,6.9]
## 50 54 46
frequency <- discretize(x, method="frequency", categories=3)
## Warning in discretize(x, method = "frequency", categories = 3): Parameter
## categories is deprecated. Use breaks instead! Also, the default method is now
## frequency!
table(frequency)
## frequency
## [1,2.63) [2.63,4.9) [4.9,6.9]
## 50 49 51
cluster <- discretize(x, method="cluster", categories=3)
## Warning in discretize(x, method = "cluster", categories = 3): Parameter
## categories is deprecated. Use breaks instead! Also, the default method is now
## frequency!
table(cluster)
## cluster
## [1,2.95) [2.95,5.13) [5.13,6.9]
## 50 66 34
fixed <- discretize(x, method="fixed", breaks=c(0,2,5,7))
table(fixed)
## fixed
## [0,2) [2,5) [5,7]
## 50 54 46
#interval и fixed дают равные по ширине интервалы, но неравные по количеству наблюдений, что указывает на неравномерное распределение переменной Petal.Length.
#frequency и cluster дают почти равные частоты, и могут быть полезны, если нужно анализировать группы с равным количеством элементов.
#Сходство между frequency и cluster может говорить о том, что данные действительно имеют естественную трёхкластерную структуру
install.packages("Boruta")
## пакет 'Boruta' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\dasha\AppData\Local\Temp\Rtmp4M0gys\downloaded_packages
library(Boruta)
install.packages("mlbench")
## пакет 'mlbench' успешно распакован, MD5-суммы проверены
## Warning: не могу удалить прежнюю установку пакета 'mlbench'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): проблема с копированием
## D:\R-4.5.1\library\00LOCK\mlbench\libs\x64\mlbench.dll в
## D:\R-4.5.1\library\mlbench\libs\x64\mlbench.dll: Permission denied
## Warning: восстановлен 'mlbench'
##
## Скачанные бинарные пакеты находятся в
## C:\Users\dasha\AppData\Local\Temp\Rtmp4M0gys\downloaded_packages
library(mlbench)
data("Ozone")
set.seed(123)
ozone_clean<- Ozone[!is.na(Ozone$V4),]
boruta_result<-Boruta(V4 ~., data=ozone_clean, doTrace=0)
plot(boruta_result, las=2, cex.axis=0.7)
jpeg("boruta_result.jpg")
plot(boruta_result, las=2, cex.axis=0.7)
dev.off()
## png
## 2
#Метод Boruta выделил следующие признаки как значимые для построения модели на наборе данных Ozone: V8, V12, V10, V7, V6 и V9. Эти переменные имеют высокую важность (Importance) по сравнению с теневыми и отклонёнными признаками. Признаки V3, V0, V2 и V13 были отвергнуты, так как их вклад в модель оказался незначительным. Несколько признаков остались в статусе неопределённых и могут быть включены в модель после дополнительного анализа.
#Признаки закодированы цветом, который означает:
#красный — отклонённые признаки (Rejected): не считаются значимыми.
#синий — теневые признаки (Shadow attributes): искусственные перемешанные признаки, для сравнения.
#жёлтый — неуверенные (Tentative): важность не определена однозначно.
#зелёный — принятые признаки (Confirmed): значимые признаки, рекомендованные к использованию.