R包“tree”:如何控制最大树深度?

joc*_*hen 5 r classification

R 包“tree”将最大树深度限制为 31。如果该函数tree应用于大型数据集,则很容易达到此限制:

> library("tree")
> library("ElemStatLearn")
> data <- list(image=as.matrix(zip.train[,-1]), digit=as.factor(zip.train[,1]))
> t <- tree(digit~image, data, split="gini")
Error in tree(digit ~ image, data, split = "gini") : 
  maximum depth reached
Calls: source -> withVisible -> eval -> eval -> tree -> .C
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉tree在达到最大树深度时停止生长树,而不是因错误而中止?(换句话说: 的参数是否有等效项maxdepthrpart.control

小智 3

我同意@jochen的建议,这个rpart包看起来比这个tree包更精致。然而,在一些小事情上,该tree软件包似乎做得更好。例如,为对象绘制决策边界tree比为rpart对象绘制决策边界要容易得多(尤其是使用ggplot)。tree关于文森特的问题,我通过使用tree.control(min.cut=)下面代码中的选项在控制树的深度方面取得了一些有限的成功。通过更改终端节点中元素的最小数量,您可以对深度进行有限的控制。

library("ElemStatLearn")
 library("tree")
 data <- list(image=as.matrix(zip.train[,-1]), digit=as.factor(zip.train[,1]))
 t <- tree(digit~image, data, split="gini", control=tree.control(1866496, mincut = 1000))
 library(maptree)
 draw.tree(t)
Run Code Online (Sandbox Code Playgroud)