【问题标题】:Lasso regression, no variable was dropped套索回归,没有变量被丢弃
【发布时间】:2015-12-18 17:22:20
【问题描述】:

我正在 R 中对二元响应变量执行套索回归。

我正在使用 cv.glmnet 来寻找最佳 lambda,并使用 glmnet 来检查最佳 lambda 情况的系数。在调用这两个函数时,我指定了standardize =TRUEalpha = 1

在我的案例中,我有大约 40 个变量,我确信其中一些变量从散点图和vif(当我对相同数据执行逻辑回归时)相互密切相关。

我从套索回归中得到的最佳 lambda 为

想知道为什么没有删除任何变量。

【问题讨论】:

  • 你能发布一个可重现的例子吗?有多少观察?
  • @sahir。不幸的是,我无法提供可以重现这种情况的示例。我有大约 2000 个观察结果。我最终最终使用了逻辑回归和 SVM,因为我注意到即使我手动控制 lambda 的水平(强制它更大),Lasso 回归也会随意丢弃变量。

标签: statistics classification lasso-regression


【解决方案1】:

基本上是因为您的lambda 值太小。 lambda<0.001 表示您的惩罚是如此之小,以至于根本不重要。看看这个“愚蠢”的例子:

让我们生成一些样本随机数据。请注意变量zz1 是强相关的。

library(glmnet)
z<-rnorm(100)
data<-data.frame(y=3+rnorm(100),x1=rnorm(100),x2=rnorm(100),x3=rnorm(100),x4=rnorm(100),x5=rnorm(100),
             x6=rnorm(100),x7=rnorm(100),x8=rnorm(100),x9=rnorm(100),x10=rnorm(100),z=z,z1=z+rnorm(100,0,0.3))

现在运行一些模型:

gl<-glmnet(y=data$y,x=as.matrix(data[,-1]),alpha = 1)
plot(gl,xvar="lambda")

lambda 等于 0.001 意味着 log(lambda)=-6.907755 甚至在这个“愚蠢”的例子中,我们可以认为系数不会很重要(所以值应该等于 0)我们会变小但非零值(如图中所示)。

来自glmnetlambda=0.001 的系数与来自glm 的系数非常相似(就像我说的,小的lambda 等于没有对数似然的惩罚):

gl1<-glmnet(y=data$y,x=as.matrix(data[,-1]),alpha = 1,lambda=0.001)
gl2<-glm(data=data,formula=y~x1+x2+x3+x4+x5+x6+x7+x8+x9+x10+z+z1) 
gl1$beta
# x1  -0.10985215
# x2  -0.12337595
# x3   0.06088970
# x4  -0.12714515
# x5  -0.12237959
# x6  -0.01439966
# x7   0.02037826
# x8   0.22288055
# x9  -0.10131195
# x10 -0.04268274
# z   -0.04526606
# z1   0.04628616  
gl3$coefficients
(Intercept)          x1          x2          x3          x4          x5          x6 
 2.98542594 -0.11104062 -0.12478162  0.06293879 -0.12833484 -0.12385855 -0.01556657 
         x7          x8          x9         x10           z          z1 
 0.02071605  0.22408006 -0.10195640 -0.04419441 -0.04602251   0.04513612

现在看看这两种方法的系数有什么区别:

as.vector(gl1$beta)-as.vector(gl2$coefficients)[-1]
# [1]  0.0011884697  0.0014056731 -0.0020490872  0.0011896872  0.0014789566  0.0011669064
# [7] -0.0003377824 -0.0011995019  0.0006444471  0.0015116774  0.0007564556  0.00115004

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2020-03-17
    • 2022-11-17
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多