You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在mlr中获取惩罚逻辑回归的系数具体值?

获取mlr中惩罚逻辑回归的具体系数值

我懂你遇到的困扰——用getLearnerModel()提取惩罚逻辑回归(比如基于glmnet的 learner)的模型结果时,它返回的glmnet对象只会显示系数数量,看不到具体的系数值。这是因为glmnet属于正则化路径模型,它会针对一系列不同惩罚强度的lambda值拟合模型,所以得指定你要提取系数对应的lambda值才行。

下面是具体的解决步骤和示例代码:

1. 确认你的惩罚逻辑回归Learner类型

通常mlr里做惩罚逻辑回归会用classif.glmnet这个原生支持glmnet参数的learner,当然用classif.logreg加penalty参数本质也是调用glmnet,两种情况的解决方法一致。

2. 拟合模型并提取glmnet对象

先完成模型训练的基础步骤:

library(mlr)
library(titanic)
suppressMessages(library(tidyverse))

# 预处理泰坦尼克号数据
titanic_clean <- titanic_train %>%
  select(Survived, Pclass, Sex, Age, Fare) %>%
  drop_na() %>%
  mutate(Survived = as.factor(Survived),
         Sex = as.factor(Sex))

# 创建分类任务和惩罚逻辑回归Learner
task <- makeClassifTask(data = titanic_clean, target = "Survived")
learner <- makeLearner("classif.glmnet", predict.type = "response")

# 训练模型
trained_model <- train(learner, task)

3. 提取具体系数值

用getLearnerModel()拿到glmnet对象后,调用coef()函数并指定lambda参数。你可以选择交叉验证得到的最优lambda(比如lambda.min对应最小误差,lambda.1se对应更简洁的模型),也可以自己指定lambda值:

# 提取glmnet模型核心对象
glmnet_core <- getLearnerModel(trained_model)

# 获取交叉验证最优lambda对应的系数
optimal_coef <- coef(glmnet_core, s = glmnet_core$lambda.min)

# 转成易读的数据框格式(过滤掉被正则化到0的系数)
coef_result <- as.data.frame(as.matrix(optimal_coef)) %>%
  rownames_to_column(var = "特征") %>%
  rename(系数值 = s1) %>%
  filter(系数值 != 0)

print(coef_result)

为什么直接调用getLearnerModel()看不到系数?

因为glmnet对象存储的是整个正则化路径的系数矩阵,而非单个模型的系数。直接打印这个对象时,它只会展示模型的元信息(比如系数总数、lambda序列长度),必须通过coef()指定具体lambda,才能提取对应惩罚强度下的模型系数。


内容的提问来源于stack exchange,提问作者Rory Nolan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:53