rpart не создает полное дерево - проблемы с cp?
Я пытаюсь построить полное дерево, установив элемент управления на rpart.control(minsplit=2, minbucket = 1,cp=0)
, но это не работает. Я думаю, что причина может быть в том, что итоговое дерево с 4 разбиениями имеет cp
= 0, но это дерево не заполнено, поэтому его cp
должно быть> 0.
Я также проверил данные, и возможны дополнительные расколы. Вот мой код:
#################
# libraries #####
library(datasets)
library(rpart)
library(rpart.plot)
##################
# preparing data #
titanic_obs=c()
for (cl in c("1st", "2nd", "3rd", "Crew")) {
for (se in c("Male","Female")) {
for (ag in c("Child","Adult")) {
for (sur in c("Yes","No")) {
titanic_obs = rbind(titanic_obs,matrix(rep(c(cl,se,ag,sur),length.out=4*Titanic[cl,se,ag,sur]),ncol=4,byrow=T))
}
}
}
}
colnames(titanic_obs)= c("Class", "Sex", "Age","Survived")
titanic_data = data.frame(titanic_obs)
summary(titanic_data)
#################
# fitting model #
titanic_rpart = rpart(Survived ~ Sex + Age + Class,
data = titanic_data,method="class",
control=rpart.control(minsplit=2, minbucket = 1,cp=0))
#################
# checking ######
summary(titanic_rpart)
prp(titanic_rpart, extra=1, uniform=F, branch=1, yesno=F, border.col=0, xsep="/")
#################
# data ##########
adult_men = titanic_data[titanic_data$Sex=="Male" & titanic_data$Age=="Adult",]
all_am = table(adult_men$Class)
survived_am = table(adult_men[adult_men$Survived=="Yes",]$Class)
survived_am/all_am
2 ответа
Как указано в комментарии к этому вопросу, настройка cp=-1
создаст полное дерево.
Не могу проверить прямо сейчас, но я, кажется, вспоминаю, что установка cp = 0.000001 или такого же небольшого числа решила проблему для меня в какой-то момент. Также обратите внимание, что есть такие параметры, как minsplit и minbucket, которые могут препятствовать росту дерева, поэтому вы можете также установить соответствующие значения для них.