【问题标题】:Intuitive problem with k-fold cross validationk折交叉验证的直观问题
【发布时间】:2020-09-16 03:00:28
【问题描述】:

我在使用交叉验证检查预测能力时遇到了一些直观的问题,我认为我没有 100% 获得算法。 我想通过例子来讲述我的直觉问题。设 k=5(折叠数)和

library(caret)
x=runif(100) 
z=rexp(100)
y=rnorm(100) 
Q=data.frame(x,z,y) 
train.control <- trainControl(method = "cv", number = 5)
train(y~x+z,method="lm",data=Q,trControl=train.control)

在输出中我得到了:

100 samples
  2 predictor

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 80, 80, 80, 80, 80 
Resampling results:

  RMSE      Rsquared   MAE      
  1.032508  0.1272826  0.8213676

Tuning parameter 'intercept' was held constant at a value of TRUE 

我的问题是:

(1) 为什么我的样本被划分为长度为 80,80,80,80,80 而不是 20,20,20,20,20 的子样本? 长度 y,x 和 z 是 100 而不是 400。

(2) 算法是仅从 x 和 z 绘制还是从 x 和 y 和 z 绘制?

(3) 算法在随机化后做了什么?我在互联网上找不到任何相关信息。我只看到他计算 RMSE 和 MAE。但例如 MAE 计算 y 和 y.hat 之间差异的绝对值。我相信 h.hat 是模型 y~x+z 预测的值(例如,如果我绘制 x=0.05 和 z=0.16,则 y.hat=0.21)。但我不知道那些抽奖号码的 y 是什么,我无法想象选择正确的可能性。

拜托,你能回答我的直觉问题,还是给我一些好的页面来阅读它?在我读过的所有页面中,我都找不到解决问题的方法。提前谢谢你。

【问题讨论】:

    标签: r machine-learning linear-regression cross-validation


    【解决方案1】:
    1. 5 折 CV 意味着您将数据分成 5 个部分,训练 4 个部分并在剩余的 1 个部分上进行测试。因此,您在 80 上进行训练并在剩余的 20 上进行测试。对于不同的 20 岁,您这样做了 5 次。你可以看看这个vignette on cross-validation,我基本上是从那里拿一张图:

    1. 它对数据框的行进行采样。 x y 和 z 必须一起走,不能独立采样,否则就很废话了。

    2. 您指定了 method="lm"y~x+z,因此您拟合了一个线性模型,其中 y 作为因变量,x 和 z 作为自变量。每次抽取 80 个样本,模型的系数(应该)会因样本抽取而不同。您预测测试集的值并计算误差、RMSE 或 MAE。在 5 轮之后,我们有 5 个测试集的 RMSE 或 MAE,我们取平均值。通常,我们对模型的不同超参数迭代地执行此操作,以根据最低误差选择最佳参数。但是在您的示例中,没有要调整的超参数。你可以看看这个不错的introduction to statistical learning textbook

    【讨论】:

    • 非常感谢您的解释!现在我100%理解算法了!
    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 2020-08-29
    • 2018-08-29
    • 2017-06-09
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多