我目前正在使用该rpart软件包将回归树拟合到具有相对较少观察值的数据和具有两个可能值的数千个分类预测变量.
从小型数据测试包中我知道在这种情况下,我是否将回归量声明为分类(即因子)或将它们保持原样(它们被编码为+/- 1)并不重要.
然而,我仍然想知道为什么将我的解释变量作为因素传递会显着减慢算法的速度(尤其是因为我将很快获得新数据,其中响应需要3个不同的值,并将它们视为连续不再是一个选项).当然应该反过来了吗?
这是一个模拟我的数据的示例代码:
library(rpart)
x <- as.data.frame(matrix(sample(c(-1, +1), 50 * 3000, replace = T), nrow = 50))
y <- rnorm(50)
x.fac <- as.data.frame(lapply(x, factor))
Run Code Online (Sandbox Code Playgroud)
现在比较:
system.time(rpart( y ~ ., data = x, method = 'anova'))
user system elapsed
1.62 0.21 1.85
system.time(rpart( y ~ ., data = x.fac, method = 'anova'))
user system elapsed
246.87 165.91 412.92
Run Code Online (Sandbox Code Playgroud)
每个变量(因子)只处理一个可能的分裂可能性比处理整个范围的潜在分裂(对于连续变量)更简单,更快,所以我最担心的是rpart行为.任何澄清/建议都会非常谨慎.