在交叉验证练习中使用预测函数时得到不准确的行数

问题描述 投票:0回答:0

我正在对从 1 到 5 次的多项式执行 K = 10 的 K 折练习,目的是确定哪个多项式最适合所提供的数据。尽管如此,当我尝试使用长度为 32 的测试数据(X 测试)预测 Y-Hat 时。R 向我显示警告,让我知道预测已调整为具有 288 的训练数据的长度我真的不明白为什么会这样。

我相信的是,在拟合 gml 然后预测之后,我应该得到 x 测试集中包含的 32 个点的 32 y 预测值。

“...警告:‘newdata’有 32 行,但找到的变量有 288 行警告:‘newdata’有 32 行,但找到的变量有 288 行警告:‘newdata’有 32 行,但找到的变量有 288 行警告...”

这是我的代码:

    k = 10
    CVMSE = matrix(NA, nrow = k, ncol = 5)

    set <- 1:320
    random_x = sample(train_x, size = length(train_x))
    random_y = sample(train_noisy_y, size = length(train_noisy_y))
    
    n <- length(train_x)
    k <- 10
    group_sizes_x <- rep(floor(n/k), k)


    groups_x <-split(random_x, rep(1:k,group_sizes_x))
  
    n <- length(train_noisy_y)
    k <- 10
    group_sizes_y <- rep(floor(n/k), k)
    groups_y <-split(random_y, rep(1:k,group_sizes_y))

    for (deg in 1:5) {
  
      for (i in 1:k){
    
        x_test <- groups_x[[i]] %>% unlist()
        y_test <- groups_y[[i]] %>% unlist()
        x_train <- groups_x[-i] %>% unlist()
        y_train <- groups_y[-i] %>% unlist()

        model <- glm(y_train ~ poly(x_train, deg))
        y_pred <- predict.glm(model, newdata = data.frame(x = x_test))
        CVMSE[i, deg] <- mean((y_test - y_pred)^2)
     }}

meanCVMSE = apply(CVMSE, 2, mean)
meanCVMSE

最后我得到了 meanCVMSE 但有我之前提到的警告。

r cross-validation k-fold
© www.soinside.com 2019 - 2024. All rights reserved.