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

如何从mlr3训练后的学习器(如glmnet、log_reg)获取特征与系数等指标?

在mlr3中提取模型系数、特征及特征重要性

一、从训练后的学习器对象提取系数与特征

1. 针对classif.cv_glmnet这类glmnet系列学习器

训练后的mlr3学习器对象可以通过$model访问底层的原生glmnet模型,再用glmnet自带方法提取系数:

# 获取训练后的底层glmnet模型
glmnet_model <- lrn_glmnet$model

# 提取lambda.min对应最优模型的系数(也可指定lambda.1se)
coef_matrix <- coef(glmnet_model, s = "lambda.min")

# 转成数据框筛选非零系数的特征
coef_df <- as.data.frame(as.matrix(coef_matrix))
colnames(coef_df) <- "coefficient"
# 过滤掉系数为0的特征,行名即为特征名
coef_df <- coef_df[coef_df$coefficient != 0, , drop = FALSE]

2. 针对log_reg(逻辑回归)这类基础学习器

以classif.log_reg为例,训练后同样通过$model访问底层的glm对象,直接提取系数:

# 训练逻辑回归学习器
learner_log <- lrn("classif.log_reg")
lrn_log <- learner_log$train(task, row_ids = train_set)

# 提取系数
log_coef <- coef(lrn_log$model)
# 转成数据框方便查看
log_coef_df <- as.data.frame(log_coef)
colnames(log_coef_df) <- "coefficient"

二、提取特征重要性

不同学习器的特征重要性获取方式略有差异,优先使用mlr3统一接口,或基于底层模型计算:

1. 通用接口:$importance()

大部分mlr3官方支持的学习器都实现了该方法,直接调用即可返回特征重要性分数:

# 针对cv_glmnet获取重要性
importance_scores <- lrn_glmnet$importance()

# 针对log_reg(线性模型可将系数绝对值作为重要性)
log_importance <- abs(coef(lrn_log$model))[-1] # 去掉截距项
names(log_importance) <- task$feature_names

2. 重采样后提取特征重要性

重采样完成后,可从ResampleResult对象中提取各折叠的重要性,再做汇总:

# 假设resample_result是重采样返回的结果对象
# 提取所有折叠的训练后学习器
fold_learners <- resample_result$learners

# 遍历收集每个折叠的特征重要性
all_fold_importance <- lapply(fold_learners, function(lrn) {
  lrn$importance()
})

# 转成数据框并计算各特征的平均重要性
importance_df <- do.call(rbind, all_fold_importance)
mean_importance <- colMeans(importance_df)
# 按重要性降序排序
sorted_importance <- sort(mean_importance, decreasing = TRUE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:50:25