2015-02-27 7 views
0

Имея проблему, похожую на this, я пытаюсь заставить rpart сделать ровно один раскол. Вот это игрушка пример, который воспроизводит мою проблему:Как заставить rpart делать ровно 1 Сплит

require(rpart) 

y <- factor(c(1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)) 
x1 <- c(12,18,15,10,10,10,20,6,7,34,7,11,10,22,4,19,10,8,13,6,7,47,6,15,7,7,21,7,8,10,15) 
x2 <- c(318,356,341,189,308,236,290,635,550,287,261,472,282,262,1153,435,402,182,415,544,251,281,378,498,142,566,152,560,284,213,326) 

data <- data.frame(y=y,x1=x1,x2=x2) 
tree <-rpart(y~., 
       data=data, 
       control=rpart.control(maxdepth=1, # at most 1 split 
            cp=0, # any positive improvement will do 
            minsplit=1, 
            minbucket=1, # even leaves with 1 point are accepted 
            xval=0)) # I don't need crossvalidation 
length(tree$frame$var) #==1, so there are no splits 

изолировав одну точку должно быть возможным (minbucket = 1), и даже наиболее незначительное улучшение (изолируя один пункт всегда уменьшает скорость ошибочной классификации) должно привести к расколу (cp = 0).

Почему результат не включает никаких расколов? И как мне изменить код, чтобы получить ровно один раскол? Может быть, разделение не сохраняется, если обе классифицируются на один и тот же факторный результат?

+0

Воспроизводимый пример был бы полезен. – ARobertson

+0

@ ARobertson Хорошо, здесь вы идете. Надеюсь, вы сможете воспроизвести проблему. – user1965813

+0

Вместо этого я рекомендую использовать 'ctree' из пакета' party'. Он либо запускает тесты значимости на каждый раскол (что помогает предотвратить переобучение), так и переменную 'stump' в' ctree_control', которая отвечает вашим точным потребностям. –

ответ

2

Измените cp = 0 на cp = -1.

По-видимому, cp для первого сплита (maxdepth = 3) составляет 0,0000000. Таким образом, отрицательный результат позволяет отображать с maxdepth = 1.

+0

Я никогда не считал отрицательные значения и думал, что cp = 0 должен принимать улучшения 0. Спасибо большое! – user1965813