r-具有partykit决策树的间隔数无效



我试图在我的数据上复制这里提出的过程,但我得到了以下错误:

Error in interval.numeric(x, breaks = c(xmin - tol, ux, xmax)) : 
invalid number of intervals

target是我想要预测的分类变量,而我会强制根据split.variable对分类树进行第一次拆分(也是分类)。由于对象的特性,实际上,如果split.variable是1,则目标只能是1,而如果是0,则target可以是或0或1。起初,我将它们视为因子,但我将它们改为数字,然后四舍五入(如SO中其他帖子所建议的那样)。不幸的是,这些解决方案都没有帮助。我玩了一些数据,对列和行进行了子采样,但仍然不起作用。我错过了什么?

这里有一个MRE来复制错误:

library(partykit)
tdf = structure(list(target = c(0, 0, 0, 1, 0, 0, 1, 1, 1, 1), split.variable = c(0, 
0, 0, 0, 1, 0, 0, 0, 0, 0), var1 = c(2.021, 1.882, 1.633, 3.917, 
2.134, 1.496, 1.048, 1.552, 1.65, 3.112), var2 = c(97.979, 98.118, 
98.367, 96.083, 97.866, 98.504, 98.952, 98.448, 98.35, 96.888
), var3 = c(1, 1, 1, 0.98, 1, 1, 1, 1, 1, 1), var4 = c(1, 1, 
1, 0.98, 1, 1, 1, 1, 1, 1), var5 = c(18.028, 25.207, 20.788, 
28.548, 18.854, 19.984, 27.352, 24.622, 25.037, 24.067), var6 = c(0.213, 
0.244, 0.289, 0.26, 0.887, 0.575, 0.097, 0.054, 0.104, 0.096), 
var7 = c(63.22, 59.845, 62.45, 63.48, 52.143, 51.256, 56.296, 
57.494, 59.543, 68.434), var8 = c(0.748, 0.795, 0.807, 0.793, 
0.901, 0.909, 0.611, 0.61, 0.618, 0.589)), row.names = c(6L, 
7L, 8L, 9L, 11L, 12L, 15L, 16L, 17L, 18L), class = "data.frame")
tr1 <- ctree(target ~ split.variable,     data = tdf, maxdepth = 1)
tr2 <- ctree(target ~ split.variable + ., data = tdf, subset = predict(tr1, type = "node") == 2)

您的数据集太小,无法执行您想要的操作:

  • 只有10个观测值,tr1不会导致任何分裂,而是生成一个具有单个根节点的树
  • 因此,predict(tr1, type = "node")产生10倍于1的矢量
  • 因此,具有predict(tr1, type = "node") == 2subset是空的(全部FALSE)
  • 这会导致一条(诚然是神秘的)错误消息,反映出您无法从空数据集中学习树

此外:我不确定你在哪里找到了使用分类变量的数字编码的建议。但对于partykit,将分类变量适当地编码为factor变量几乎总是更好的。

最新更新