R Markdown
Задание 1
install.packages("caret")
## Устанавливаю пакет в 'C:/Users/User1/AppData/Local/R/win-library/4.5'
## (потому что 'lib' не определено)
## пакет 'caret' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\User1\AppData\Local\Temp\RtmpwTvIOL\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")

jpeg("feature_plot.jpg")
featurePlot(x=df, y=y, plot="pairs")
dev.off()
## png
## 2
#По графику видно, что исходные признаки (Var1–Var5) не обладают ярко выраженной способностью к разделению классов A и B. Во всех парах признаков наблюдается значительное пересечение точек разных классов. Это указывает на то, что без дополнительного анализа (например, отбора признаков или построения новых признаков) использовать эти данные для классификации будет затруднительно.
Задание 2
install.packages("FSelectorRcpp")
## Устанавливаю пакет в 'C:/Users/User1/AppData/Local/R/win-library/4.5'
## (потому что 'lib' не определено)
## пакет 'FSelectorRcpp' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\User1\AppData\Local\Temp\RtmpwTvIOL\downloaded_packages
library(FSelectorRcpp)
data(iris)
info_gain<-information_gain(Species ~ ., data=iris)
print(info_gain)
## attributes importance
## 1 Sepal.Length 0.4521286
## 2 Sepal.Width 0.2672750
## 3 Petal.Length 0.9402853
## 4 Petal.Width 0.9554360
info_gain[order(-info_gain$importance),]
## attributes importance
## 4 Petal.Width 0.9554360
## 3 Petal.Length 0.9402853
## 1 Sepal.Length 0.4521286
## 2 Sepal.Width 0.2672750
#Результаты оценки важности признаков с помощью Information Gain показали, что признаки Petal.Width и Petal.Length имеют наибольшую информативность (0.955 и 0.940 соответственно) и, следовательно, являются наиболее важными для классификации видов ирисов. Признаки Sepal.Length и особенно Sepal.Width имеют значительно меньшую информативность, что может говорить об их слабом влиянии на результат модели.
Задание 3
install.packages("arules")
## Устанавливаю пакет в 'C:/Users/User1/AppData/Local/R/win-library/4.5'
## (потому что 'lib' не определено)
## пакет 'arules' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\User1\AppData\Local\Temp\RtmpwTvIOL\downloaded_packages
library(arules)
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующий объект скрыт от 'package:FSelectorRcpp':
##
## discretize
## Следующие объекты скрыты от '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 может говорить о том, что данные действительно имеют естественную трёхкластерную структуру
Задание 4
install.packages("Boruta")
## Устанавливаю пакет в 'C:/Users/User1/AppData/Local/R/win-library/4.5'
## (потому что 'lib' не определено)
## пакет 'Boruta' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\User1\AppData\Local\Temp\RtmpwTvIOL\downloaded_packages
library(Boruta)
install.packages("mlbench")
## Устанавливаю пакет в 'C:/Users/User1/AppData/Local/R/win-library/4.5'
## (потому что 'lib' не определено)
## пакет 'mlbench' успешно распакован, MD5-суммы проверены
##
## Скачанные бинарные пакеты находятся в
## C:\Users\User1\AppData\Local\Temp\RtmpwTvIOL\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): значимые признаки, рекомендованные к использованию.