R - Boruta: Не удается обнаружить нерелевантные функции, как выбрать / адаптировать правильный алгоритм? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть набор данных с 15 000 наблюдений и 35 переменных. Некоторые из этих переменных имеют реальные жизненные зависимости (например, если одна поднимется, другая будет затронута). Я хочу предсказать один из них в зависимости от других. Для этого я хотел извлечь наиболее важные из них с помощью выбора функций. Тем не менее, Борута и другие методы (Случайный лес -варимплот) не в состоянии выбрать функции. Он показывает одну переменную как очень важную, а все остальные как важные. Это ошибка, так как некоторые не связанные переменные были введены в набор данных для целей тестирования. Что нужно сделать, чтобы отсеять нерелевантные переменные, когда Boruta не делает это с конфигурацией по умолчанию

Я удалил записи с NA из набора данных и удалил выбросы с расстоянием повара> 4 x среднее значение расстояния повара. Я запустил алгоритм боруты с p-значением 0,01 и 0,001. Я добавил паразитные переменные, такие как: реальные несвязанные переменные, простая тригонометрическая функция и случайная выборка. Первые два считались «важными», тогда как последний считался неуместным.

# Boruta search 
library(Boruta)
boruta_output <- Boruta( ToPredict ~ ., data=na.omit(SampleData), doTrace=2, pValue=0.01)  # perform Boruta search
boruta_signif <- names(boruta_output$finalDecision[boruta_output$finalDecision %in% c("Confirmed", "Tentative")])  # collect Confirmed and Tentative variables

#Random forest search 
library(party)
library(randomForest)
rfModel <- randomForest(ToPredict ~ . , data= SampleData, importance=TRUE, control=RandomForest_unbiased(mtry=2,ntree=50)) # fit the random forest
varImpPlot(cf1Test,sort = TRUE, type=1)

#trigonometric function to test Boruta - was then classified as important.
x <- seq(0, 2*pi, length.out = 13984)
y <- jitter(sin(x) + cos(x + x), amount = 0.2)

Я ожидал четкого разделения важности хотя бы некоторых переменных, а несвязанные переменные были бы классифицированы как «не важные». Но только одна из известных критических переменных оказалась очень важной, а несвязанные переменные были классифицированы как важные, даже простая тригонометрическая функция.

Не смог ли я рассмотреть что-то, что сделало бы модель Борута / случайный лес непригодной для этой задачи?

Любая помощь будет принята с благодарностью,

Прекрасного дня,

...