用r语言交叉验证做回归

用r语言交叉验证做回归,用的KKNN这个包做K近邻方法回归,为什么这一步会报错,求帮忙指点一下

img

  • 请看👉 :R语言中的K折交叉验证
  • 除此之外, 这篇博客: 如何平衡机器学习中偏差与方差中的 R实现K折交叉验证 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 实现K折交叉验证,比较简单方式是使用caret包中的 trainControl() 函数。下面是示例数据集。

    # 示例数据集
    df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                     x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                     x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))
    
    # 查看数据集
    # df
    
    

    下面代码利用上面数据集执行多重线性回归模型,并设定k=5,执行K折交叉验证评估模型表现。

    library(caret)
    
    # 指定交叉验证,设定k为5
    ctrl <- trainControl(method = "cv", number = 5)
    
    
    # 拟合回归模型,并使用k折交叉验证评估模型表现
    model <- train(y ~ x1 + x2, data = df, method = "lm", trControl = ctrl)
    
    # 查看模型概要信息           
    print(model)
    
    # Linear Regression 
    # 
    # 10 samples
    #  2 predictor
    # 
    # No pre-processing
    # Resampling: Cross-Validated (5 fold) 
    # Summary of sample sizes: 8, 8, 8, 8, 8 
    # Resampling results:
    # 
    #   RMSE      Rsquared  MAE     
    #   3.873277  1         3.589545
    # 
    # Tuning parameter 'intercept' was held constant at a value of TRUE
    

    我们对输出结果稍作解释:

    • 没有进行预处理。也就是说在拟合模型之前,没有以任何方式对数据进行缩放(scale)

    • 评估模型采用重采样方式是5折交叉验证

    • 每次训练集的大小为8

    • RMSE: 均方根误差,它衡量的是模型预测与实际观测之间的平均差异。RMSE越低模型就越能准确地预测实际观测值。RMSE = Σ(yi–y^i)2/n\sqrt{Σ(y{_i} – ŷ{_i})^2 / n}Σ(yiy^i)2/n

    • r²: 这是对模型预测和实际观测之间相关性的度量。r²越高,模型就越能准确预测实际观测值。

    • MAE: 平均绝对误差,这是模型预测和实际观测之间的平均绝对差。MAE越低,模型就越能准确预测实际观测结果。MAE = 1/n * Σ|yi{_i}i – ŷi{_i}i|

    输出的三个指标(RMSE、r²和MAE)都让我们了解模型在测试数据(看不见)上的表现。在实践中,我们通常拟合几个不同的模型,并比较上面三个度量指标,选择产生最低的测试误差的模型作为最佳。

    下面的代码来检查最终的模型匹配:

    # 查看最终模型
    model$finalModel
    
    # Call:
    # lm(formula = .outcome ~ ., data = dat)
    # 
    # Coefficients:
    # (Intercept)           x1           x2  
    #     21.2672       0.7803      -1.1253  
    

    通过输出得到最终模型为:

    y = 21.2672 + 0.7803*(x1) – 1.12538(x2)

    我们还可以查看每组测试的预测误差指标情况:

    model$resample
    
    #       RMSE Rsquared      MAE Resample
    # 1 5.965809        1 5.556588    Fold1
    # 2 4.267831        1 4.090775    Fold2
    # 3 3.573658        1 3.457940    Fold3
    # 4 3.119044        1 2.831199    Fold4
    # 5 2.440045        1 2.011223    Fold5
    

    这里我们选择了k=5,但可以选择任何组数。在实践中通常认为选择5到10次可产生可靠测试误差。