caret::train传递额外参数rpart

3
我正在使用caret::train函数通过rpart构建决策树。我的目标是将rpart的minsplit参数设置为1,以便稍后使用cp进行修剪。从这里得到的信息是应该将参数传递给train函数中的...参数。但是这样做并不起作用。以下是一个最小可重现示例:
mod1 <- train(Species ~ ., iris, method = "rpart", tuneGrid = expand.grid(cp = 0), minsplit=1)
mod2 <- rpart(Species ~ ., iris, cp=0, minsplit=1)

我理解的是mod1$finalModel和mod2是非常不同的。我希望mod1$finalModel像mod2一样(即完全过拟合)。但是我不能在tuneGrid上传递参数,因为它只接受cp列。所以我的问题是:在caret中是否有办法通过train函数传递minsplit=1参数,然后在cp参数上进行交叉验证?

请查看此链接:https://dev59.com/upnga4cB1Zd3GeqPW1Pr#38633939。处理`rpart`应该类似。 - Chirayu Chamoli
你能试试这个吗:mod1 <- train(Species ~ ., iris, method = "rpart", control = list(cp=0), minsplit=1);identical(mod1$finalModel$splits,mod2$splits) - Silence Dogood
2个回答

6

好的,感谢这篇文章,我找到了如何操作的方法:

mod1 <- train(Species ~ ., iris, method = "rpart", 
             control = rpart.control(minsplit = 1, minbucket = 1))

我仍然不太确定为什么参数必须通过control = rpart.control()传递。直接将minsplit = 1,minbucket = 1参数传递给train函数是无效的。


0

我认为在{caret} train-function中传递参数'minsplit'和'minbucket'需要使用'control = rpart.control()',因为这是在rpart函数本身中正确的方式,其中参数通过{caret} train-function的'...'发送。

最好,G


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接