【问题标题】:Crossvalidation Lasso regression交叉验证套索回归
【发布时间】:2017-11-12 16:03:10
【问题描述】:

我目前正在使用套索进行特征选择。首先,我执行 10 倍交叉验证以找到具有最低 MSE 的收缩参数。我现在尝试自己计算训练集的 MSE,但是,这个值不适合 cv-plot。

cv <- cv.glmnet(as.matrix(mtcars[,c(1,3:9)]), mtcars[,c(2)], alpha=1, nfolds=10, type.measure="mse")
plot(cv)

lasso.mod <- glmnet(as.matrix(mtcars[,c(1,3:9)]),mtcars[,c(2)],alpha=1,lambda=cv$lambda.min)
y <- predict(lasso.mod, s=cv$lambda.min, newx=as.matrix(mtcars[,c(1,3:9)]))
mean((mtcars[,c(2)]-y)^2) # calculate MSE

上面和下面的公式有什么区别?据说下面的公式提供了套索的 MSE,但为什么两个值不相同?准确地说,我使用与计算 MSE 相同的数据集进行交叉验证。

cv$cvm[cv$lambda == cv$lambda.min]   

【问题讨论】:

  • 您的问题到底是什么?是不是你计算的MSE低于CV MSE?我认为这个结果应该是可以预期的,因为您将样本外拟合与样本内拟合进行比较。但是这个问题是关于统计的,而不是编程的。

标签: r statistics data-modeling modeling cross-validation


【解决方案1】:

交叉验证 MSE 不应该等于整个训练数据集的 MSE,因为它们是完全不同的两个概念。

某个 lambda 的交叉验证 MSE 是:如果将训练数据集分成 10 个部分,则对每个部分执行以下操作:使用 lambda 和其他 9 个部分拟合 lasso 模型并计算该部分的 MSE,以及计算您拥有的 10 个 MSE 的平均值。这是交叉验证 MSE,它与 MSE 在训练数据集上完全不同。

【讨论】:

猜你喜欢
  • 2016-09-30
  • 2016-06-27
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-13
  • 2018-09-06
  • 2017-12-22
  • 2021-03-28
相关资源
最近更新 更多