我注意到predict()只会在完整案例中创建预测。我在preProcess选项中包含了medianImpute
,如下所示:
train(outcome ~ .,
data = df,
method = "rf",
tuneLength = 5,
preProcess = c("YeoJohnson", "center", "scale", "medianImpute"),
metric = 'ROC',
trControl = train_ctrl)
}
这是否意味着我应该在训练集之前对缺失值进行估算?如果没有,我无法为测试集中的所有情况创建预测。我曾在Kuhn博士的书中读过,在交叉验证过程中应该进行预处理......谢谢!
答案 0 :(得分:5)
如果您使用的是medianImpute
,那么它肯定需要在训练集之前发生,否则即使您使用medianImpute
对测试集进行估算,结果也会出错。
以下列极端情况为例:
你只有一个自变量X,它由数字1到100组成。想象一下将数据集分成50%测试集和50%训练集的极端情况,数字1到50在测试集和训练集中的数字51到100 。
> median(1:50) #test set median
[1] 25.5
> median(51:100) #training set median
[1] 75.5
使用您的代码(插入符号列车功能),训练集中的缺失值将替换为75.5。这将产生三个主要问题:
(medianImpute)
,因为测试集中的缺失值将替换为25.5 因此,最好的办法是在训练集创建之前考虑缺失数据。
希望这有帮助!