Вычислить количество предикторов, используемых для прогноза - PullRequest
0 голосов
/ 15 октября 2019

Я хочу иметь возможность вычислить количество предикторов, используемых для прогнозирования. Для регрессионной модели вида y = a + bx1 + cx2 количество предикторов, используемых для прогнозирования, равно 2. Для дерева решений это количество тестов, необходимое для перехода к конечному узлу,это варьируется для разных случаев. Такая мера называется MCU в этой статье в разделе 2.4.2.

Я знаю, как вычислить эту меру для деревьев, полученных с помощью rpart или partikit::ctree, используя этот фрагмент кода (измененный с этот ответ ).

measure_simplicity <- function(tree, colnames) {
  if (!inherits(tree, "party") & !"BinaryTree" %in% class(tree)) tree <- partykit::as.party(tree)
  rls <- partykit:::.list.rules.party(tree)
  rule <- rls[as.character(predict(tree, type = "node"))]
  pu <- stringi::stri_count_regex(rule, paste0("(", paste(colnames, collapse = "|"), ")"))
  mpu <- mean(pu)
  return(mpu)
}
data(iris)
require(rpart)
tree <- rpart(Species ~ ., data = iris)
measure_simplicity(tree, colnames(iris))

У меня есть 2 уровня сложности для реализации такого показателя производительности для каждой модели:

  • для party::ctree он не работает, поскольку выходной класс не соответствует ожидаемому ни .list.rules.party, ниas.party.
  • для случайных лесов и, в более общем смысле, для создания мешков, как я могу пройтись по всем построенным деревьям. Я видел в этом посте , но reprtree:::as.tree, похоже, не работает (эта строка classes <- attributes(rforest$terms)$dataClasses, похоже, является проблемой), а правила get извлекают только правила, но не путь, по которому следует каждый случай во время прогнозирования.

Любая помощь приветствуется, ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...