预处理插补R插入和预测

yok*_*ota 0 r r-caret

我注意到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博士的书中读过,在交叉验证过程中应该进行预处理......谢谢!

Lyz*_*deR 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
Run Code Online (Sandbox Code Playgroud)

使用您的代码(插入符号列车功能),训练集中的缺失值将替换为75.5.这将产生三个主要问题:

  1. 您不能(medianImpute)对测试集使用相同的方法,因为测试集中的缺失值将替换为25.5
  2. 您无法使用75.5手动替换测试集中的缺失值,因为75.5的值远远高于测试集的最大值,您可能会大大扭曲它.
  3. 插入符号包的功能系列将尝试找出模型的最佳参数(调整).当完整数据集的中位数(输入缺失数据的正确值)为50.5时,用75.5替换缺失值将使用错误的参数值调整模型.

因此,最好的办法是在训练集创建之前考虑缺失的数据.

希望这可以帮助!