R Caret Package错误使用预处理功能输入数据

时间:2015-03-30 16:40:52

标签: r classification r-caret

我有一个缺少数据的数据集(训练 - 测试),我想在分类之前输入数据。

我尝试使用插入符号包和函数preProcess,我想使用训练集的预测变量来计算数据,并且仅使用训练集的知识在测试集上插入数据而不使用测试集的预测器(我不应该知道。)

p = preProcess(x = training, method = "knnImpute", k = 10)
pred = predict(object = p, newdata = training)
pred1 = predict(object = p, newdata = testing)

当我运行此代码时,我在第二行出现此错误

Error in FUN(newX[, i], ...) : 
  cannot impute when all predictors are missing in the new data point

我还尝试删除训练集中的预测变量,但结果是一样的。我尝试使用Iris数据集,删除每列中的一些值并删除预测器并且它可以工作......但数据集具有相同的特征,data.frame和两者都只有数值。

3 个答案:

答案 0 :(得分:1)

从你的话("不使用测试集的预测器(我不应该知道)"),我得出结论,通过"预测器"你的意思是目标变量 - 这本身就是一个错误。 "预测因素"是已知的特征,我们希望从中预测目标变量......

如果我是正确的,你实际上是在尝试使用缺失值插补来预测目标变量,这也是一个错误,而不是缺失值插补的目的。正确的用法是当你的预测变量(特征)中缺少某些(但不是全部)值时,你想要将它们按顺序插入,以便用作某些ML算法的输入。不容忍缺失值。

答案 1 :(得分:0)

我也遇到了同样的错误并且已经解决了你正在影响的数据集即训练,是使用createDataPartition通过分成训练和测试集来创建的。如果将分割应用于原始设置,则输入可以正常工作。

答案 2 :(得分:0)

我有同样的问题。我跟踪了问题所在,将目标列用作createDataPartition的trainRowNum变量。当我这样做时,它引发了错误

Error in quantile.default(y, probs = seq(0, 1, length = groups)): missing values and NaN's not allowed if 'na.rm' is FALSE

并进一步使用knnImpute和Predict给出以下错误

Error in FUN(newX[, i], ...) : cannot impute when all predictors are missing in the new data point

因此,我没有使用目标列,而是创建了一个Index变量

x$Index <- as.numeric(rownames(x))

,并使用“索引”列将数据分区为火车数据集。它运作良好,没有错误。索引列可以稍后从火车数据集中删除以进行进一步计算。我认为使用缺少变量的列进行数据分区会导致这种问题。