【问题标题】:How to build k-fold Cross validation for random Forest如何为随机森林建立 k 折交叉验证
【发布时间】:2019-08-19 12:55:46
【问题描述】:

我是 R 初学者,我必须在随机森林模型中进行 5 或 10 倍交叉验证。我的问题是我必须手动执行 cv 而不是使用包。我想要做的是: 1. 用我的训练数据构建 k 折 2. 选择我的调整参数,例如 trees = c(200, 400, 600) 3. 将我的模型拟合到 k-1 折上并预测我的值保留集(验证集) 4. 然后我想评估我对保留集的预测并保存值。

我的评估参数应该是 AUC。我理解这个理论,但我在 R 中这样做有问题。你对我的代码有什么想法吗?非常感谢!!!

  • 这是一个分类问题,因此作为替代方案,认为 iris 数据集也可以在这里工作。

  • 我坚持认为我不知道如何将模型拟合到 k-1 折叠并预测每个验证集的值。我是否设置 i=1、i=2 等等? 这是我已经拥有的,但它不起作用:

training.x = iris[, 1:4]; training.y = iris[, 5];

training$folds = 
 sample(1:5,nrow(training), replace=TRUE)
myGrid <- expand.grid
( ntrees = c(500, 1000, 2000),
 mtry = c( 2, 4, 6, 8)
for (i in 1: 5){
newrf = randomForest(x = training.x[training$folds!=i,] , y = as.factor(training.y)
   ,tuneGrid = myGrid , importance = TRUE , do.trace = 10)  new.pr = predict(newrf, training.mt.X[training$folds==i,], id= i)
 err.vect[i] =roc.area(test, new.pr)$class
 print(paste("AUC for fold", i, ":", err.vect[i]))}``` 

【问题讨论】:

  • 当你说你“不知道如何开始”时,我们也不知道。您的数据在 R 中吗?你能把它分成几组吗?你知道如何对数据进行子集化吗?画随机数?在 Stack Overflow 上搜索 many many questions about cross validation in R?
  • 是的,我的数据在 R 中,我可以将其分组。我已经有一个训练集和一个测试集,而且我知道如何运行我的随机森林。我的主要问题是我不知道如何调整我的超参数以及如何在 k-1 折上拟合模型,以及在验证集上预测这个值。
  • 你不知道什么?如果您原则上不知道如何调整超参数,我建议您出一本教科书。 Introduction to Statistical Learning in R 是标准的。请参见第 181-194 页。这解释了如何使用交叉验证来调整超参数。如果您了解该算法并且在实现它时遇到问题,请参阅我的第一条评论中的链接,该链接有一个示例,显示您到目前为止所拥有的(可能是在像 mtcars 这样的玩具数据集上),并尝试解释 你被困在哪里了。
  • 因为算法相当简单:您需要指定折叠。你知道怎么画随机数吗?如何制作新专栏?然后为每个折叠执行一个 for 循环。你知道 for 循环是如何工作的吗?在循环中,对您的数据进行子集化,但只有一层。是这个问题吗?在子集上拟合模型。我认为您知道如何做到这一点,因为这是您在问题中展示的一件事。然后看看它在保留弃牌上的表现如何。这是你卡住的地方吗?等
  • 当你不显示 anything 我不知道我们是否需要解释每一个细节,比如添加一列和子集数据——或者你是否已经有了我不知道你为什么不显示它。这使得问题过于宽泛。如果我们从头开始向您展示所有内容,那么您要求的是 10 页的教程,而不是快速的答案。

标签: r random-forest cross-validation


【解决方案1】:
# Code for 10 Fold Cross Validation: Adjust variables and data frame to yours
set.seed(17)
cv.error=rep(0,9)
for (i in 1:9){
  glm.fit=(medv~poly(lstat,i),data=Boston)
  cv.error[i]=cv.glm(Boston,glm.fit,K=10)$delta[1]
}
cv.error
plot(cv.error,type="b")

【讨论】:

  • 添加一些解释以提高您的回答质量
猜你喜欢
  • 2021-06-05
  • 2021-06-17
  • 2014-04-16
  • 2018-09-03
  • 2019-09-24
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
相关资源
最近更新 更多