与我的数据集一样,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
答案 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)