r - 插入符号交叉验证中的预处理
问题描述
我有一个关于数据预处理的问题需要澄清。据我了解,当我们通过交叉验证调整超参数和估计模型性能时,而不是预处理整个数据集,我们需要在交叉验证中进行。换句话说,在交叉验证中,我们对训练折叠进行预处理,然后使用相同的预处理参数来处理测试折叠并进行预测。
在下面的示例代码中,当我在 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)
解决方案
你的担心是对的。引入积极偏见的方法有很多。
preProcess
根据插入符号的创建者 Max Kuhn 的说法,在以下情况下没有数据泄漏train
:
所有预处理都应用于数据的重新采样版本(例如 10 倍 CV 中的 90%),然后将这些计算应用于不重新计算的保留(剩余的 10%)。
推荐阅读
- firebase - 我可以将自定义事件从 Cloud Function 记录到 Firebase Analytics 吗?
- microsoft-graph-api - 通过 Microsoft Graph 导航到存储在 Sharepoint 上的工作簿
- apache - VPS Ubuntu server 18.04 // 虚拟主机 // 网站未加载
- java - JMX MBean 和 Azure Application Insights
- python - Python,循环中的 if 语句
- c# - DENSE_RANK() 使用 LINQ,无需中间步骤
- python - 我想知道 OOP 中的类状态是什么意思,尤其是在 Python 中
- delphi - Delphi 10.3 中的文本文件“找不到文件”错误
- rest - 默认端口 8080 上的 REST 服务
- react-native - react-native 中的 fetch 功能不起作用