R语言glmnet中岭回归的超参数lambda的选择

R语言的glmnet提供了ridge regression的函数,其对应与 α = 0 \alpha=0 α=0时情形。其默认 λ \lambda λ最大值的产生为 α = 0.001 \alpha=0.001 α=0.001时,Lasso对应KKT条件中的最大 λ \lambda λ.

使用默认程序提供的lambda sequence

N <- 200;  P <- 250;
X <- matrix(rnorm(n = N * P, mean = 0, sd = 3), nrow = N, ncol = P)
beta_true <- as.matrix(rep(x = 0, times = P) )
beta_true[1:P]<- 0.2 # dense
Y <- X%*%beta_true + rnorm(N, mean = 0, sd = 1)

cv.ridge <- cv.glmnet(X,Y,alpha=0,lambda.min.ratio=0.01) # 默认
plot(cv.ridge,xvar='lambda')
coef_ridge <-as.numeric( coef(cv.ridge,s='lambda.min'))[-1]
sum(abs(coef_ridge-beta_true))
39.71997

R语言glmnet中岭回归的超参数lambda的选择_第1张图片
可以看到默认的lambda sequence有很大一部分非常大,几乎没有任何作用,而对应lambda.min处的MSE仍在继续减小。
考虑基于上述的lambda.1se, 继续构建lambda_seq, 重新拟合模型

# 先根据lambda
lambda_1se <- cv.ridge$lambda.1se
lambda_seq <- exp(seq(log(lambda_1se),log(lambda_1se*1e-4),length.out=100))
cv.ridge3 <- cv.glmnet(X,Y,alpha=0,lambda=lambda_seq)
plot(cv.ridge3)
coef_ridge3 <-as.numeric( coef(cv.ridge3,s='lambda.min'))[-1]
sum(abs(coef_ridge3 - beta_true))
20.65283

R语言glmnet中岭回归的超参数lambda的选择_第2张图片
重新给定lambda sequence后,MSE收敛,且coef bias大大降低。

你可能感兴趣的:(R语言,杂,r语言,回归)