library(caret)
## Warning: пакет 'caret' был собран под R версии 4.5.3
## Загрузка требуемого пакета: ggplot2
## Warning: пакет 'ggplot2' был собран под R версии 4.5.3
## Загрузка требуемого пакета: lattice
models <- names(getModelInfo())
head(models)
## [1] "ada" "AdaBag" "AdaBoost.M1" "adaboost" "amdai"
## [6] "ANFIS"
length(models)
## [1] 239
set.seed(123)
x <- matrix(rnorm(50*5), ncol=5)
y <- factor(rep(c("A", "B"), 25))
featurePlot(x, y, plot = "pairs")
featurePlot(x, y, plot = "density")
featurePlot(x, y, plot = "box")
## Вывод
Признаки сгенерированы случайно, четкого разделения классов
нет.
Графики показывают сильное перекрытие распределений.
Данные плохо подходят для классификации.
library(FSelector)
## Warning: пакет 'FSelector' был собран под R версии 4.5.3
data(iris)
ig <- information.gain(Species ~ ., iris)
gr <- gain.ratio(Species ~ ., iris)
chi <- chi.squared(Species ~ ., iris)
rel <- relief(Species ~ ., iris)
ig
## attr_importance
## Sepal.Length 0.4521286
## Sepal.Width 0.2672750
## Petal.Length 0.9402853
## Petal.Width 0.9554360
gr
## attr_importance
## Sepal.Length 0.4196464
## Sepal.Width 0.2472972
## Petal.Length 0.8584937
## Petal.Width 0.8713692
chi
## attr_importance
## Sepal.Length 0.6288067
## Sepal.Width 0.4922162
## Petal.Length 0.9346311
## Petal.Width 0.9432359
rel
## attr_importance
## Sepal.Length 0.1683333
## Sepal.Width 0.1466667
## Petal.Length 0.3457627
## Petal.Width 0.3491667
Все методы единогласно указывают, что признаки Sepal.Length и Sepal.Width имеют значительно меньшую важность для классификации видов ирисов.
Это соответствует биологическим особенностям: длина и ширина
лепестков являются основными различительными признаками между видами
ирисов.
Лепестки лучше разделяют виды ирисов, чем чашелистики.
library(arules)
## Warning: пакет 'arules' был собран под R версии 4.5.3
## Загрузка требуемого пакета: Matrix
##
## Присоединяю пакет: 'arules'
## Следующие объекты скрыты от 'package:base':
##
## abbreviate, write
data(iris)
interval <- discretize(iris$Sepal.Length, method="interval", breaks=3)
frequency <- discretize(iris$Sepal.Length, method="frequency", breaks=3)
cluster <- discretize(iris$Sepal.Length, method="cluster", breaks=3)
fixed <- discretize(iris$Sepal.Length, method="fixed", breaks=c(4,5,6,8))
table(interval)
## interval
## [4.3,5.5) [5.5,6.7) [6.7,7.9]
## 52 70 28
table(frequency)
## frequency
## [4.3,5.4) [5.4,6.3) [6.3,7.9]
## 46 53 51
table(cluster)
## cluster
## [4.3,5.63) [5.63,6.71) [6.71,7.9]
## 65 65 20
table(fixed)
## fixed
## [4,5) [5,6) [6,8]
## 22 61 67
interval — одинаковая ширина, но разное число объектов, наблюдается неравномерное распределение данных по интервалам
frequency — интервалы имеют разную ширину, но сбалансированы по количеству данных
cluster — группирует по структуре данных
fixed — задаётся вручную, позволяет учитывать предметные знания о данных
library(Boruta)
## Warning: пакет 'Boruta' был собран под R версии 4.5.3
data(airquality)
ozone <- na.omit(airquality)
boruta_result <- Boruta(Ozone ~ ., 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...
## After 9 iterations, +0.31 secs:
## confirmed 4 attributes: Month, Solar.R, Temp, Wind;
## still have 1 attribute left.
## 10. run of importance source...
## 11. run of importance source...
## 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...
## After 52 iterations, +1.7 secs:
## confirmed 1 attribute: Day;
## no more attributes left.
print(boruta_result)
## Boruta performed 52 iterations in 1.695357 secs.
## 5 attributes confirmed important: Day, Month, Solar.R, Temp, Wind;
## No attributes deemed unimportant.
plot(boruta_result)
attStats(boruta_result)
## meanImp medianImp minImp maxImp normHits decision
## Solar.R 11.864789 11.882775 9.2166613 13.835677 1.0000000 Confirmed
## Wind 19.145354 18.995937 17.2974169 21.118555 1.0000000 Confirmed
## Temp 31.071712 30.880879 27.8576303 33.615336 1.0000000 Confirmed
## Month 5.362898 5.356375 2.6327519 7.567484 1.0000000 Confirmed
## Day 2.796913 2.862969 0.4463957 5.435293 0.7115385 Confirmed
Boruta делит признаки на: Confirmed (важные), Rejected (неважные), Tentative (сомнительные).
Метод основан на Random Forest, устойчив к шуму и позволяет надежно отбирать признаки.
Все признаки были признаны важными. Наибольшее влияние оказывают Temp и Wind.