R - Использование xgboost в качестве выбора функции, а также выбора взаимодействия - PullRequest
0 голосов
/ 01 мая 2019

Допустим, у меня есть набор данных с большим количеством переменных (больше, чем в воспроизводимом примере ниже), и я хочу построить простую и интерпретируемую модель, GLM.

Сначала я могу использовать модель xgboost и посмотреть на важность переменных (которая зависит от частоты и усиления каждой переменной в последовательных деревьях решений), чтобы выбрать 10 наиболее влиятельных переменных:

Вопрос : есть ли способ выделить наиболее значимые 2d-взаимодействия?

library(dplyr)
library(xgboost)

# data
data(mtcars)
dtrain <- xgb.DMatrix(
  data  = mtcars %>% select(-am) %>% as.matrix(), 
  label = mtcars$am
)

# xgboost parameters
xgb_params <- list(
  objective = "binary:logistic",
  eta       = 0.1,
  max_depth = 2
)

# xgboost fit
xgb_mod <- xgb.train(
  data     = dtrain, 
  params   = xgb_params,   
  nrounds  = 10,
  eval     = "auc",
  maximize = TRUE   
)

# feature importance
xgb.importance(dimnames(dtrain)[[2]], model = xgb_mod)
#    Feature       Gain      Cover  Frequency
# 1:      wt 0.53965838 0.46589322 0.47619048
# 2:    gear 0.41691383 0.37360220 0.28571429
# 3:    qsec 0.03215627 0.11810252 0.19047619
# 4:      hp 0.01127152 0.04240205 0.04761905

Вопрос : есть ли способ выделить наиболее значимое взаимодействие в соответствии с моделью xgboost?

В зависимости от важности функции, я могу построить GLM с 4 переменными (wt, gear, qsec, hp), но я хотел бы знать, есть ли какое-либо 2d-взаимодействие (например, * 1022) *) должен быть интерес к простой модели.

...