在 lasso 或岭回归中,必须指定一个收缩参数,通常由或调用。这个值通常是通过交叉验证来选择的,方法是检查训练数据上的一堆不同的值,看看哪个在测试数据上应该检查的值范围是多少?是吗?
惩罚回归中收缩参数的典型可能值范围是多少?
机器算法验证
回归
套索
岭回归
正则化
2022-02-08 13:06:23
2个回答
你真的不需要打扰。在大多数软件包(如 glmnet)中,如果您不指定,软件包会生成自己的序列(通常推荐)。我强调这个答案的原因是,在 LASSO 运行期间,求解器会生成一系列,因此虽然提供单个值可能违反直觉,但实际上可能会大大减慢求解器的速度(当您提供精确的参数时,求解器求助于解决一个半确定的程序,该程序对于合理的“简单”情况可能会很慢。)
至于的确切值,您可以从中选择您想要的任何内容。请注意,如果您的值太大,则惩罚将太大,因此没有一个系数可以是非零的。如果惩罚太小,您将过度拟合模型,这将不是最好的交叉验证解决方案
对于那些试图弄清楚这一点的人:
我发现允许glmnet
计算和我们创建一个范围供它选择 ( ) 之间存在很大差异。grid
College
这是在数据集中使用“申请人”的示例ISLR
# Don't forget to set seed
set.seed(1)
train <- sample(1:dim(College)[1], 0.75*dim(College[1]))
# Matrices
xmat.train <- model.matrix(Apps~.-1,data=College[train,])
xmat.test <- model.matrix(Apps~.-1, data= College[-train,])
y <- College$Apps[train]
# Create a grid of values for the scope of lambda (optional):
grid <- 10 ^ seq(10,-2,length = 100)
# Add the grid here as lambda (optional)
ridge.fit <- glmnet(xmat.train, y, alpha = 0, lambda=grid)
cv.ridge <- cv.glmnet(xmat.train, y, alpha =0, lambda=grid)
bestlam <- cv.ridge$lambda.min
cat("\nBestlam (with grid):",bestlam)
pred <- predict(ridge.fit, s = bestlam, newx= xmat.test)
cat("\nWith Grid:", mean((College$Apps[-train]-pred)^2))
# Again but without the grid (allowing R to figure lambda out
ridge.fit <- glmnet(xmat.train, y, alpha = 0)
cv.ridge <- cv.glmnet(xmat.train, y, alpha =0)
bestlam <- cv.ridge$lambda.min
cat("\n\nBestlam (no grid):",bestlam)
pred <- predict(ridge.fit, s = bestlam, newx= xmat.test)
cat("\nWithout Grid:", mean((College$Apps[-train]-pred)^2))
您可以自己运行它,也可以grid
相应地进行更改,我已经看到了从grid <- 10 ^ seq(10,-2,length = 100)
到grid <- 10^seq(3, -2, by = -.1)
.
我最好的猜测是可以限制为某些值,这取决于我们找出最佳范围。
我还发现本指南很有帮助-> https://drsimonj.svbtle.com/ridge-regression-with-glmnet