【问题标题】:R: how to add L1 norm line to plot from glmnetR:如何添加 L1 范数线以从 glmnet 绘图
【发布时间】:2018-08-19 19:51:37
【问题描述】:

我正在做 lasso 回归,我想通过使用 Leave one out cross validation 选择一些最能解释我的模型的 beta 系数。 这是我的代码:

library(glmnet)
set.seed(19875)
n=100
p=500
real_p=15
x=matrix(rnorm(n*p), nrow=n, ncol=p)
y=as.matrix(apply(x[, 1:real_p], 1, sum) + rnorm(n))
lasso=glmnet(x,y,alpha = 1)
plot(lasso)
#computing loocv 
cvlassofit<-cv.glmnet(x,y, nfolds =n, grouped = FALSE )
plot(cvlassofit)

第一个图生成 beta 系数路径:

然后我想添加一条垂直线,用于选择均方误差较小的最佳系数。情节应如下所示:

在我执行 CV 的代码部分中,我得到了具有最小 mse(均方误差) 的最佳 lambda。 剧情如下:

现在,我能否以某种方式基于 lambda 获得 L1 范数的值,以便在第一个图中添加一条垂直线?或者在最后一个情节中,我可以做一个 L1 norm 来代替 log(lambda) 吗?

【问题讨论】:

    标签: r glmnet lasso-regression


    【解决方案1】:

    现在,我能否以某种方式基于 lambda 获得 L1 范数的值,以便在第一个图中添加一条垂直线?或者我可以在最后一个情节中代替 log(lambda),我可以做一个 L1 norm 吗?

    你可以这样做:

    lambda_min <- cvlassofit$lambda.min
    estimates <- as.vector(coef(lasso, s = lambda_min, exact = TRUE))
    norm. <- sum(abs(estimates))
    plot(lasso, xlim = range(0, norm., as.vector(lasso$beta)))
    abline(v = norm., col = "red")
    

    结果如下:

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 1970-01-01
      • 2018-07-24
      • 2023-03-18
      • 1970-01-01
      • 2020-02-11
      • 2015-02-12
      • 2018-12-15
      • 2013-08-10
      相关资源
      最近更新 更多