预处理插补R插入和预测

时间:2014-11-22 05:08:20

标签: r r-caret

我注意到predict()只会在完整案例中创建预测。我在preProcess选项中包含了medianImpute,如下所示:

train(outcome ~ ., 
        data = df,
        method = "rf", 
        tuneLength = 5,
        preProcess = c("YeoJohnson", "center", "scale", "medianImpute"),
        metric = 'ROC', 
        trControl = train_ctrl)
}

这是否意味着我应该在训练集之前对缺失值进行估算?如果没有,我无法为测试集中的所有情况创建预测。我曾在Kuhn博士的书中读过,在交叉验证过程中应该进行预处理......谢谢!

1 个答案:

答案 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。这将产生三个主要问题:

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

    希望这有帮助!