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

单二分类因变量与自变量的逻辑回归结果异常:混淆矩阵无0类输出

问题原因及解决方案

核心问题1:预测值与真实值类别体系不匹配

你的代码中,预测结果用数字1、2表示,但真实标签V1是取值为"False"(对应原0)和"True"(对应原1)的因子。两者类别不对应,导致混淆矩阵无法正确展示两类结果。

修复代码:

替换原预测值转换逻辑,将结果转为与真实标签一致的因子:

# 替换原预测值转换代码
predict_reg <- ifelse(predict_reg > 0.5, "True", "False")
# 确保预测值的因子水平与真实标签完全匹配
predict_reg <- factor(predict_reg, levels = c("False", "True"))

核心问题2:模型对所有样本预测为同一类别

调整阈值后仍只有一类结果,说明模型对测试集所有样本的预测概率都高于(或低于)阈值,导致预测结果全为True。常见诱因:

  • 数据不平衡:4500行原始数据中V1=1的样本占比过高,模型倾向于预测多数类。
  • 特征区分度弱:自变量V2无法有效区分V1的两类,模型学不到有效规则。

应对措施:

  • 检查测试集类别分布:
    先确认测试集是否同时包含两类样本:

    table(test_reg$V1)
    

    如果测试集仅含V1=1,属于抽样问题,重新拆分数据集即可。

  • 处理数据不平衡:
    若训练集两类占比悬殊,可采用以下方法:

    • 过采样少数类(如SMOTE算法)
    • 欠采样多数类
    • 训练模型时给少数类加权重:
      logistic_model <- glm(V1 ~ V2, 
                            data = train_reg, 
                            family = "binomial",
                            weights = ifelse(V1 == "False", 5, 1)) # 权重值按需调整
      
  • 验证模型预测概率分布:
    查看预测概率的分布情况,确认是否全偏向某一端:

    # 保留原始预测概率
    predict_reg_prob <- predict(logistic_model, test_reg, type = "response")
    # 绘制概率分布直方图
    hist(predict_reg_prob)
    

完整修正后的示例代码

# 构建数据集
df <- data.frame(V1 = c(0,1,1,0,0,1,1,0,1,1,1,0,0,1),
                 V2 = c(1,1,1,1,1,1,2,1,2,1,1,1,1,1))

# 设置因子水平(无需重复转换)
df$V1 <- factor(df$V1, levels = c(0, 1), labels = c("False", "True"))

# 按因变量拆分数据集,保证训练/测试集类别分布一致
split <- caTools::sample.split(df$V1, SplitRatio = 0.8)
train_reg <- subset(df, split == TRUE)
test_reg <- subset(df, split == FALSE)

# 训练逻辑回归模型(可选加入类别权重)
logistic_model <- glm(V1 ~ V2, 
                      data = train_reg, 
                      family = "binomial")

# 获取原始预测概率
predict_reg_prob <- predict(logistic_model, test_reg, type = "response")

# 转换为与真实标签匹配的类别
predict_reg <- ifelse(predict_reg_prob > 0.5, "True", "False")
predict_reg <- factor(predict_reg, levels = c("False", "True"))

# 生成混淆矩阵
table(test_reg$V1, predict_reg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:34:51