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

glmnet多分类模型lambda.1se的Nonzero含义及非零系数提取

glmnet多分类默认模式下Nonzero字段含义与系数提取方法

1. lambda.1se对应Nonzero=9的含义

默认type.multinomial = "ungrouped"时,cv.glmnet返回结果的Nonzero字段统计的是所有分类中,至少在一个分类里系数非零的特征变量数量,不包含每个分类的独立截距项。
你之前统计每个分类非零系数数量得到10、12、10,是因为统计结果包含了每个分类各自的截距项,去掉截距后每个分类的非零特征数分别为9、11、9,三个分类的非零特征取并集后刚好为9个,和返回的Nonzero值完全匹配。你之前统计的是三个分类非零特征的交集,和Nonzero的统计逻辑完全不同。

2. 对应变量名和系数的提取方法

第一步:提取lambda.1se对应的系数列表

# 提取lambda.1se对应的系数,每个分类对应一个稀疏矩阵
coef_1se <- coef(cvfit, s = "lambda.1se")

第二步:提取Nonzero对应的9个特征名

# 排除每个分类的截距行(第一行),提取所有非零特征名
var_nonzero_list <- lapply(coef_1se, function(class_coef) {
  rownames(class_coef)[-1][as.matrix(class_coef[-1, ]) != 0]
})
# 取特征并集,就是Nonzero对应的9个特征
nonzero_features <- unique(unlist(var_nonzero_list))

第三步:提取对应系数(含截距)

# 将所有分类的系数合并为数据框,方便查看
coef_all <- do.call(cbind, lapply(coef_1se, function(m) as.matrix(m[, 1])))
colnames(coef_all) <- paste0("分类", colnames(coef_all), "系数")
# 筛选出目标行(包含截距和9个非零特征)
result_df <- coef_all[c("(Intercept)", nonzero_features), ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:39:04