使用glmnet做多分类逻辑回归遇报错:某类别样本量为0或1
解决glmnet多分类回归报错:one multinomial or binomial class has 1 or 0 observations
问题根源
你错误地用model.matrix(~.+0, data=y1)将因变量y转换为独热编码矩阵,但glmnet的family="multinomial"并不需要这种处理。该函数接受的因变量类型是因子向量或整数向量,传入独热编码矩阵会导致glmnet误判类别样本分布,触发报错。
修正步骤
- 放弃对因变量y的
model.matrix处理,直接使用原始数值向量或转为因子:- 如果y1是单列数据框,直接提取向量:
y <- y1[[1]] # 提取数值型向量 - 或者转为因子(更推荐,明确类别属性):
y <- factor(y1[[1]], levels = 1:4)
- 如果y1是单列数据框,直接提取向量:
- 重新执行glmnet拟合:
fit <- glmnet(x, y, family = "multinomial")
对无报错情况的解释
- 随机生成的
y=sample(1:4,120,replace=true)是整数向量,符合glmnet对多分类因变量的要求,因此无报错。 - 使用
y <- model.matrix(~., data=y1)生成的矩阵包含截距列,glmnet会自动调整识别逻辑,但这不是标准用法,不建议依赖。
额外检查
如果修正后仍报错,确认原始y1中1-4每个类别的样本量都≥2(可以用table(y1[[1]])查看),glmnet不允许类别样本量为0或1。
内容的提问来源于stack exchange,提问作者mandu soju
相关产品推荐
相关产品推荐

