R 如何使用预选Lambda对套索进行10倍交叉验证

R 如何使用预选Lambda对套索进行10倍交叉验证,r,cross-validation,r-caret,glmnet,lasso-regression,R,Cross Validation,R Caret,Glmnet,Lasso Regression,我通过多次运行套索并取平均lambda来选择lambda,我使用了glmnet。我知道我想用这个Lambda对这个套索进行10倍交叉验证 这是我迄今为止尝试过的代码的一个示例: library(caret) library(glmnet) 这里Lambda_LASSO是从cv.glmnet的迭代运行中提取的Lambda向量。首先,我必须说这听起来很奇怪: 我已经通过多次运行套索选择了lambda,并 平均λ 取lambda值的平均值的目的是什么 下次提供一个示例数据集,并指定它是分类还是回归。

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

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

library(caret)
library(glmnet)

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

首先,我必须说这听起来很奇怪:

我已经通过多次运行套索选择了lambda,并 平均λ

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

下次提供一个示例数据集,并指定它是分类还是回归。假设您的
df
是这样的,我们从glmnet获得lambda:

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
您可以使用
tuneGrid=
将其输入插入符号,并将alpha固定为1,因为您正在进行套索:

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

model = train(x=x,y=y,
tuneGrid = data.frame(alpha=1,lambda = mean(Lambda_LASSO)),
trControl = train.control,
method = "glmnet")


glmnet 

50 samples
30 predictors

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 43, 46, 46, 45, 46, 45, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  1.519513  0.3486916  1.286363

Tuning parameter 'alpha' was held constant at a value of 1
Tuning
 parameter 'lambda' was held constant at a value of 0.03752899

您无需运行
lm
即可提取模型矩阵
x=model.matrix(outcome~0+,data=df)
谢谢,我对glmnet使用了10倍交叉验证(默认值)。因此,数据分割的方式存在随机性,而lambda的选择也存在一定的差异。所以我基本上做了重复的k-折叠交叉验证,我认为这并不奇怪。
train.control = trainControl(method = "cv", number = 10)

model = train(x=x,y=y,
tuneGrid = data.frame(alpha=1,lambda = mean(Lambda_LASSO)),
trControl = train.control,
method = "glmnet")


glmnet 

50 samples
30 predictors

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 43, 46, 46, 45, 46, 45, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  1.519513  0.3486916  1.286363

Tuning parameter 'alpha' was held constant at a value of 1
Tuning
 parameter 'lambda' was held constant at a value of 0.03752899