我有这个套索回归代码,当我打印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
答案 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个值。