R 如何使用预选Lambda对套索进行10倍交叉验证
我通过多次运行套索并取平均lambda来选择lambda,我使用了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值的平均值的目的是什么 下次提供一个示例数据集,并指定它是分类还是回归。
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