Как мне построить дерево решений с множественным разделением (без двоичного разделения), запущенное из функции RWeka J48 ()? - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь построить многораздельное дерево с опцией функции J48 ():

mytree = J48(class ~ ., data=train.set, na.action = NULL, control= Weka_control(U=TRUE, B=FALSE))

и вроде нормально работает. Но я не могу построить дерево решений ни по одному из следующих кодов:

if(require("partykit", quietly = TRUE)) plot(mytree)

с помощью инструмента plot в пакете partykit. В руководстве говорится, что оно только строит дерево бинарного разбиения. Или код:

prp(mytree)

с помощью функции plot в пакете rpart.plot. Потому что R показывает предупреждение

Error in prp(mytree) : Not an rpart object

Может кто-нибудь сказать мне, как построить это дерево?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

После повторного запуска процесса код

 prp(mytree)

не работает с предупреждающим сообщением

 Error in prp(mytree) : Not an rpart object

Однако следующий код работает

 plot(as.party.Weka_tree(mytree))

со ссылкой Как построить дерево CostSensitiveClassifier в R?

Кто-нибудь знает причину?

0 голосов
/ 27 августа 2018

Данные, которые я использую, являются данными о заболеваниях сердца из хранилища UCI, и это выглядит так > head(Hungarian) age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal num 1 28 1 2 130 132 0 2 185 0 0 <NA> NA <NA> 0 2 29 1 2 120 243 0 0 160 0 0 <NA> NA <NA> 0 3 29 1 2 140 NA 0 0 170 0 0 <NA> NA <NA> 0 4 30 0 1 170 237 0 1 170 0 0 <NA> NA 6 0 5 31 0 2 100 219 0 1 150 0 0 <NA> NA <NA> 0 6 32 0 2 105 198 0 0 165 0 0 <NA> NA <NA> 0 Переменная класса - это переменная num (0 или 1). И результат набора dput(mytree) есть

structure(list(classifier = new("jobjRef", jobj = <pointer: 0x0de0e848>, 
jclass = "java/lang/Object"), predictions = structure(c(1L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 
1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 
2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L), .Label = c("0", 
"1"), class = "factor"), call = J48(formula = num ~ ., data = train.set, 
    na.action = NULL, control = Weka_control(U = TRUE, B = FALSE)), 
    handlers = list(data = function (mf) 
    {
        terms <- attr(mf, "terms")
        if (any(attr(terms, "order") > 1L)) 
            stop("Interactions are not allowed.")
        factors <- attr(terms, "factors")
        varnms <- rownames(factors)[c(TRUE, rowSums(factors)[-1L] > 
            0)]
        mf[, sub("^`(.*)`$", "\\1", varnms), drop = FALSE]
    }), levels = c("0", "1"), terms = num ~ age + sex + cp + 
        trestbps + chol + fbs + restecg + thalach + exang + oldpeak + 
        slope + ca + thal), class = c("J48", "Weka_tree", "Weka_classifier"
))

Большое спасибо.

...