Подтвердить что ты не робот

Как получить различное значение переменной для каждого класса в двоичном h2o GBM в R?

Я пытаюсь изучить использование GBM с h2o для проблемы классификации, чтобы заменить логистическую регрессию (GLM). Нелинейность и взаимодействие в моих данных заставляют меня думать, что GBM более подходит.

Я запустил базовый GBM (см. ниже) и сравнил AUC с AUC логистической регрессии. GBM работает намного лучше.

В классической линейной логистической регрессии можно было бы увидеть направление и влияние каждого из предикторов (x) на переменную результата (y).

Теперь я хотел бы оценить переменную важность оценки GBM таким же образом.

Как получить переменную важность для каждого из (двух) классов?

Я знаю, что переменная важность не совпадает с оценочным коэффициентом в логистической регрессии, но это поможет мне понять, какой предиктор влияет на класс.

Другие задали подобные вопросы, но предоставленные ответы не будут работать для объекта H2O.

Любая помощь очень ценится.

example.gbm <- h2o.gbm(
  x = c("list of predictors"), 
  y = "binary response variable", 
  training_frame = data, 
  max_runtime_secs = 1800, 
  nfolds=5,
  stopping_metric = "AUC")
4b9b3361

Ответ 1

AFAIS, чем более мощный метод машинного обучения, тем сложнее объяснить, что происходит под ним.

Преимущества метода GBM (как вы уже упоминали) также затрудняют понимание модели. Это особенно верно для числовых varialbes, когда модель GBM может использовать диапазоны значений по-разному, а некоторые могут иметь положительные воздействия, тогда как другие имеют отрицательные эффекты.

Для GLM, когда нет указанного взаимодействия, числовая переменная будет монотонной, поэтому вы можете испытать положительное или отрицательное воздействие.

Теперь, когда общее представление затруднено, есть ли какой-либо метод, который мы можем проанализировать модель? Есть два метода, с которыми мы можем начать:

График частичной зависимости

h2o предоставляет h2o.partialplot, который дает частичный (т.е. маргинальный) эффект для каждой переменной, который можно рассматривать как эффект:

library(h2o)
h2o.init()
prostate.path <- system.file("extdata", "prostate.csv", package="h2o")
prostate.hex <- h2o.uploadFile(path = prostate.path, destination_frame = "prostate.hex")
prostate.hex[, "CAPSULE"] <- as.factor(prostate.hex[, "CAPSULE"] )
prostate.hex[, "RACE"] <- as.factor(prostate.hex[,"RACE"] )
prostate.gbm <- h2o.gbm(x = c("AGE","RACE"),
                       y = "CAPSULE",
                       training_frame = prostate.hex,
                       ntrees = 10,
                       max_depth = 5,
                       learn_rate = 0.1)
h2o.partialPlot(object = prostate.gbm, data = prostate.hex, cols = "AGE")

введите описание изображения здесь

Индивидуальный анализатор

LIME package [https://github.com/thomasp85/lime] предоставляет возможность проверять вклад переменных для каждого из наблюдений. К счастью, этот пакет r уже поддерживает h2o.

введите описание изображения здесь

Ответ 2

Вы можете попробовать h2o.varimp(объект).

Спасибо, Саранга