我注意到predict()只会在完整案例中创建预测.我已经包含medianImpute在preProcess选项中,例如:
train(outcome ~ .,
data = df,
method = "rf",
tuneLength = 5,
preProcess = c("YeoJohnson", "center", "scale", "medianImpute"),
metric = 'ROC',
trControl = train_ctrl)
}
Run Code Online (Sandbox Code Playgroud)
这是否意味着我应该在训练集之前对缺失的值进行估算?如果没有,我无法为测试集中的所有情况创建预测.我曾在Kuhn博士的书中读过,在交叉验证过程中应该进行预处理......谢谢!
如果您正在使用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
Run Code Online (Sandbox Code Playgroud)
使用您的代码(插入符号列车功能),训练集中的缺失值将替换为75.5.这将产生三个主要问题:
(medianImpute)对测试集使用相同的方法,因为测试集中的缺失值将替换为25.5因此,最好的办法是在训练集创建之前考虑缺失的数据.
希望这可以帮助!