R中的决策树错误:fit不是树,只是一个根

时间:2016-05-31 14:37:04

标签: decision-tree

下午好! 我对决策树有问题。

f11<-as.factor(Z24train$f1)
fit_f1 <- rpart(f11~TSU+TSL+TW+TP,data = Z24train,method="class")
plot(fit_f1, uniform=TRUE, main="Classification Tree for Kyphosis")

但是出现了这个错误:

Error in plot.rpart(fit_f1, uniform = TRUE, main = "Classification Tree for Kyphosis") : 
  fit is not a tree, just a root

这是什么问题? 感谢您的帮助:)

1 个答案:

答案 0 :(得分:7)

这可能是由于RPART在使用默认控制参数后无法使用给定数据集创建决策树。

rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01, 
maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10,
surrogatestyle = 0, maxdepth = 30, ...)

如果要创建树,可以调整控制参数并创建一个过拟合树。

tree <- rpart(f11~TSU+TSL+TW+TP,data = Z24train,method="class",control =rpart.control(minsplit =1,minbucket=1, cp=0))

从r文档中获取的参数描述 (https://stat.ethz.ch/R-manual/R-devel/library/rpart/html/rpart.control.html

<强> minsplit
节点中必须存在的最小观察数,以便尝试拆分。

<强> minbucket
任何终端节点中的最小观测数。如果只指定了minbucket或minsplit中的一个,则代码可以根据需要将minsplit设置为minbucket * 3或minbucket设置为minsplit / 3。

<强> CP
复杂性参数。不尝试任何不会降低整体缺乏适应度的分裂。例如,通过anova分裂,这意味着整个R平方必须在每一步增加cp。此参数的主要作用是通过修剪明显不值得的拆分来节省计算时间。从本质上讲,用户通知程序任何不能通过cp改善拟合的分割都可能会被交叉验证修剪掉,因此程序无需追求它