【问题标题】:R Caret Package error imputing data with Pre-Process functionR Caret Package错误使用预处理功能输入数据
【发布时间】:2015-06-03 18:57:33
【问题描述】:

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

我尝试使用 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 和两者都只有数值。

【问题讨论】:

  • 提供可重现的示例和sessionInfo 的结果将有助于回答您的问题。

标签: r classification r-caret


【解决方案1】:

我遇到了同样的问题。我将问题追溯到使用目标列作为 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

所以我没有使用目标列,而是创建了一个索引变量

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

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

【讨论】:

    【解决方案2】:

    我也遇到了同样的错误,并且发现您正在估算的数据集(即训练)是使用 createDataPartition 通过拆分为训练集和测试集创建的。如果在拆分之前将其应用于原始集,则插补效果很好。

    【讨论】:

    • 虽然这样做可能会使程序正常工作,但不建议这样做。有关更多信息,请参阅此交叉验证答案:stats.stackexchange.com/questions/95083/… TLDR:当我们首先拆分时(在插补程序等之前),我们试图模拟现实生活中的情况。如果您不先拆分而是对整个数据集进行插补,那么您将面临出现比您在现实生活中观察到的更好结果的风险。
    【解决方案3】:

    从你的话(“不使用测试集的预测器(我不应该知道)”)中,我得出结论,“预测器”是指目标变量——这本身就是一个错误。 “预测变量”是已知的特征,我们希望从中预测目标变量...

    如果我是正确的,您实际上是在尝试使用缺失值插补来预测目标变量,这又是一个错误,而不是缺失值插补的目的。正确的用法是当您的预测变量(特征)中缺少 一些(但不是全部)值,并且您希望按顺序对它们进行插补,例如,用作某些 ML 算法的输入不容忍缺失值。

    【讨论】:

    • 我认为我只是使用了错误的术语......我很抱歉。第一步:我有一个分为训练和测试的数据集,现在我想使用完整的知识标签(目标)+已知特征来估算训练集的特征(预测?)中的缺失数据。 (当然我在目标中没有丢失数据)。第二步:我想估算测试集中的缺失数据(不使用目标),但是如果我在上面的示例中使用之前的模型“p”,它会告诉我维度不同(因为目标列是不在数据集中)。
    猜你喜欢
    • 2017-08-11
    • 2017-01-29
    • 2021-02-27
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多