我正在使用 R 中的 rpart 包从名为“myData”的数据框中创建决策树模型。它有 85,590 行。
决策树是使用这样的代码创建的(关键部分是'data = myData'):
decTree <- rpart(结果 ~ var1 + var2 + ..., data = myData, method = "anova", control = rpart.control(minsplit=30))
如果我绘制并标记此决策树的“叶”(终端)节点,我会在第一个节点的“左侧”得到 66,667 的初始分割,在右侧得到 18,923 的初始分割(总计行数为 85,590 ,正如预期的那样。)
plot(decTree) # 绘制树
text(decTree, use.n = TRUE) #标记树
创建此初始拆分的规则是 var1 < 1.5。
但是,如果我计算 myData 中 var1 < 1.5 的行数,我得到 79,518,而不是预期的 85,590(如果我计算 var1 >= 1.5 的行,我得到 6,072 的“补码”,而不是预计树中显示 18,923。)
长度(其中(myData$var1 < 1.5))
[1] 79518
我意识到你不可能自己重现这种行为(以前的 rpart 模型在节点数方面对我来说是正确的,所以不知道为什么我这次遇到了麻烦),但我希望有人以前遇到过这个问题,或者在我的代码中发现一些愚蠢的错误......
我尝试再次重新运行它,但仍然得到所有相同(不匹配)的叶子计数。
另外,我检查了 myData$frame,肯定不仅仅是“n = ...”标签是错误的;$frame 值与图中显示的值匹配(并且与我自己所做的计数不匹配。)
decTree$帧
最后,'var1' 值都不是 NA。IE:
长度(其中(is.na(myData$var1)))
[1] 0