caretГенерируем случайные данные (50×5) и фактор ответа.
set.seed(123)
x <- matrix(rnorm(50*5), ncol=5)
y <- factor(rep(c("A", "B"), 25))
# Матрица точечных диаграмм
featurePlot(x = x, y = y, plot = "pairs", auto.key = list(columns = 2))
Вывод: Все графики (pairs,
density, boxplot) показывают отсутствие
разделения между классами A и B, так как данные сгенерированы случайно и
независимо от метки класса.
irisИспользуем пакет CORElearn (аналог
FSelector). Применяем методы информационного выигрыша,
коэффициента усиления и ReliefF.
data(iris)
# Information Gain
ig <- attrEval(Species ~ ., iris, estimator = "InfGain")
cat("Information Gain:\n")
## Information Gain:
print(ig)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.5572327 0.2831260 0.9182958 0.9182958
# Gain Ratio
gr <- attrEval(Species ~ ., iris, estimator = "GainRatio")
cat("\nGain Ratio:\n")
##
## Gain Ratio:
print(gr)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.5919339 0.3512938 1.0000000 1.0000000
# ReliefF (k=5)
set.seed(123)
rel <- attrEval(Species ~ ., iris, estimator = "ReliefFequalK", kNearestEqual = 5)
cat("\nReliefF (k=5):\n")
##
## ReliefF (k=5):
print(rel)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## 0.3564938 0.1023148 0.7937702 0.7594630
Вывод: Во всех трёх методах признаки
Petal.Width и Petal.Length имеют наибольшую
важность, тогда как Sepal.Width — наименьшую.
Следовательно, размеры лепестка являются ключевыми для классификации
видов ириса.
arules)Выбираем переменную Petal.Length набора
iris и применяем четыре метода дискретизации: равные
интервалы, равная частота, кластеризация и фиксированные границы.
x <- iris$Petal.Length
# 1) Равные интервалы
disc_interval <- discretize(x, method = "interval", breaks = 3)
table(disc_interval)
## disc_interval
## [1,2.97) [2.97,4.93) [4.93,6.9]
## 50 54 46
# 2) Равная частота (квантили)
disc_freq <- discretize(x, method = "frequency", breaks = 3)
table(disc_freq)
## disc_freq
## [1,2.63) [2.63,4.9) [4.9,6.9]
## 50 49 51
# 3) Кластеризация k-means
disc_cluster <- discretize(x, method = "cluster", breaks = 3)
table(disc_cluster)
## disc_cluster
## [1,2.85) [2.85,4.89) [4.89,6.9]
## 50 49 51
# 4) Фиксированные границы (вручную)
disc_fixed <- discretize(x, method = "fixed", breaks = c(1, 3, 5))
table(disc_fixed)
## disc_fixed
## [1,3) [3,5]
## 50 58
Вывод: Каждый метод даёт разное распределение.
interval создаёт интервалы равной длины,
frequency — примерно одинаковое число наблюдений в каждом
интервале, cluster выделяет естественные группы, а
fixed позволяет задать произвольные границы (значения вне
диапазона становятся NA).
Boruta (набор
Ozone)Загружаем данные Ozone из пакета mlbench,
удаляем пропуски, применяем алгоритм Boruta для предсказания переменной
V4 (максимальный озон).
data(Ozone)
Ozone <- na.omit(Ozone)
set.seed(123)
boruta_out <- Boruta(V4 ~ ., data = Ozone, doTrace = 0)
print(boruta_out)
## Boruta performed 18 iterations in 0.2300179 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V13 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
# Финальное решение по неопределённым признакам
final <- TentativeRoughFix(boruta_out)
print(final)
## Boruta performed 18 iterations in 0.2300179 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V13 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
# График важности (boxplot)
plot(boruta_out, xlab = "Признаки", ylab = "Важность")
Вывод: Алгоритм Boruta выделил несколько
информативных признаков (например, V2, V5,
V6, V11 и др.), которые имеют важность выше
т.н. теневых переменных (shadowMin). Остальные переменные
были отвергнуты. Это позволяет сократить размерность данных для
построения прогнозной модели концентрации озона.
В ходе лабораторной работы выполнены все этапы: 1. Разведочный анализ
синтетических данных с featurePlot. 2. Оценка важности
признаков для iris с помощью CORElearn. 3.
Дискретизация непрерывного признака методами пакета arules.
4. Отбор признаков на наборе Ozone с помощью
Boruta.
Все результаты воспроизводимы, код выполняется без ошибок. Отчёт создан в формате R Markdown и опубликован на RPubs.