【问题标题】:preprocess within cross-validation in caret插入符号交叉验证中的预处理
【发布时间】:2018-10-22 01:01:36
【问题描述】:

我有一个关于数据预处理的问题需要澄清。据我了解,当我们通过交叉验证调整超参数并估计模型性能时,而不是预处理整个数据集,我们需要在交叉验证中进行。换句话说,在交叉验证中,我们对训练折叠进行预处理,然后使用相同的预处理参数来处理测试折叠并进行预测。

在下面的示例代码中,当我在 caret::train 中指定 preProcess 时,它会自动执行此操作吗?如果有人能澄清我的话,真的很感激。

从一些在线资源中,有些人对整个数据集(训练集)进行预处理,然后使用预处理数据通过交叉验证来调整超参数,这似乎不对....

library(caret)
library(mlbench)
data(PimaIndiansDiabetes)

control <- trainControl(method="cv", 
                        number=5,
                        preProcOptions = list(pcaComp=4))
grid=expand.grid(mtry=c(1,2,3))

model <- train(diabetes~., data=PimaIndiansDiabetes, method="rf", 
               preProcess=c("scale", "center", "pca"), 
               trControl=control,
               tuneGrid=grid)

【问题讨论】:

    标签: r r-caret


    【解决方案1】:

    您的担心是对的。引入积极偏见的方法有很多。

    根据插入符号的创建者 Max Kuhn 的说法,当在 train 中指定 preProcess 时,没有数据泄漏:

    所有预处理都应用于数据的重新采样版本 (例如 10 倍 CV 中的 90%),然后将这些计算应用于 没有重新计算的保留(剩余的 10%)。

    来源:https://github.com/topepo/caret/issues/335

    【讨论】:

    • 在使用带有插入符号的食谱时也是如此吗?
    • 很抱歉挖了这个@missuse。想象一下,您想使用来自 cv 的模型预测新数据。我是否正确假设 predict(model, newdata=df2) 会自动预处理新提供的数据?
    • @Björn B 是的,它会在进行预测之前对新数据进行预处理。
    猜你喜欢
    • 2016-12-07
    • 2015-04-02
    • 2023-04-04
    • 2015-11-11
    • 1970-01-01
    • 2015-09-17
    • 2019-03-11
    • 2013-12-26
    相关资源
    最近更新 更多