如何使用预选的 Lambda 对 LASSO 运行 10 折交叉验证

问题描述

我通过多次运行 LASSO 并取平均 lambda 来选择一个 lambda,我使用了 glmnet。我知道想用这个 Lambda 对这个 LASSO 运行 10 倍交叉验证。

这是我迄今为止尝试过的代码示例:

library(caret)
library(glmnet)
train.control = trainControl(method = "cv",number = 10)


lm.out = lm(outcome ~ 0 +.,data = df)
x = model.matrix(lm.out)
y = df$outcome

model = train(glmnet(x,y,lambda = mean(Lambda_LASSO)),data = df,trControl = train.control)

这里的 Lambda_LASSO 是从 cv.glmnet 的迭代运行中取出的 Lambda 向量。

解决方法

首先,我不得不说这听起来很奇怪:

我通过多次运行 LASSO 选择了一个 lambda 平均λ

取 lambda 值的平均值的目的是什么?

下次提供示例数据集,并指定它是分类还是回归。假设您的 <p> using nth-child(2)</p> <div class="test_name"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> <p> using last-child</p> <div class="test_name-2"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> <p> using last-of-type</p> <div class="test_name-3"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> <p> using sibling combinator</p> <div class="test_name-4"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> <p> using nth-child(even)</p> <div class="test_name-5"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> <p> using :not() selector</p> <div class="test_name-6"> <div id ="1evhgctrq1bu51qgn9v81r38fhl_container" class="testing">testing 1</div> <div id ="1evhgctrs18701vda1462185r1l_container" class="testing">testing 2</div> </div> <hr/> 是这样的,我们从 glmnet 获取 lambda:

df

您可以使用 df = data.frame(matrix(runif(50*30),ncol=30)) df$outcome = rnorm(50) x = model.matrix(outcome ~ 0 +.,data = df) y = df$outcome Lambda_LASSO = glmnet(x,y)$lambda 将其输入插入符号并将 alpha 固定为 1,因为您正在执行套索:

tuneGrid =