Ручная обрезка дерева решений

Я сгенерировал простое дерево, используя функцию rpart(), однако я хотел бы иметь возможность остановить второе разделение на Petal.Length < 4.9 до того, как оно разделится на Petal.Width, однако я не хотел бы ничего менять в дереве. Единственное, что я обнаружил, это то, что я могу использовать функцию подмножества, чтобы вручную вырастить дерево, но этот процесс может быть очень утомительным. Любые предложения по функции, которая может быть использована? Код, используемый для создания дерева:

library(rpart)

library(datasets)

data("iris")

library(rpart.plot)


Sample <-sample.int(n = nrow(iris), size = floor(.7*nrow(iris)), replace = F)

train <- iris[Sample, ]

test <- iris[-Sample, ]

m1 <- rpart(Species~Sepal.Width + Sepal.Length + Petal.Length + Petal.Width, 
            data = train, control = rpart.control(cp = 0.005), method = "anova")

rpart.plot(m1, type = 3, fallen.leaves = TRUE)

Дерево решений


person user1234    schedule 20.01.2019    source источник
comment
Вы также должны научиться создавать воспроизводимые примеры с set.seed(). Когда я запускаю ваш код, я даже не получаю разделения на Petal.Width.   -  person IRTFM    schedule 20.01.2019
comment
Спасибо, я добавил это. Это разделение было просто примером, в идеале я хотел бы иметь возможность применить эту логику к гораздо большему дереву.   -  person user1234    schedule 20.01.2019


Ответы (1)


Один из подходов заключается в использовании аргумента snip функции rpart.plot:

trimmed.tree <- rpart.plot(m1, snip=TRUE))$obj   # manually trim the tree
rpart.plot(trimmed.tree)                         # display the trimmed tree

Это помещает дерево на экран, которое вы можете вручную обрезать с помощью мыши. Для получения дополнительной информации см. главу 9 «Обрезка дерева с помощью мыши» виньетки пакета rpart.plot http://www.milbo.org/doc/prp.pdf.

person Stephen Milborrow    schedule 09.03.2019