我正在为一个特定的问题而苦苦挣扎。
我想为决策树建模。
我的数据集现在看起来像这样:
str(bWeightSantiago) 'data.frame':
160487 obs. of 13 variables:
$ BW: int 4175 2242 2487 3214 3412 5421 4152 1745 5247 3529 ...
$ married : logi TRUE FALSE TRUE TRUE TRUE TRUE ...
$ age : int 24 30 37 22 23 43 28 30 19 22 ...
$ black : logi TRUE FALSE FALSE TRUE TRUE FALSE ...
$ highschool : logi TRUE TRUE FALSE FALSE FALSE TRUE...
$ college: logi FALSE FALSE FALSE FALSE FALSE TRUE ...
$ hasChildren : logi FALSE FALSE FALSE TRUE FALSE FALSE ...
$ drugs: logi FALSE FALSE TRUE FALSE FALSE FALSE ...
$ weightgain : int 14 45 29 50 13 48 20 24 14 39 ...
$ alone: logi FALSE FALSE FALSE FALSE TRUE FALSE ...
$ livesinownhouse : logi TRUE FALSE TRUE TRUE TRUE TRUE ...
$ cig : int 5 25 0 5 0 0 0 10 0 0 ...
$ boy : logi FALSE FALSE TRUE FALSE TRUE FALSE ...
我尝试在 R 中为分类和回归树建模。响应变量为“ BW”(体重)。如果要对分类树建模,可以通过以下方式将BW变量更改为二进制变量:
bWeightSantiago_class <- dplyr::mutate(bWeightSantiago, BW= as.factor(ifelse(BW < 2500, 1, 0)))
表明,所有低于2500g的新生儿体重都是1。数据包括死胎。此变异的响应变量保存在“ bWeightSantiago_class”下
我尝试了2种型号。一次是带有rpart
软件包的模型,一次是带有partykit
软件包的模型。
rpart
如果我尝试使用以下功能拟合分类树
fit1 <- rpart(BW~., data=bWeightSantiago_class, method="class")
我明白了,
fit不是一棵树,只是一棵根
如果我尝试使用相同的函数拟合回归树(现在的数据集为bWeightSantiago)
fit2 <- rpart(BW~., data=bWeightSantiago, method="anova")
我得到一棵修剪好的树,有5片叶子。
partykit
另一方面:如果我想使用ctree()
函数为回归树或分类树建模:
fit3 <- ctree(BW~., data = bWeightSantiago)
#回归树
fit4 <- ctree(BW~., data = bWeightSantiago_class)
#分类树
我得到了大树(过度拟合)。尝试绘制它们会显示几乎黑屏,因为它们没有被修剪。如果我尝试通过功能prune()
修剪它们,则会收到错误消息:
prune(fit4, "AIC")
UseMethod(“ prune”)中的错误: 没有适用于“修剪”的适用方法应用于类的对象 “ c('BinaryTree','BinaryTreePartition')”
但是它说在R的数据环境中,我拟合的模型是大BinaryTree(210.3 Mb)
我该如何解决这些问题?
谢谢!