rpart的结果只有1个根节点。

19

在我的数据集中,泄漏有两个值1和0。只有大约300行的值为1,而569378行的值为0。这就是我在rpart结果中只得到一个根节点的原因。

我该如何解决这个问题?

fm.pipe<-Leakage~PipeAge +PipePressure

> printcp(CART.fit)

Regression tree:
rpart(formula = fm.pipe, data = Data)

Variables actually used in tree construction:
character(0)

Root node error: 299.84/569378 = 0.00052661

n= 569378 

         CP nsplit rel error xerror xstd
1 0.0033246      0         1      0    0
3个回答

29

如果自变量不提供足够的信息来生长决策树,那么可能没有一种“解决”方法。例如,请参阅rpart.control的帮助:任何未能使整体拟合度减小cp倍数的分割都不会尝试。您可以尝试放宽控制参数,但不能保证这将导致决策树超出根节点。

CART.fit <- rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=2, minbucket=1, cp=0.001))

8
我不确定我是否理解您的行长度问题,但这通常意味着以下内容:
rpart使用约束条件构建决策树。以下是默认值,来自文档
rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01, 
      maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10,
      surrogatestyle = 0, maxdepth = 30, ...)

你需要减少这些限制。正如@JeanVAdams所说,从最基本的开始:
rpart(formula=fm.pipe, data=Data, 
      control=rpart.control(minsplit=1, minbucket=1, cp=0.001))

你的第一个结果可能会有太多节点,所以你需要逐渐建立这些限制条件,直到得到一个合适大小的树。
如果你还是不明白,这里有一个例子:
假设你正在查看杂货店的数据,并且想要看到最受欢迎的购物时间的树形图。只有24小时,对吧?因此,独立变量只有24种可能性。Rpart有一个条件,说
“节点中必须至少有20个东西才能分裂。”
这意味着你的节点甚至无法分裂一次。即使你有150亿行,也只有24种可能的分裂方式。它可能比这更复杂,但这是一个很好的起点。
实际上,我正在研究这个确切的问题(按小时的购物者),我不得不将我的约束保持在最低可能的水平,以便获得任何树形图:

1

我的数据集仅包含14行。尝试使用以下代码:

dtm<-rpart(playtennis~., weathe_train, method="class", minsplit=2, minbucket=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接