如何从mlr3基准网格后的cv.glmnet学习器提取lambda值?
如何在mlr3中获取cv_glmnet选中的lambda.min值?
当你使用regr.cv_glmnet结合GraphLearner完成基准实验后,可以通过以下步骤提取交叉验证选中的lambda.min值:
步骤1:运行基准实验并保存结果
先执行基准网格并保存结果对象:
# 执行基准实验并保存结果 bmr <- benchmark_grid(tasks=task, learners=c(lm_learner, lasso_glrn), resamplings=resampling) # 可选:查看聚合后的评估结果 bmr$aggregate()
步骤2:提取训练后的Lasso模型实例
从基准结果中定位到Lasso对应的重采样结果,再取出训练好的GraphLearner:
# 找到Lasso学习器对应的结果索引 lasso_idx <- which(bmr$learners$id == lasso_glrn$id) # 获取Lasso的重采样结果 lasso_resample <- bmr$resample_results[[lasso_idx]] # 取出训练后的GraphLearner(这里取第一个重采样折叠的模型,若要所有折叠可循环处理) trained_lasso_glrn <- lasso_resample$learners[[1]]
步骤3:从GraphLearner中提取lambda.min
通过GraphLearner的管道结构,找到regr.cv_glmnet算子,进而获取底层的cv.glmnet模型对象,从中读取lambda.min:
# 获取管道中的cv_glmnet算子 lasso_po <- trained_lasso_glrn$graph$get_po("regr.cv_glmnet") # 提取训练后的cv.glmnet模型 cv_model <- lasso_po$model # 获取交叉验证选中的lambda.min lambda_min <- cv_model$lambda.min # 打印结果 cat("选中的lambda.min值为:", lambda_min, "\n")
补充说明
- 除了
lambda.min,cv.glmnet对象还包含lambda.1se(误差在最小误差1个标准差范围内的最大lambda,常用于更简洁的模型),可通过cv_model$lambda.1se获取。 - 如果你的实验包含多个重采样折叠,需要遍历
lasso_resample$learners来获取每个折叠的lambda值,再根据需求取均值或查看分布。
内容的提问来源于stack exchange,提问作者Tan YX
相关产品推荐
相关产品推荐

