【问题标题】:R -- make a prediction based upon multiple fields (factors), but not the entire data frameR——基于多个字段(因素)进行预测,而不是整个数据帧
【发布时间】:2017-09-30 22:25:24
【问题描述】:

好的,我有一个包含 9 个变量的 250 个观察值的数据框。为简单起见,我们将它们标记为 A - I

我已经完成了所有标准的工作(将事物转换为 int 或 factor、创建数据分区、测试和训练集等)。

我想要做的是使用 A 列和 B 列,并预测 E 列。我不想使用整个九列,在我进行预测时只使用这三列。

我尝试只使用预测中的有限列,如下所示:

myPred <- predict(rfModel, newdata=myData)

其中 rfModel 是我的模型,而 myData 仅包含我想要使用的两个字段,作为数据框。不幸的是,我收到以下错误:

predict.randomForest(rfModel, newdata = myData) 中的错误: newdata 中缺少训练数据中的变量

老实说,我对 R 很陌生,我什至不确定这是否可行。我认为我正在收集的数据(九个字段)对于“培训”很重要,但我无法弄清楚如何仅使用“结果”字段(在本例中为字段 E)和其他两个字段(A 和 B),并保留其他重要数据。

非常感谢任何建议。如有必要,我可以发布一些代码。

我只是想了解更多关于此类的信息。

【问题讨论】:

  • 如果您只想使用A 和B 进行预测,那么我认为您的模型应该只使用这两个预测器来构建。您能否详细说明为什么要在 A 到 I 上进行训练,然后只使用 A 和 B 进行预测?
  • 能否请您向我们展示您用于构建模型的语句?
  • @TimBiegeleisen 我正在尝试体育运动并预测获胜者。 A 和 B 是正面交锋的球队,其余的都是统计数据。
  • @TimBiegeleisen 所以基本上我想要使用设置像赢家(如 0/1)=“家”与“访客”之类的东西。 0代表客队获胜,1代表主队获胜。所以我的预测应该返回 1 或 0,具体取决于模型。

标签: r random-forest


【解决方案1】:

假设您使用了随机森林方法:

library(randomForest)
model <- randomForest(E ~ A+ B - c(C,D,F,G,H,I), data = train) 
pred <- predict(model, newdata = test)

正如您在此示例中看到的,仅 A 和 B 列将用于构建模型,其他列从模型构建中删除(但未从数据集中删除)。如果要包括所有这些,请使用 (E~ .)。这也意味着,如果您基于所有列构建模型,您也需要将这些列包含在测试集中,如果没有它们,预测将无法工作。如果测试数据只有 A 和 B 列,则必须基于它们构建模型。

希望对你有帮助

【讨论】:

  • 我尝试了此解决方案,但它一直告诉我缺少一列,即使我已将它们全部包含在内。
  • 然后检查列的名称和类型是否与被识别为相同的列具有完全相同的名称和类型,也许这就是问题
  • 我查了一下,它们似乎都有相同的名称和类型。
  • 嗨,没有其他想法 :( 错误明确表示您想使用模型预测的新数据没有构建该模型的变量
  • 我认为部分问题是我误解了我使用的示例的一部分。我在做 randomForest 时遗漏了错误的列。我没有排除第二列,而是排除了第一列。下次我尝试时,我将排除正确的列并报告。
【解决方案2】:

正如我在上面的评论中提到的,也许您应该只使用 A 和 B 列来构建模型。如果您不能/不想这样做,那么一种解决方法可能是在调用predict 时简单地使用其他列的中值。像这样的:

myData <- cbind(data[, c("A", "B)], median(data$C), median(data$D), median(data$E),
                median(data$F), median(data$G), median(data$H), median(data$I))
myPred <- predict(rfModel, newdata=myData)

这将允许您使用由 9 个预测变量构建的当前模型。当然,您会假设除 A 和 B 之外的所有预测变量的平均行为,这可能与仅基于 A 和 B 构建的模型的行为没有太大不同。

【讨论】:

  • 我要试试你的解决方案。当我这样做时,我会报告结果。
  • 我尝试了这个解决方案,但我收到一个错误,指出“闭包”类型的对象不是子集。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 2023-03-21
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2018-06-23
相关资源
最近更新 更多