【问题标题】:How to tune multiple parameters using Caret package?如何使用 Caret 包调整多个参数?
【发布时间】:2016-04-22 20:32:13
【问题描述】:

我正在构建一个 CART 模型,我正在尝试调整 rpart 的 2 个参数 - CP 和 Maxdepth。虽然 Caret 包一次只能处理一个参数,但同时使用这两个参数时,它会不断抛出错误,我无法弄清楚原因

library(caret)
data(iris)
tc <- trainControl("cv",10)
rpart.grid <- expand.grid(cp=seq(0,0.1,0.01), minsplit=c(10,20)) 
train(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=iris, method="rpart", 
      trControl=tc,  tuneGrid=rpart.grid)

我收到以下错误:

Error in train.default(x, y, weights = w, ...) : 
  The tuning parameter grid should have columns cp

【问题讨论】:

    标签: r performance r-caret


    【解决方案1】:

    caret 无法使用集成方法做到这一点,因此您必须添加自己的方法。

    或者,您可以在mlr 上尝试这个类似的机器学习框架,它允许许多开箱即用的重采样策略、调整控制方法和算法参数调整。有很多learners already implemented,还有几个不同的evaluation metrics to choose from

    在你的具体问题中,试试这个例子:

    library(mlr)
    iris.task = classif.task = makeClassifTask(id = "iris-example", data = iris, target = "Species")
    resamp = makeResampleDesc("CV", iters = 10L)
    
    lrn = makeLearner("classif.rpart")
    
    control.grid = makeTuneControlGrid() 
    #you can pass resolution = N if you want the algorithm to 
    #select N tune params given upper and lower bounds to a NumericParam
    #instead of a discrete one
    ps = makeParamSet(
      makeDiscreteParam("cp", values = seq(0,0.1,0.01)),
      makeDiscreteParam("minsplit", values = c(10,20))
    )
    
    #you can also check all the tunable params
    getParamSet(lrn)
    
    #and the actual tuning, with accuracy as evaluation metric
    res = tuneParams(lrn, task = iris.task, resampling = resamp, control = control.grid, par.set = ps, measures = list(acc,timetrain))
    opt.grid = as.data.frame(res$opt.path)
    print(opt.grid)
    

    mlr 用途广泛:包装方法允许将学习器与调整策略、预处理、过滤和插补步骤等融合在一起。

    【讨论】:

    • 我在 mlr 的第一步,也许学习者 lrn 应该在 tuneParams 函数中使用。
    • @EnriquePérezHerrero 你完全正确,感谢提醒!
    【解决方案2】:

    方法“rpart”只能调整cp,方法“rpart2”用于maxdepth。没有调整 minsplit 或任何其他 rpart 控件。如果您想调整不同的选项,您可以编写一个自定义模型来考虑这一点。

    单击here 了解有关如何执行此操作的更多信息。另请阅读this answer,了解如何在 train 函数中使用 rpart 控件。

    【讨论】:

      猜你喜欢
      • 2016-12-02
      • 1970-01-01
      • 2015-11-22
      • 2020-09-20
      • 2015-10-28
      • 2018-07-05
      • 2018-05-29
      • 2018-03-29
      • 2018-12-23
      相关资源
      最近更新 更多