Лабораторная работа №1 “Анализ данных”

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

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

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.

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

library(FSelector)
data(iris)

cat("Данные iris:", nrow(iris), "наблюдений,", ncol(iris), "переменных\n")
## Данные iris: 150 наблюдений, 5 переменных
cat("Целевая переменная: Species (виды ирисов)\n")
## Целевая переменная: Species (виды ирисов)

Information Gain

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).

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

library(arules)
data(iris)
continuous_var <- iris$Petal.Length

Метод interval

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

Метод frequency

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

Метод cluster

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

Метод fixed

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 лучше всего отражает биологические особенности ирисов.

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

library(mlbench)
library(Boruta)
data(Ozone)
ozone_clean <- na.omit(Ozone)
cat("Данные Ozone после очистки:", dim(ozone_clean), "\n")
## Данные Ozone после очистки: 203 13

Запуск Boruta

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.