如何为随机森林建立k折交叉验证

时间:2019-03-28 16:47:28

标签: r random-forest cross-validation

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

我的评估参数应为AUC。我了解理论,但在R中却很难做到。您对我的代码有想法吗?非常感谢!!!

  • 这是一个分类问题,因此另一种选择是认为虹膜数据集也可以在这里使用。

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

training.x =虹膜[,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]))}``` 

1 个答案:

答案 0 :(得分:0)

# 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")