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

使用glmnet做多分类逻辑回归遇报错:某类别样本量为0或1

解决glmnet多分类回归报错:one multinomial or binomial class has 1 or 0 observations

问题根源

你错误地用model.matrix(~.+0, data=y1)将因变量y转换为独热编码矩阵,但glmnet的family="multinomial"并不需要这种处理。该函数接受的因变量类型是因子向量或整数向量,传入独热编码矩阵会导致glmnet误判类别样本分布,触发报错。

修正步骤

  1. 放弃对因变量y的model.matrix处理,直接使用原始数值向量或转为因子:
    • 如果y1是单列数据框,直接提取向量:
      y <- y1[[1]]  # 提取数值型向量
      
    • 或者转为因子(更推荐,明确类别属性):
      y <- factor(y1[[1]], levels = 1:4)
      
  2. 重新执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:15:17