0

下午好。

在对k-Fold Cross-Validation进行研究后,我想要进行一次完整性检查。我将提供我的理解,然后提供一个示例来说明如何在R中执行先入为主的理解。

如果我的想法不正确,或者我的代码没有反映我的思维过程/正确的程序,我将非常感谢任何帮助。以连续响应变量的基本预测建模场景为例:

  • 拥有人口数据集 (xDF)
  • 我想将数据集拆分为 k=10 个单独的部分,在其中 9 个(绑定)上训练模型,然后在剩余的验证集上进行验证
  • 然后,我想遍历每个验证集,以观察模型在未经训练的数据段上的表现
  • 在第k+1...k+9个验证集上显示相似结果的第 k倍验证集上的模型性能测量(此示例中为RMSE )表明该模型具有良好的泛化性

代码:

#Declaring randomly sampled validation indices

ind <- sample(seq_len(nrow(xDF)), size = nrow(xDF))



n <- (nrow(xDF)/10)
nr <- nrow(xDF)
validation_ind <- split(ind, rep(1:ceiling(nr/n), each=n, length.out=nr))

#Looping through validation sets to obtain Model Performance measure of each set
RMSEsF <- double(10)
RMSEsFT <- double(10)
R2F <- double(10)
R2FT <- double(10)
rsq <- function (x, y) cor(x, y) ^ 2

for (i in 1:10){


    validate = as.data.frame(xDF[unlist(validation_ind[i]),])
    train = as.data.frame(xDF[unlist(validation_ind[-i]),])


    rf_train = randomForest(y~.,data=train,mtry=3)


    predictions_rf = predict(rf_train,validate)
    predictions_rft = predict(rf_train, train)


    RMSEsF[i] = RMSE(predictions_rf, validate$y)
    RMSEsFT[i] = RMSE(predictions_rft, train$y)
    R2F[i] = rsq(predictions_rf, validate$y)
    R2FT[i] = rsq(predictions_rft, train$y)

    print(".")


}

RMSEsF
RMSEsFT

我这样做对吗?

提前谢谢了。

4

0 回答 0