套索回归,生成系数矩阵

时间:2018-02-27 22:11:56

标签: r machine-learning regression

我有这个套索回归代码,当我打印e系数时,我得到多组beta值,而不仅仅是一组。我没有为 lambda 指定任何值,但是当我这样做时,我只得到一组beta值。 我知道如何找到lambda的最佳价值。我的问题是,当我没有指定一个lambda时,为什么我会得到这么多套beta?这些beta是连续变量吗?

beta

当我打印Here is the code: library(MASS) library(glmnet) Boston=na.omit(Boston) x=model.matrix(crim~.,Boston)[,-1] y=as.matrix(Boston$crim) lasso.mod =glmnet(x,y, alpha =1) beta=coef(lasso.mod) 时,我得到了这些测试版(这里我只展示了一些测试版,因为它是尺寸为14x77的测试矩阵):

beta

1 个答案:

答案 0 :(得分:3)

主要答案在?glmnet

中给出
  

<强>拉姆达

     

用户提供的lambda序列。典型的用法是拥有   程序根据nlambda和。计算自己的lambda序列   lambda.min.ratio。提供lambda值会覆盖此值。警告:   小心使用。避免为lambda提供单个值(for   CV使用后预测(而不是)。供应而不是   减少λ值的序列。 glmnet依赖于它的温暖   从速度开始,它通常比整个路径更快   计算单一的契合度。

现在,默认情况下,nlambda为100而不是77.最小的lambda由

给出
lambda.min.ratio = ifelse(nobs<nvars,0.01,0.0001)

而最大的一个是所有系数都为零。最后,在

lasso.mod
# Call:  glmnet(x = x, y = y, alpha = 1) 
# 
# Df    %Dev   Lambda
#  [1,]  0 0.00000 5.375000
#  [2,]  1 0.06643 4.897000
#  [3,]  1 0.12160 4.462000
#  [4,]  1 0.16740 4.066000
# .....
# [73,] 13 0.45400 0.006627
# [74,] 13 0.45400 0.006038
# [75,] 13 0.45400 0.005501
# [76,] 13 0.45400 0.005013
# [77,] 13 0.45400 0.004567

我们发现偏差百分比似乎不再发生变化。因此,由于这个原因,lambdas序列提前终止,没有达到100个值。