1. Работа с пакетом caret

Установка и загрузка пакета caret

install.packages("caret", repos = "https://cran.rstudio.com/")
## пакет 'caret' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\squor\AppData\Local\Temp\RtmpCg6Uto\downloaded_packages
library(caret)

# Вывести список доступных моделей
model_list <- names(getModelInfo())
head(model_list)
## [1] "ada"         "AdaBag"      "AdaBoost.M1" "adaboost"    "amdai"      
## [6] "ANFIS"

Графический анализ данных

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

# Построение графика featurePlot
featurePlot(x, y, plot="box")


2. Определение важности признаков (FSelector)

Установка и загрузка пакета FSelector

install.packages("FSelector", repos = "https://cran.rstudio.com/")
## пакет 'FSelector' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\squor\AppData\Local\Temp\RtmpCg6Uto\downloaded_packages
library(FSelector)

Анализ важности признаков в iris

data(iris)
importance <- information.gain(Species ~ ., iris)
importance
##              attr_importance
## Sepal.Length       0.4521286
## Sepal.Width        0.2672750
## Petal.Length       0.9402853
## Petal.Width        0.9554360

3. Дискретизация данных (arules)

Установка и загрузка пакета arules

install.packages("arules", repos = "https://cran.rstudio.com/")
## пакет 'arules' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\squor\AppData\Local\Temp\RtmpCg6Uto\downloaded_packages
library(arules)

Преобразование переменной Sepal.Length

iris$Sepal.Length.interval <- discretize(iris$Sepal.Length, method="interval", categories=3)
## Warning in discretize(iris$Sepal.Length, method = "interval", categories = 3):
## Parameter categories is deprecated. Use breaks instead! Also, the default
## method is now frequency!
iris$Sepal.Length.frequency <- discretize(iris$Sepal.Length, method="frequency", categories=3)
## Warning in discretize(iris$Sepal.Length, method = "frequency", categories = 3):
## Parameter categories is deprecated. Use breaks instead! Also, the default
## method is now frequency!
# Вывод количества элементов в каждой категории
table(iris$Sepal.Length.interval)
## 
## [4.3,5.5) [5.5,6.7) [6.7,7.9] 
##        52        70        28
table(iris$Sepal.Length.frequency)
## 
## [4.3,5.4) [5.4,6.3) [6.3,7.9] 
##        46        53        51

4. Выбор признаков с Boruta

Установка и загрузка пакетов

install.packages("Boruta", repos = "https://cran.rstudio.com/")
## пакет 'Boruta' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\squor\AppData\Local\Temp\RtmpCg6Uto\downloaded_packages
install.packages("mlbench", repos = "https://cran.rstudio.com/")
## пакет 'mlbench' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\squor\AppData\Local\Temp\RtmpCg6Uto\downloaded_packages
library(Boruta)
library(mlbench)

Обработка данных Ozone

data(Ozone)

# Преобразование факторных переменных в числовые
ozone_data <- Ozone
for (col in names(ozone_data)) {
  if (is.factor(ozone_data[[col]])) {
    ozone_data[[col]] <- as.numeric(as.character(ozone_data[[col]]))
  }
}

# Удаление NA
ozone_data <- ozone_data[complete.cases(ozone_data), ]

Запуск Boruta для отбора признаков

set.seed(123)
boruta_result <- Boruta(V7 ~ ., data=ozone_data, doTrace=2, maxRuns=50)

# График результатов Boruta
plot(boruta_result)

Визуализация важности признаков

library(ggplot2)

boruta_stats <- attStats(boruta_result)

ggplot(boruta_stats, aes(x=row.names(boruta_stats), y=meanImp)) +
  geom_boxplot() +
  coord_flip() +
  labs(title="Boruta Feature Importance", x="Features", y="Importance") +
  theme_minimal()


5. Выводы

  1. Пакет caret позволяет анализировать данные и выбирать оптимальные модели.
  2. Методы FSelector помогают выявлять важность признаков с помощью information.gain().
  3. Дискретизация (arules) полезна для преобразования непрерывных данных в категориальные.
  4. Метод Boruta позволяет отбирать наиболее значимые признаки для машинного обучения.