【问题标题】:caret::groupKFold and validation/testingcaret::groupKFold 和验证/测试
【发布时间】:2019-03-22 23:03:28
【问题描述】:

这是未知领域,所以如果问题不清楚,请告诉我。

我正在尝试用插入符号拟合随机森林。我有一个包含大约 160 个观察值的数据集,其中 60/160 是重复测量,因此我需要确保不使用相同的 id(患者)进行训练和验证。因此,我在训练模型之前使用 groupKFold 创建了 5 个折叠。

我无法理解的是,在训练模型之后,我应该在什么时候使用/选择数据进行实际测试/验证?换句话说,“新数据”在哪里? predict(rf_mod, "??")

folds <- groupKFold(rf_data$id, k = 5)

rf_data <- rf_data %>% select(-id)

fitControl <- trainControl(method = "cv",
                           number = 5,
                           index = folds,
                           search = "random")

rf_mod <- train(cancer ~ ., rf_data,
                method = "rf",
                trControl = fitControl)

【问题讨论】:

    标签: r random-forest r-caret


    【解决方案1】:

    首先,编写可重现的代码是一种很好的做法。我们使用的数据与您不同...

    但是,这个问题相当直截了当。我建议您查看文档?groupKFold。在哪里可以看到:“使用createDataPartition 创建了一系列测试/训练分区”和“groupKFold 根据分组因子拆分数据”。

    在您提供的代码中,您将数据拆分为不同的交叉验证折叠,然后您在训练中使用所有您的数据。通过使用createDataPartition 之前 使用groupKFold,您可以例如通过以下方式保留 70% 的数据:

    set.seed(10)
    train_ind <- createDataPartition(rf_data$cancer, p=0.7, list=FALSE)
    train_dat <- rf_data[train_ind,]
    test_dat <- rf_data[!train_ind,]
    

    【讨论】:

    • 你确定吗?文档表明 OP 使用 index 参数正确执行此操作:topepo.github.io/caret/…
    • 是的,我确定。 OP:s 的目标是有一个数据集来测试训练好的模型,然后你最好在训练后保存一些数据。他们想要保留一些数据,createDataPartition 是一个很好的方法。
    猜你喜欢
    • 2021-02-10
    • 2018-04-03
    • 2020-11-25
    • 2018-04-03
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多