# Установка пакетов
install.packages("caret")
install.packages("ggplot2")
library(caret)
library(ggplot2)
# Просмотр доступных методов моделирования
model_methods <- names(getModelInfo())
cat("Всего доступно методов в CARET:", length(model_methods), "\n")
## Всего доступно методов в CARET: 239
cat("Первые 10 методов:\n")
## Первые 10 методов:
print(head(model_methods, 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))
data <- data.frame(x, y)
colnames(data) <- c(paste0("Var", 1:5), "Class")
# Диаграммы рассеяния
featurePlot(x = data[, 1:5],
y = data$Class,
plot = "pairs",
auto.key = list(columns = 2),
main = "Матрица диаграмм рассеяния")
Графический анализ данных с помощью featurePlot()
# Boxplot для каждого признака
featurePlot(x = data[, 1:5],
y = data$Class,
plot = "box",
scales = list(x = list(relation = "free"),
y = list(relation = "free")),
main = "Boxplot распределений по классам")
Графический анализ данных с помощью featurePlot()
# Density plot для каждого признака
featurePlot(x = data[, 1:5],
y = data$Class,
plot = "density",
scales = list(x = list(relation = "free"),
y = list(relation = "free")),
adjust = 1.5,
pch = "|",
layout = c(3, 2),
main = "Графики плотности распределения")
Графический анализ данных с помощью featurePlot()
Выводы по разделу CARET: 1. Пакет CARET содержит множество методов моделирования 2. Функция featurePlot() позволяет визуализировать данные разными способами 3. Для искусственных данных нет явного разделения классов
install.packages("FSelector")
library(FSelector)
data(iris)
# Определение важности признаков
weights_info_gain <- information.gain(Species~., iris)
weights_gain_ratio <- gain.ratio(Species~., iris)
weights_chi_squared <- chi.squared(Species~., iris)
cat("Information Gain:\n")
## Information Gain:
print(weights_info_gain)
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
cat("\nGain Ratio:\n")
##
## Gain Ratio:
print(weights_gain_ratio)
## attr_importance
## Sepal.Length 0.4196464
## Sepal.Width 0.2472972
## Petal.Length 0.8584937
## Petal.Width 0.8713692
par(mfrow = c(2, 2))
# Information Gain
barplot(weights_info_gain[,1],
names.arg = rownames(weights_info_gain),
main = "Information Gain",
col = rainbow(4),
ylab = "Важность",
las = 2)
# Gain Ratio
barplot(weights_gain_ratio[,1],
names.arg = rownames(weights_gain_ratio),
main = "Gain Ratio",
col = rainbow(4),
ylab = "Важность",
las = 2)
# Chi-squared
barplot(weights_chi_squared[,1],
names.arg = rownames(weights_chi_squared),
main = "Chi-squared",
col = rainbow(4),
ylab = "Важность",
las = 2)
# Сводный график
all_weights <- cbind(weights_info_gain[,1],
weights_gain_ratio[,1],
weights_chi_squared[,1])
colnames(all_weights) <- c("Inf.Gain", "Gain.Ratio", "Chi.Sq")
barplot(t(all_weights), beside = TRUE,
main = "Сравнение методов",
ylab = "Важность",
col = c("blue", "green", "red"),
legend.text = colnames(all_weights),
args.legend = list(x = "topright"))
Важность признаков для набора iris
par(mfrow = c(1, 1))
Выводы по разделу FSELECTOR: 1. Petal.Length - наиболее важный признак 2. Petal.Width также очень информативен 3. Sepal.Width имеет наименьшую важность
install.packages("arules")
library(arules)
data(iris)
# Различные методы дискретизации
disc_interval <- discretize(iris$Sepal.Length,
method = "interval",
categories = 4,
labels = c("Низкий", "Средний", "Высокий", "Очень высокий"))
disc_frequency <- discretize(iris$Sepal.Length,
method = "frequency",
categories = 4,
labels = c("Q1", "Q2", "Q3", "Q4"))
disc_cluster <- discretize(iris$Sepal.Length,
method = "cluster",
categories = 4)
disc_fixed <- discretize(iris$Sepal.Length,
method = "fixed",
breaks = c(-Inf, 5.0, 6.0, 7.0, Inf),
labels = c("Очень короткий", "Короткий", "Средний", "Длинный"))
cat("Метод 'interval':\n")
## Метод 'interval':
print(table(disc_interval))
## disc_interval
## Низкий Средний Высокий Очень высокий
## 41 48 48 13
cat("\nМетод 'frequency':\n")
##
## Метод 'frequency':
print(table(disc_frequency))
## disc_frequency
## Q1 Q2 Q3 Q4
## 32 41 35 42
cat("\nМетод 'cluster' (кластеризация):\n")
##
## Метод 'cluster' (кластеризация):
print(table(disc_cluster))
## disc_cluster
## [4.3,5.28) [5.28,6.05) [6.05,6.87) [6.87,7.9]
## 45 44 44 17
cat("\nМетод 'fixed' (заданные границы: (-Inf,5.0], (5.0,6.0], (6.0,7.0], (7.0,Inf)):\n")
##
## Метод 'fixed' (заданные границы: (-Inf,5.0], (5.0,6.0], (6.0,7.0], (7.0,Inf)):
print(table(disc_fixed))
## disc_fixed
## Очень короткий Короткий Средний Длинный
## 22 61 54 13
par(mfrow = c(2, 2))
# Метод interval
barplot(table(disc_interval),
main = 'Метод "interval"\n(равная ширина)',
xlab = "Категории",
col = "lightgreen",
ylim = c(0, 60))
# Метод frequency
barplot(table(disc_frequency),
main = 'Метод "frequency"\n(равная частота)',
xlab = "Категории",
col = "lightcoral",
ylim = c(0, 60))
# Метод cluster
barplot(table(disc_cluster),
main = 'Метод "cluster"\n(кластеризация)',
xlab = "Категории",
col = "lightyellow",
ylim = c(0, 60))
# Метод fixed
barplot(table(disc_fixed),
main = 'Метод "fixed"\n(заданные границы)',
xlab = "Категории",
ylab = "Количество наблюдений",
col = "lavender",
border = "purple",
ylim = c(0, 60))
Сравнение методов дискретизации
par(mfrow = c(1, 1))
Выводы по разделу ARULES: 1. Метод ‘interval’ создает равные по ширине интервалы 2. Метод ‘frequency’ обеспечивает равное количество наблюдений 3. Метод ‘cluster’ учитывает естественную структуру данных 4.Метод ‘fixed’ позволяет задать границы вручную
install.packages("Boruta")
install.packages("mlbench")
library(Boruta)
library(mlbench)
data("Ozone", package = "mlbench")
ozone_data <- Ozone
ozone_clean <- na.omit(ozone_data)
# Выбор признаков с помощью Boruta
set.seed(123)
boruta_result <- Boruta(V4 ~ .,
data = ozone_clean,
doTrace = 0,
maxRuns = 50)
cat("Результаты Boruta:\n")
## Результаты Boruta:
print(boruta_result)
## Boruta performed 24 iterations in 1.91366 secs.
## 9 attributes confirmed important: V1, V10, V11, V12, V13 and 4 more;
## 3 attributes confirmed unimportant: V2, V3, V6;
final_features <- getSelectedAttributes(boruta_result, withTentative = FALSE)
cat("\nОтобранные признаки:", final_features, "\n")
##
## Отобранные признаки: V1 V5 V7 V8 V9 V10 V11 V12 V13
plot(boruta_result,
main = "Важность признаков (Boruta) для набора Ozone",
xlab = "Признаки",
ylab = "Важность",
las = 2,
cex.axis = 0.8)
Результаты отбора признаков методом Boruta
par(mfrow = c(1, 2))
# Гистограмма важности
hist(boruta_result$ImpHistory[,1],
main = "Распределение важности",
xlab = "Важность",
col = "lightblue",
breaks = 20)
# Количество признаков по категориям
status_counts <- table(boruta_result$finalDecision)
barplot(status_counts,
main = "Распределение по решениям",
xlab = "Решение",
ylab = "Количество",
col = c("red", "yellow", "green"))
Результаты отбора признаков методом Boruta
par(mfrow = c(1, 1))
Выводы по разделу BORUTA: 1. Boxplot Boruta эффективно отбирает релевантные признаки 2. График показывает статистическую значимость отбора 3. Метод работает с многомерными наборами данных
Проведен комплексный анализ данных с использованием четырех пакетов R. Каждый инструмент решает специфические задачи: CARET - моделирование, Fselector - оценка важности, arules - дискретизация, Boruta - отбор признаков. Визуализация результатов помогает лучше понять данные и принять обоснованные решения.