2014-11-22 67 views
0

我注意到predict()只会在完整的情况下创建预测。我已经包含在预处理选项medianImpute,如下列:预处理插补R插入符号和预测

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

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

回答

4

如果您使用的是medianImpute,那么它肯定需要在训练集之前发生,否则即使您将测试集与medianImpute相比较,结果也是错误的。

以下面的极端情况下,例如:

你只有一个独立变量X哪些电话号码的constists 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替换缺失值将使用错误的参数值调整模型。

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

希望这会有所帮助!

+0

谢谢Lyzander。当我使用medianImpute时,这很有意义。 – user2300643 2014-11-22 17:54:33

+0

这是否也适用于转换? – user2300643 2014-11-23 19:35:17

+0

这取决于转型。如果转换是基于平均值和方差的话,那么是的。 – LyzandeR 2014-11-23 20:19:36