交叉验证套索回归

时间:2017-06-10 21:05:33

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

我目前正在使用套索进行特征选择。首先,我执行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]   

1 个答案:

答案 0 :(得分:1)

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

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