knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
options(repos = c(CRAN = "https://cloud.r-project.org/")) # Установка зеркала CRAN

if (!require("caret")) install.packages("caret")
## Загрузка требуемого пакета: caret
## Warning: пакет 'caret' был собран под R версии 4.4.3
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
library(caret)

set.seed(123)
x <- matrix(rnorm(50*5), ncol = 5)
y <- factor(rep(c("A", "B"), 25))

# График плотности распределения
featurePlot(x, y, plot = "density", scales = list(x = list(relation = "free"), adjust = 1.5, pch = "|", layout = c(5, 1)))

# График boxplot
featurePlot(x, y, plot = "box", scales = list(y = list(relation = "free")), layout = c(5, 1))

# График парного соответствия
featurePlot(x, y, plot = "pairs", auto.key = list(columns = 2))

Вывод: различия между классами статистически незначимы. Признаки V1–V5 не разделяют классы A и B из-за случайной природы данных.

  if (!require("FSelector")) install.packages("FSelector")
## пакет 'FSelector' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\Виктор\AppData\Local\Temp\RtmpmoLhI3\downloaded_packages
library(FSelector)
data(iris)

# Расчет информационного выигрыша
weights <- information.gain(Species ~ ., data = iris)
ordered_weights <- weights[order(-weights$attr_importance), , drop = FALSE]

# Визуализация
barplot(ordered_weights$attr_importance, 
        names.arg = rownames(ordered_weights),
        main = "Важность признаков (Information Gain)",
        col = "skyblue",
        ylab = "Информационный выигрыш")

Вывод: наиболее значимые признаки — Petal.Length и Petal.Width. Признаки чашелистика (Sepal.Length, Sepal.Width) можно исключить для упрощения модели.

if (!require("arules")) install.packages("arules")
library(arules)

# Методы дискретизации
methods <- c("interval", "frequency", "cluster", "fixed")
results <- list()

for (method in methods) {
  if (method == "fixed") {
    disc <- discretize(iris$Sepal.Length, method = method, breaks = c(4, 5.5, 7, 8))
  } else {
    disc <- discretize(iris$Sepal.Length, method = method, breaks = 3)
  }
  results[[method]] <- disc
}

# Визуализация
par(mfrow = c(2, 2))
for (i in 1:4) {
  plot(results[[i]], main = paste("Метод:", methods[i]), col = rainbow(3))
}

Вывод: методы cluster и frequency лучше учитывают распределение данных. Метод fixed полезен для ручного контроля границ.

if (!require("Boruta")) install.packages("Boruta")
if (!require("mlbench")) install.packages("mlbench")
library(Boruta)
library(mlbench)

data(Ozone)
ozone_clean <- na.omit(Ozone)
colnames(ozone_clean) <- paste0("V", 1:13)

# Запуск алгоритма
set.seed(123)
boruta_model <- Boruta(V4 ~ ., data = ozone_clean, doTrace = 0)

# Визуализация
plot(boruta_model, 
     xlab = "Признаки", 
     ylab = "Z-значение",
     main = "Важность признаков (Boruta)",
     col = c("skyblue", "salmon", "gold"))

# Значимые признаки
confirmed_features <- getSelectedAttributes(boruta_model, withTentative = FALSE)
cat("Значимые признаки:", confirmed_features)
## Значимые признаки: V1 V5 V7 V8 V9 V10 V11 V12 V13

Вывод: ключевые признаки — V5 (температура), V8 (скорость ветра), V9 (солнечная радиация). Их важность подтверждена статистически.