Несоответствующий вес, используемый для прогноза в ctree в случае отсутствия данных - PullRequest
0 голосов
/ 01 февраля 2020

Я вручную вычисляю прогнозы для дерева решений на основе правил, извлеченных алгоритмом. Затем я хотел сравнить свои прогнозы с прогнозами, сделанными с помощью partykit, и обнаружил различия. Копаясь внутри и проводя (много) экспериментов, я обнаружил, что несоответствия как-то связаны с использованием весов в случае пропусков в наборе данных.

Проверьте этот пример, сделанный с набором данных iris:

    DF <- iris

    for(i in 1:4) DF[sample(1:nrow(iris), 30, replace = T) %>% unique, i] <- NA #create missings at random


    ## weights for bootstrap simulation
    ids <- sample(1:nrow(DF), replace = T)
    w <- factor(ids, levels = 1:nrow(DF)) %>% table %>% as.vector()

    tree <- ctree(factor(Species == 'versicolor') ~ ., weights = w, data = DF, majority = T)

    mod <- list(
        DF = DF,
        mod = tree,
        ids = ids,
        w = w
    )

    r <- partykit:::.list.rules.party(tree, i = 2)
    print(r)

    # First set of results
    mod$DF %>% mutate(w = mod$w) %>% filter(eval(parse(text = r))) %>% with(sum(w)) %>% print
    data_party(mod$mod, id = 1) %>% filter(eval(parse(text = r))) %>% with(sum(`(weights)`)) %>% print
    enter code here
    # Second set of results
    data_party(mod$mod, id = 2) %>% with(sum(`(weights)`)) %>% print
    predict_party(mod$mod, id = 2, FUN = function(y, w) sum(w)) %>% print

Последние 4 строки дают одинаковые результаты, если в данных нет NA. Если есть NA, иногда (не могу понять, почему не всегда), вы получите два разных набора результатов, в зависимости от того, используете ли вы подмножество данных, используя правила явно или с помощью предсказанного узла.

Проблема является то, что ctree, как предполагается, предсказывает узел, даже если переменная, включенная в правило, отсутствует, суррогатами. Вы можете проверить это здесь.

DF %>% mutate(rule = eval(parse(text = r)), pred = predict(tree, type = 'node')) %>% filter(rule == T | pred == 2) %>% View

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

...