【问题标题】:Caret gives a missing values error when I use preProcess = "medianImpute"?当我使用 preProcess = "medianImpute" 时,插入符号会出现缺失值错误?
【发布时间】:2017-09-27 21:10:12
【问题描述】:

最近完成了 Datacamp 的“机器学习工具箱”课程,我想应用我学到的东西:插入符号可以使用参数 preProcess = "medianImpute" 输入缺失值

如果我运行table(complete.cases(df)),我会得到:

FALSE  TRUE 
24429  6042

所以我需要对缺失值做一些事情。 video 让它看起来如此简单!

mod.lm.medians <- train(target ~., 
                data = train, 
                trControl = train_control,
                method = "lm",
                preProcess = "medianImpute")

给予:

na.fail.default(list(target = c(5850000L, 6000000L, 5700000L, : 对象中的缺失值

我找到了另一个 SO 答案 here,它告诉我不要尝试 na.action=na.exclude,它可以让我的模型运行,但只能在完整的情况下运行,这不是我想要的。

我对插入符号的预处理参数的理解不正确吗?我预计缺失值将替换为 df 中每个观察值的特征中值。相反,我得到了这个错误。

【问题讨论】:

  • 要进行调查,您可以使用 predict(preProcess(train, method=c("medianImpute")), train) 之类的东西单独运行预处理,这两个步骤的原因是 preProcess 是从训练集学习的,但也需要应用于测试集.这里我们只是重新申请训练看看效果
  • 嗨,我在控制台中输入了它并运行。虽然我不追!请 ELI5 并尽可能使用蜡笔和乐高积木。 IE。我不知道我刚刚跑了什么。我如何将它应用到我的模型中?
  • 这里是a pretty good article on caret pre processing。每种转换都有点重复。
  • 感谢您的链接。实际上,我在搜索解决方案时偶然发现了它。会通读。希望识别此插入符号错误的人也能看到并发表评论
  • 我不知道您是否找到任何解决此问题的方法。我在真实数据集上练习时尝试完全相同的东西(datacamp)并得到了同样的错误。

标签: r na r-caret data-science


【解决方案1】:

我认为问题在于使用公式 preProcess 参数。尝试先打破预处理,然后训练...

# first preprocess
preproc <- preProcess(train, method = "medianImpute")
trainPreProc<- predict(preproc,train)

mod.lm.medians <- train(target ~., 
                data = train, 
                trControl = train_control,
                method = "lm",
                preProcess = "medianImpute")

【讨论】:

    【解决方案2】:

    我遇到了完全相同的问题。我参加了名为“机器学习工具箱”的数据营课程,它可以在他们的控制台上运行,但它不适用于我的。

    【讨论】:

    • 如果你弄明白了,请告诉我。我记得我在传递给插入符号之前估算了中位数(如果您正在尝试几种算法,这实际上更有效,因为不希望 r 每次移动到下一个算法时都估算中位数)。不确定它是否会起作用,但过去我发现切换插入符号公式界面有时会神奇地消除问题target ~ var1, var2x = df$target, y = select(df, var1, var2)。不知道这是否会有所作为
    猜你喜欢
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多