Я хочу иметь возможность вычислить количество предикторов, используемых для прогнозирования. Для регрессионной модели вида 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 извлекают только правила, но не путь, по которому следует каждый случай во время прогнозирования.
Любая помощь приветствуется, ура