Я реализовал следующую ссылку для преобразования дерева CHAID в таблицу.Это прекрасно работает, НО хотел бы добавить в таблицу ошибку и количество наблюдений каждого терминального узла CHAID.
преобразование дерева регрессии цепей в таблицу в коде r
скопирован из ссылки:
tree2table <- function(party_tree) {
df_list <- list()
var_names <- attr( party_tree$terms, "term.labels")
var_levels <- lapply( party_tree$data, levels)
walk_the_tree <- function(node, rule_branch = NULL) {
# depth-first walk on partynode structure (recursive function)
# decision rules are extracted for every branch
if(missing(rule_branch)) {
rule_branch <- setNames(data.frame(t(replicate(length(var_names), NA))), var_names)
rule_branch <- cbind(rule_branch, nodeId = NA)
rule_branch <- cbind(rule_branch, predict = NA)
rule_branch <- cbind(rule_branch, err = NA)
rule_branch <- cbind(rule_branch, n = NA)
}
if(is.terminal(node)) {
rule_branch[["nodeId"]] <- node$id
rule_branch[["predict"]] <- predict_party(party_tree, node$id)
rule_branch[["err"]] <- [HOW CAN I STORE ERR HERE?]
rule_branch[["n"]] <- [HOW CAN I STORE N HERE?]
df_list[[as.character(node$id)]] <<- rule_branch
} else {
for(i in 1:length(node)) {
rule_branch1 <- rule_branch
val1 <- decision_rule(node,i)
rule_branch1[[names(val1)[1]]] <- val1
walk_the_tree(node[i], rule_branch1)
}
}
}
decision_rule <- function(node, i) {
# returns split decision rule in data.frame with variable name an values
var_name <- var_names[node$split$varid[[1]]]
values_vec <- var_levels[[var_name]][ node$split$index == i]
values_txt <- paste(values_vec, collapse = ", ")
return( setNames(values_txt, var_name))
}
# compile data frame list
walk_the_tree(party_tree$node)
# merge all dataframes
res_table <- Reduce(rbind, df_list)
return(res_table)
}
В этом коде вы увидите, что я хотел бы получить ошибку от этого конечного узла и сохранить ее в rule_branch.
Мне известно о
nodeapply(as.simpleparty(chaid.tree), ids, info_node)$node_ide$error
но есть ли способ получить ошибку и количество наблюдений в этом месте в коде?