通过caret调用rpart时因子预测变量被转换为数值的原因是什么
caret调用rpart与直接调用rpart的规则显示差异原因
这个差异由caret的默认数据预处理逻辑导致:
caret::train()函数默认会对输入的因子类自变量执行*哑变量(独热编码)*转换:示例中的因子变量x只有A、B两个水平,转换后会生成名为xB的数值型变量,取值为1对应原x为B、取值为0对应原x为A。后续rpart基于转换后的数值变量训练,拆分规则自然显示为xB>=0.5、xB<0.5的形式。- 直接调用
rpart::rpart()时,rpart原生支持因子类型的自变量做节点拆分,不会自动执行哑变量转换,因此会直接基于原始因子的水平生成x=B、x=A的规则。
如果需要caret调用rpart时也保留因子格式的拆分规则,可以关闭caret的自动哑变量转换逻辑,示例如下:
dummyModel <- caret::train(y ~ x, data = dummy, method = "rpart", metric = "ROC", trControl = dummyTc, tuneLength = 5, preProcess = NULL, xlev = list(x = levels(dummy$x)) )
内容的提问来源于stack exchange,提问作者nsa
相关产品推荐
相关产品推荐

