尝试在R中为决策树建模会导致问题

时间:2018-10-31 15:56:15

标签: r machine-learning rstudio binary-tree decision-tree

我正在为一个特定的问题而苦苦挣扎。

我想为决策树建模。

我的数据集现在看起来像这样:

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)

我该如何解决这些问题?

谢谢!

0 个答案:

没有答案