随机森林:测试集也有标签会有什么不同吗?

3
我能找到的所有使用随机森林进行预测的示例都已经有了实际答案(即测试集具有标签)。当您没有该列时该怎么办?
例如,此教程使用鸢尾花数据:http://mkseo.pe.kr/stats/?p=220 如果我们真的这样做,测试数据集将包含[1,4]列,而不是第5列。如果您尝试在没有第5列的情况下运行此操作,则会出现一个错误,即数据帧大小不同,显然它们并不相同。
当您没有答案列时如何进行预测?
编辑 使用上面链接的摘录进行澄清:
准备训练和测试集。
 test = iris[ c(1:10, 51:60, 101:110), ]
 train = iris[ c(11:50, 61:100, 111:150), ]

测试数据框已经有完整的物种列。我正在尝试根据从训练集中生成的森林预测物种。所以,我现在的位置是在运行以下代码之后:

 test <- test[-5] 

如果我已经收集了一堆植物测量数据,并且想根据我从训练数据中生成的树模型来确定物种,那么我现在就处于这个位置。因此,基于测试数据帧中剩余的数据和使用训练数据帧生成的随机森林,该如何预测我刚刚删除的物种列呢?


1
随机森林是一种属于监督学习的分类算法。如果你正在寻找无监督学习,那么“聚类”就是一个不错的选择。 - flodel
1
老实说,我并不是!我正在尝试达到教程中的目标,即在训练集上构建随机森林,然后在测试集上进行预测。然而,由于明显的原因,我的测试集中没有预测值列。我可以成功地构建森林,但我无法弄清楚如何进行预测。 - user2468261
1
除非您能提供一个可重现的示例来说明您遇到的问题,否则我们将无法提供帮助。predict函数不会抱怨缺少_response_变量。因此,您正在做其他错误,但我们怎么知道是什么呢? - joran
1
在现实生活中,当使用测试集时,有时还没有响应列。例如,在 Kaggle 竞赛中,由于明显的原因,如过度拟合或数据窥探,这是很常见的。因此,您需要使用您的“训练”集并将其拆分或使用重新采样技术,如交叉验证和协同来找到正确的参数。我建议您阅读一些关于机器学习的内容。 - dickoa
一个重现你所遇到错误的示例 -- @flodel 已经清楚地证明,如果你按照你提供的示例逐步执行,就不会出现你所描述的错误信息。 - mnel
显示剩余3条评论
1个回答

9
尽管您引用的教程在测试集中有“种类”列,但正如您猜测的那样,它不是predict函数所需的内容。
library(randomForest)
test  <- iris[ c(1:10, 51:60, 101:110), -5]  # removed the Species column here.
train <- iris[ c(11:50, 61:100, 111:150), ]
r <- randomForest(Species ~., data=train, importance=TRUE, do.trace=100)
predict(r, test)

我一定是哪里打错了。昨天我在这上面花了好几个小时,现在用了你的代码就没问题了。看不出有什么区别!谢谢你检查它。 - user2468261

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接