#ЗАДАНИЕ 1
Установка и использование пакета caret
Установка пакета (не обязательно, если уже установлен)
install.packages("caret")
## Загрузка требуемого пакета: ggplot2
## Загрузка требуемого пакета: lattice
Вывод: после выполнения команд мы получим графики, которые визуализируют корреляции между признаками для двух классов (A и B). Это может помочь выявить зависимость признаков от классов, что является важной частью анализа данных перед построением модели.
#ЗАДАНИЕ 2
Определение важности признаков с использованием пакета
FSelector.
Установка пакета (не обязательно, если уже установлен):
install.packages("FSelector")
Определение важности признаков с помощью метода information gain, вывод важности признаков
library(FSelector)
data(iris)
importance <- information.gain(Species ~ ., data = iris)
print(importance)
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
Определение важности с использованием метода gain ratio, вывод важности по методу gain ratio
importance_gain_ratio <- gain.ratio(Species ~ ., data = iris)
print(importance_gain_ratio)
## attr_importance
## Sepal.Length 0.4196464
## Sepal.Width 0.2472972
## Petal.Length 0.8584937
## Petal.Width 0.8713692
Вывод: после выполнения команд, представленных выше, мы видим таблицу с важностью каждого признака. Например, для метода information.gain() можно сделать следующие выводы: - Petal.Length и Petal.Width оказываются наиболее важными признаками для классификации, так как эти признаки значительно различаются между тремя классами (setosa, versicolor, virginica). Их высокий прирост информации указывает на то, что они хорошо разделяют виды ирисов. - Sepal.Length и Sepal.Width демонстрируют меньшую важность для классификации, что может говорить о том, что различия в этих признаках между видами не так значительны. Это может привести к меньшему их влиянию на точность модели. - Выбор метода оценки важности может немного влиять на результаты, но общий вывод остаётся неизменным: признаки, связанные с лепестками (Petal), имеют наибольшую информативность для классификации ирисов. Использование различных методов может показать немного разные результаты, что важно учитывать при выборе признаков для модели.
#ЗАДАНИЕ 3
Преобразование непрерывной переменной в категориальную с
использованием функции discretize() из пакета
arules.
Установка пакета (не обязательно, если уже установлен):
install.packages("arules")
library(arules)
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
##
## abbreviate, write
data(iris)
# Применение метода равной ширины интервала
discretized_interval <- discretize(iris$Sepal.Length, method = "interval", breaks = 3)
table(discretized_interval)
## discretized_interval
## [4.3,5.5) [5.5,6.7) [6.7,7.9]
## 52 70 28
# Применение метода равной частоты
discretized_frequency <- discretize(iris$Sepal.Length, method = "frequency", breaks = 3)
table(discretized_frequency)
## discretized_frequency
## [4.3,5.4) [5.4,6.3) [6.3,7.9]
## 46 53 51
# Применение метода кластеризации
discretized_cluster <- discretize(iris$Sepal.Length, method = "cluster", breaks = 3)
table(discretized_cluster)
## discretized_cluster
## [4.3,5.45) [5.45,6.46) [6.46,7.9]
## 52 63 35
# Применение метода фиксированных границ
discretized_fixed <- discretize(iris$Sepal.Length, method = "fixed", breaks = c(4.3, 5.5, 6.5, 7.9))
table(discretized_fixed)
## discretized_fixed
## [4.3,5.5) [5.5,6.5) [6.5,7.9]
## 52 63 35
Вывод: после выполнения команд получим результаты дискретизации переменной Sepal.Length набора данных iris по четырем различным методам: Метод «interval»: Делит диапазон значений на равные интервалы. В результате можно увидеть, как распределяются значения по этим интервалам. Метод «frequency»: Делит значения так, чтобы в каждом интервале было примерно одинаковое количество наблюдений. Это может помочь выявить, как распределены значения в выборке. Метод «cluster»: Использует алгоритмы кластеризации для группировки значений. Это может быть полезно для выявления скрытых паттернов в данных. Метод «fixed»: Позволяет задавать конкретные границы для интервалов. Это полезно, если у вас есть определённые категории, которые необходимо выделить. В зависимости от метода дискретизации, результаты могут значительно различаться. Это может повлиять на дальнейший анализ и построение моделей, поэтому выбор метода должен основываться на цели анализа и особенностях данных.
#ЗАДАНИЕ 4 Выбор признаков с использованием пакета
Boruta.
Установка пакета (не обязательно, если уже установлен):
install.packages("Boruta")
install.packages("mlbench")
Подключение пакета и использование набора данных Ozone для выбора признаков:
library(Boruta)
library(mlbench) # Подключаем пакет mlbench
data(Ozone) # Загружаем набор данных Ozone
# Проверка на пропуски
sum(is.na(Ozone)) # Общее количество пропусков
## [1] 203
colSums(is.na(Ozone)) # Количество пропусков в каждом столбце
## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
## 0 0 0 5 12 0 15 2 139 15 1 14 0
# Удаление строк с пропусками
Ozone <- na.omit(Ozone)
# Проверка имен столбцов
print(colnames(Ozone)) # Проверка имен столбцов
## [1] "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10" "V11" "V12"
## [13] "V13"
# Предположим, что используем V1 как целевую переменную
Ozone$V1 <- as.factor(Ozone$V1) # Преобразование целевой переменной в фактор
# Проведение выбора признаков
set.seed(123)
boruta_result <- Boruta(V1 ~ ., data = Ozone, doTrace = 2)
## 1. run of importance source...
## 2. run of importance source...
## 3. run of importance source...
## 4. run of importance source...
## 5. run of importance source...
## 6. run of importance source...
## 7. run of importance source...
## 8. run of importance source...
## 9. run of importance source...
## 10. run of importance source...
## 11. run of importance source...
## After 11 iterations, +0.22 secs:
## confirmed 10 attributes: V11, V12, V13, V2, V4 and 5 more;
## rejected 1 attribute: V3;
## still have 1 attribute left.
## 12. run of importance source...
## 13. run of importance source...
## 14. run of importance source...
## 15. run of importance source...
## 16. run of importance source...
## 17. run of importance source...
## 18. run of importance source...
## 19. run of importance source...
## 20. run of importance source...
## 21. run of importance source...
## 22. run of importance source...
## 23. run of importance source...
## 24. run of importance source...
## 25. run of importance source...
## 26. run of importance source...
## 27. run of importance source...
## 28. run of importance source...
## 29. run of importance source...
## 30. run of importance source...
## 31. run of importance source...
## 32. run of importance source...
## 33. run of importance source...
## 34. run of importance source...
## 35. run of importance source...
## 36. run of importance source...
## 37. run of importance source...
## 38. run of importance source...
## 39. run of importance source...
## 40. run of importance source...
## 41. run of importance source...
## 42. run of importance source...
## 43. run of importance source...
## 44. run of importance source...
## 45. run of importance source...
## 46. run of importance source...
## 47. run of importance source...
## 48. run of importance source...
## 49. run of importance source...
## 50. run of importance source...
## 51. run of importance source...
## 52. run of importance source...
## 53. run of importance source...
## 54. run of importance source...
## 55. run of importance source...
## 56. run of importance source...
## 57. run of importance source...
## 58. run of importance source...
## 59. run of importance source...
## 60. run of importance source...
## 61. run of importance source...
## 62. run of importance source...
## 63. run of importance source...
## 64. run of importance source...
## 65. run of importance source...
## 66. run of importance source...
## 67. run of importance source...
## 68. run of importance source...
## 69. run of importance source...
## 70. run of importance source...
## 71. run of importance source...
## 72. run of importance source...
## 73. run of importance source...
## 74. run of importance source...
## 75. run of importance source...
## 76. run of importance source...
## 77. run of importance source...
## 78. run of importance source...
## 79. run of importance source...
## 80. run of importance source...
## 81. run of importance source...
## 82. run of importance source...
## 83. run of importance source...
## 84. run of importance source...
## 85. run of importance source...
## 86. run of importance source...
## 87. run of importance source...
## 88. run of importance source...
## 89. run of importance source...
## 90. run of importance source...
## 91. run of importance source...
## 92. run of importance source...
## 93. run of importance source...
## 94. run of importance source...
## 95. run of importance source...
## 96. run of importance source...
## 97. run of importance source...
## 98. run of importance source...
## 99. run of importance source...
# Вывод результатов
print(boruta_result)
## Boruta performed 99 iterations in 1.811939 secs.
## 10 attributes confirmed important: V11, V12, V13, V2, V4 and 5 more;
## 1 attributes confirmed unimportant: V3;
## 1 tentative attributes left: V10;
# Результаты выбора признаков
final_result <- attStats(boruta_result)
print(final_result)
## meanImp medianImp minImp maxImp normHits decision
## V2 5.821010 5.760510 2.4218605 8.2687433 0.9797980 Confirmed
## V3 -2.007861 -1.906401 -3.7488538 -0.5040296 0.0000000 Rejected
## V4 13.527867 13.617397 10.6093334 16.1777653 1.0000000 Confirmed
## V5 12.638131 12.588665 9.5659164 15.4017924 1.0000000 Confirmed
## V6 8.907734 8.750138 7.0835291 11.8084425 1.0000000 Confirmed
## V7 13.768534 13.850814 11.6675590 16.4435466 1.0000000 Confirmed
## V8 18.372047 18.389383 14.9959683 20.5675910 1.0000000 Confirmed
## V9 15.467346 15.519464 13.7786194 17.3987793 1.0000000 Confirmed
## V10 2.938999 2.958775 0.4460529 6.1341493 0.4848485 Tentative
## V11 20.195125 20.147894 17.9234128 22.7248519 1.0000000 Confirmed
## V12 7.925655 7.848049 4.7943829 10.5359125 1.0000000 Confirmed
## V13 5.462715 5.387792 3.3746432 8.0815512 0.9797980 Confirmed
Построение графика boxplot
# Выбор значимых признаков
significant_vars <- getSelectedAttributes(boruta_result, withTentative = FALSE)
# Построение boxplot для значимых признаков
par(mfrow=c(2, 2)) # Настройка графиков на одной странице
for (var in significant_vars) {
boxplot(Ozone[[var]] ~ Ozone$V1, main = paste("Boxplot of", var), xlab = "Ozone Levels", ylab = var)
}
Вывод:После выполнения команд мы получим информацию о значимости признаков для набора данных Ozone. Выбор признаков: Метод Boruta помогает определить, какие признаки наиболее важны для предсказания уровня озона. Выбранные признаки могут быть полезны для построения моделей машинного обучения. Графики boxplot: Графики позволят визуализировать распределение значимых признаков относительно уровня озона. Это поможет понять, как признаки влияют на целевую переменную. Таким образом, использование пакета Boruta и визуализация через boxplot являются важными шагами в анализе данных и выбору признаков для последующих моделей.