我想知道rpart
如何处理分类变量。有几篇参考文献表明,对于无序因素,它会查看所有组合。实际上,即使是6.2节末尾的vignette也说明了
(F)或具有m个级别的分类预测器,所有2 ^ m-1可能不同 分裂进行了测试。
但是,鉴于我对代码的经验,我觉得很难相信。小插图显示了运行
的支持证据rpart(Reliability ~ ., data=car90)
需要很长很长时间。但是,在我的情况下,它会在几秒钟内运行。尽管有一个30级的无序因子变量。 为了进一步证明这个问题,我已经创建了52个级别的几个变量,这意味着如果探索了所有可能性,则需要检查2 ^ 51 - 1~2.2 10 ^ 15个分裂。这段代码在大约一分钟后运行,恕我直言,证明所有组合都没有被检查。
NROW = 50000
NVAR = 20
rand_letters = data.frame(replicate(NVAR, as.factor(c(
letters[sample.int(26, floor(NROW/2), replace = TRUE)],
LETTERS[sample.int(26, ceiling(NROW/2), replace = TRUE)]))))
rand_letters$target = rbinom(n = NROW, size = 1, prob = 0.1)
system.time({
tree_letter = rpart(target ~., data = rand_letters, cp = 0.0003)
})
tree_letter
在rpart
?