rpart的结果只有1个根

时间:2014-01-08 10:34:26

标签: r rpart

与我的数据集一样,Leakage有两个值1,0。只有大约300行1和569378行中的额外行1。这就是我在rpart结果中得到1个根的原因。

我该如何解决这个问题?

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 个答案:

答案 0 :(得分:22)

如果自变量没有提供足够的信息来增长树,那么可能没有办法“解决”这个问题。例如,请参阅rpart.control的帮助:“不会尝试任何不会降低整体缺乏拟合度的分割。”您可以尝试放松控制参数,但是无法保证树会超出根目录。

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

答案 1 :(得分:7)

我不确定我是否理解你的行长问题,但这就是错误通常意味着什么:

rpart使用约束来构建决策树。这是默认值,来自the docs

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种可能的方法来分割它。它可能比这更复杂,但这是一个很好的起点。

我实际上是在看这个确切的问题(按小时购物),我不得不将我的约束放在尽可能低的水平,以便得到一棵树:

  

rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=1, minbucket=1, cp=0.001))

答案 2 :(得分:1)

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

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