首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用预选的Lambda对套索进行10倍的交叉验证

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

Stack Overflow用户
提问于 2021-02-26 10:58:05
回答 1查看 686关注 0票数 0

我选择了一个拉索通过多次运行和平均拉姆达,我使用glmnet。我知道我想对这个套索和兰达做10倍的交叉验证。

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

代码语言:javascript
复制
library(caret)
library(glmnet)
代码语言:javascript
复制
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的迭代运行中取出的Lambdas向量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-27 10:45:21

首先,我要说,这听起来真的很奇怪:

,我已经选择了一个羔羊,通过多次运行套索和平均拉姆达。

拿出你的兰达价值的平均值是什么目的呢?

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

代码语言:javascript
复制
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 =将其输入插入符号,并在1时修复alpha,因为您正在做lasso:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66384564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档