【问题标题】:r caretEnsemble warning: indexes not defined in trControlr caretEnsemble 警告:索引未在 trControl 中定义
【发布时间】:2017-12-22 16:15:55
【问题描述】:

我有一些 r/caret 代码可以将多个交叉验证模型拟合到某些数据,但我收到一条警告消息,提示我无法找到任何相关信息。这是我应该关心的事情吗?

library(datasets)
library(caret)
library(caretEnsemble)

# load data
data("iris")

# establish cross-validation structure
set.seed(32)
trainControl <- trainControl(method="repeatedcv", number=5, repeats=3, savePredictions=TRUE, search="random")

# fit several (cross-validated) models 
algorithmList <- c('lda',         # Linear Discriminant Analysis 
                   'rpart' ,      # Classification and Regression Trees
                   'svmRadial')   # SVM with RBF Kernel

models <- caretList(Species~., data=iris, trControl=trainControl, methodList=algorithmList)

日志输出:

Warning messages:
1: In trControlCheck(x = trControl, y = target) :
  x$savePredictions == TRUE is depreciated. Setting to 'final' instead.
2: In trControlCheck(x = trControl, y = target) :
  indexes not defined in trControl.  Attempting to set them ourselves, so each model in the ensemble will have the same resampling indexes.

...我认为我的 trainControl 对象定义了一个交叉验证结构(3x 5 折交叉验证)将为 cv 拆分生成一组索引。所以我很困惑为什么我会收到这个消息。

【问题讨论】:

    标签: r cross-validation r-caret ensemble-learning


    【解决方案1】:

    trainControl 默认情况下不会为您生成索引,它作为将所有参数传递给您正在训练的每个模型的一种方式。

    当我们搜索有关错误的 github 问题时,我们可以找到 this particular issue

    您需要确保每个模型都完全符合 重采样折叠。 caretEnsemble 通过合并构建集成 将每个交叉验证折叠的测试集放在一起,您将 如果每个折叠都有不同的观察结果,则会得到不正确的结果。

    在拟合模型之前,您需要构建一个 trainControl 对象,并在该对象中手动设置索引。

    例如myControl &lt;- trainControl(index=createFolds(y, 10)).

    我们正在开发一个 caretEnsemble 的接口,用于处理 为您构建重采样策略,然后拟合多个 使用这些重采样的模型,但尚未完成。

    重申一下,检查是有原因的。您需要设置 trainControl 中的 index 参数,并将 EXACT SAME 索引传递给 您希望组合的每个模型。

    这意味着当您指定number = 5repeats = 3 时,模型实际上并没有为每个折叠的样本获得预先确定的索引,而是独立生成自己的索引。

    因此,为了确保模型在哪些样本属于哪些折叠方面彼此一致,您必须在 trainControl 对象中指定 index = createFolds(iris$Species, 5)

    # new trainControl object with index specified
    trainControl <- trainControl(method = "repeatedcv",
                                 number = 5,
                                 index = createFolds(iris$Species, 5),
                                 repeats = 3,
                                 savePredictions = "all",
                                 search = "random")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2020-02-03
      相关资源
      最近更新 更多