【问题标题】:caret::train pass extra parameters rpartcaret::train 传递额外参数 rpart
【发布时间】:2017-06-01 12:21:50
【问题描述】:

我正在通过 caret::train 函数使用 rpart 构建决策树。我要做的是将rpart的minsplit参数设置为1,以便之后用cp修剪它。我从here 得到的是参数应该在 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 列。

所以我的问题是:插入符号中是否有在 train 函数中传递参数 minsplit=1 然后交叉验证 cp 参数?

【问题讨论】:

  • 查看this。处理rpart 应该是类似的。
  • 你能试试这个吗:mod1 &lt;- train(Species ~ ., iris, method = "rpart", control = list(cp=0), minsplit=1);identical(mod1$finalModel$splits,mod2$splits)

标签: r r-caret cp rpart


【解决方案1】:

好的,谢谢to this post 我知道怎么做了:

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

我仍然不太清楚为什么必须通过 control = rpart.control() 传递参数。仅将参数 minsplit = 1, minbucket = 1 直接传递给 train 函数根本行不通。

【讨论】:

    【解决方案2】:

    我认为 'control = rpart.control()' 对于在 {caret} 训练函数中传递参数 'minsplit' 和 'minbucket' 是必要的,因为这将是 rpart 函数本身的正确方法,其中参数是通过 {caret} 训练函数的“...”发送的。 最好的,G

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 2018-03-11
      • 2013-11-06
      • 2012-05-16
      • 2018-01-15
      • 2012-06-01
      • 1970-01-01
      • 2014-05-23
      • 2017-12-18
      相关资源
      最近更新 更多