library(caret)
cat("Пакет caret загружен")
## Пакет caret загружен
model_list <- names(getModelInfo())
cat("Всего моделей:", length(model_list))
## Всего моделей: 239
cat("\nПервые 10 моделей:")
##
## Первые 10 моделей:
print(model_list[1:10])
## [1] "ada" "AdaBag" "AdaBoost.M1" "adaboost" "amdai"
## [6] "ANFIS" "avNNet" "awnb" "awtan" "bag"
set.seed(123)
x <- matrix(rnorm(50*5), ncol = 5)
y <- factor(rep(c("A", "B"), 25))
cat("Матрица x:", dim(x)[1], "строк,", dim(x)[2], "столбцов")
## Матрица x: 50 строк, 5 столбцов
cat("\nВектор y:", length(y), "элементов")
##
## Вектор y: 50 элементов
featurePlot(x = x, y = y, plot = "density",
layout = c(5,1),
main = "Графики плотности (Density Plot)")
featurePlot(x = x, y = y, plot = "box",
layout = c(5,1),
main = "Ящики с усами (Boxplot)")
featurePlot(x = x, y = y, plot = "pairs",
main = "Матрица диаграмм рассеяния (Pairs Plot)")
Выводы по разделу 1: На искусственных данных графики не показали различий между классами A и B.
library(FSelector)
data(iris)
cat("Данные iris:", nrow(iris), "наблюдений,", ncol(iris), "переменных\n")
## Данные iris: 150 наблюдений, 5 переменных
cat("Целевая переменная: Species (виды ирисов)\n")
## Целевая переменная: Species (виды ирисов)
ig_weights <- information.gain(Species ~ ., data = iris)
cat("Information Gain (отсортировано):\n")
## Information Gain (отсортировано):
print(ig_weights[order(-ig_weights$attr_importance), ])
## [1] 0.9554360 0.9402853 0.4521286 0.2672750
gr_weights <- gain.ratio(Species ~ ., data = iris)
su_weights <- symmetrical.uncertainty(Species ~ ., data = iris)
chi_weights <- chi.squared(Species ~ ., data = iris)
cat("Gain Ratio:\n"); print(gr_weights[order(-gr_weights$attr_importance), ])
## Gain Ratio:
## [1] 0.8713692 0.8584937 0.4196464 0.2472972
cat("\nSymmetrical Uncertainty:\n"); print(su_weights[order(-su_weights$attr_importance), ])
##
## Symmetrical Uncertainty:
## [1] 0.8705214 0.8571872 0.4155563 0.2452743
cat("\nChi-squared:\n"); print(chi_weights[order(-chi_weights$attr_importance), ])
##
## Chi-squared:
## [1] 0.9432359 0.9346311 0.6288067 0.4922162
Выводы по разделу 2: Наиболее важны признаки лепестка (Petal), наименее — признаки чашелистика (Sepal).
library(arules)
data(iris)
continuous_var <- iris$Petal.Length
disc_interval <- discretize(continuous_var, method = "interval", categories = 4,
labels = c("Очень короткий", "Короткий", "Средний", "Длинный"))
cat("Метод Interval:\n")
## Метод Interval:
print(table(disc_interval))
## disc_interval
## Очень короткий Короткий Средний Длинный
## 50 11 61 28
disc_frequency <- discretize(continuous_var, method = "frequency", categories = 4,
labels = c("Q1", "Q2", "Q3", "Q4"))
cat("\nМетод Frequency:\n")
##
## Метод Frequency:
print(table(disc_frequency))
## disc_frequency
## Q1 Q2 Q3 Q4
## 37 38 33 42
disc_cluster <- discretize(continuous_var, method = "cluster", categories = 4,
labels = c("Кластер1", "Кластер2", "Кластер3", "Кластер4"))
cat("\nМетод Cluster:\n")
##
## Метод Cluster:
print(table(disc_cluster))
## disc_cluster
## Кластер1 Кластер2 Кластер3 Кластер4
## 50 37 35 28
custom_breaks <- c(1.0, 2.0, 3.0, 5.0, 6.9)
disc_fixed <- discretize(continuous_var, method = "fixed", breaks = custom_breaks,
labels = c("setosa", "переход", "versicolor", "virginica"))
cat("\nМетод Fixed:\n")
##
## Метод Fixed:
print(table(disc_fixed))
## disc_fixed
## setosa переход versicolor virginica
## 50 0 54 46
Выводы по разделу 3: Метод Fixed лучше всего отражает биологические особенности ирисов.
library(mlbench)
library(Boruta)
data(Ozone)
ozone_clean <- na.omit(Ozone)
cat("Данные Ozone после очистки:", dim(ozone_clean), "\n")
## Данные Ozone после очистки: 203 13
set.seed(123)
boruta_result <- Boruta(x = ozone_clean[, -4], y = ozone_clean$V4, maxRuns = 100)
print(boruta_result)
## Boruta performed 24 iterations in 2.909206 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V13 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
plot(boruta_result, main = "Важность признаков для прогноза концентрации озона")
important <- getSelectedAttributes(boruta_result, withTentative = FALSE)
cat("Важные признаки:", important, "\n")
## Важные признаки: V1 V5 V7 V8 V9 V10 V11 V12 V13
cat("Количество важных признаков:", length(important))
## Количество важных признаков: 9
Выводы по разделу 4: Boruta выбрала 9 важных признаков из 12 для прогнозирования озона.
Выполнены все 4 задания. Освоены основные пакеты для анализа данных в R.