{r} library(caret)
{r} models <- names(getModelInfo()) length(models)
{r} head(models)
Функция getModelInfo() возвращает список реализованных в пакете caret алгоритмов машинного обучения для задач классификации и регрессии.
{r} set.seed(141)
x <- matrix(rnorm(50 * 5), ncol = 5) colnames(x) <- paste0(“X”, 1:5)
y <- factor(rep(c(“A”, “B”), 25))
Попарные диаграммы рассеяния признаков показали, что объекты классов A и B существенно перекрываются в большинстве двумерных проекций пространства признаков. Чёткой разделимости классов по отдельным парам признаков не наблюдается.
Графики плотности также показывают значительное пересечение распределений признаков двух классов. Следовательно, отдельно взятые признаки не обеспечивают однозначного разделения объектов на классы.
Для выполнения задания используется пакет FSelectorRcpp, реализующий методы оценки информативности признаков.
{r} library(FSelectorRcpp)
Загрузим набор данных:
{r} data(iris) str(iris)
Набор данных iris содержит четыре числовых признака и категориальную переменную Species, определяющую класс объекта.
Рассчитаем информационную значимость признаков:
{r} weights <- information_gain( Species ~ ., data = iris )
weights
Отсортируем признаки по убыванию важности:
{r} weights_sorted <- weights[ order(-weights$importance),]
weights_sorted
В результате оценки признаков методом информационного выигрыша наиболее информативными для определения вида ириса являются характеристики лепестка — Petal.Width и Petal.Length.
Признаки чашелистика также содержат полезную информацию, однако их вклад в разделение классов меньше. Следовательно, характеристики лепестков лучше подходят для классификации объектов набора данных iris.
{r} library(arules)
{r} data(iris)
x <- iris$Petal.Length
{r} x_interval <- discretize( x, method = “interval”, breaks = 3 )
table(x_interval)
Диапазон значений делится на три примерно одинаковых по ширине интервала.
{r} x_frequency <- discretize( x, method = “frequency”, breaks = 3 )
table(x_frequency)
При использовании данного способа границы выбираются таким образом, чтобы в каждом интервале находилось примерно одинаковое количество объектов.
{r} x_cluster <- discretize( x, method = “cluster”, breaks = 3 )
table(x_cluster)
Границы интервалов определяются с учётом распределения и структуры исходных данных.
{r} x_fixed <- discretize( x, method = “fixed”, breaks = c(1, 3, 5, 7) )
table(x_fixed)
При использовании метода fixed границы интервалов задаются вручную.
Сравним результаты различных методов:
{r} head( data.frame( original = x, interval = x_interval, frequency = x_frequency, cluster = x_cluster, fixed = x_fixed ) )
В результате дискретизации непрерывного признака Petal.Length различными методами были получены разные варианты разбиения диапазона значений на интервалы.
Метод равной ширины формирует интервалы одинакового размера, но с различным количеством объектов. Метод равной частоты обеспечивает приблизительно одинаковое количество наблюдений в каждом интервале.
Метод кластеризации формирует интервалы с учётом структуры исходных данных. Метод фиксированных границ позволяет самостоятельно задавать интервалы в зависимости от условий задачи.
{r} library(mlbench) library(Boruta)
Загрузка данных и просмотр структуры:
{r} data(Ozone) str(Ozone)
Получим краткую статистическую информацию о наборе данных:
{r} summary(Ozone)
Удалим строки, содержащие пропущенные значения:
{r} oz <- na.omit(Ozone)
Запустим алгоритм Boruta:
{r} set.seed(123)
bor <- Boruta( V4 ~ ., data = oz, doTrace = 1 )
Посмотрим полученный результат:
{r} bor
Извлечём признаки, которые алгоритм определил как значимые:
{r} getSelectedAttributes( bor, withTentative = TRUE )
С помощью алгоритма Boruta был выполнен отбор признаков для набора данных Ozone. Алгоритм сравнивает реальные признаки с искусственно созданными теневыми признаками и позволяет определить переменные, обладающие статистически значимой важностью.
Часть признаков была признана информативной для прогнозирования целевой переменной, а признаки с низкой значимостью были отклонены. Визуализация позволяет наглядно сравнить важность исходных переменных с уровнем случайных теневых признаков.