Logistic Regression测试集预测全为0但准确率超80%,求原因
为什么Logistic回归全预测0却有80%+准确率?
核心原因:类别不平衡导致准确率失真
这是最常见的情况——你的数据集里无心脏病(类别0)的样本占比肯定超过了80%。准确率这个指标只看“猜对的样本数/总样本数”,如果测试集里80%以上都是类别0,哪怕模型啥都不学全猜0,自然能拿到80%的准确率,但这种模型完全没有实际价值。
其他可能的辅助原因
- 模型没学到有效区分特征:要么是特征和心脏病的关联性极弱,要么是特征预处理不到位(比如Logistic回归对特征尺度敏感,没做标准化的话,大尺度特征会主导模型,进一步偏向多数类),导致模型无法识别出正例(心脏病)的特征模式,只能默认预测占比更高的类别。
- 阈值设置不匹配:默认的0.5阈值在类别不平衡场景下不适用,但你这里连低于0.5的正例概率都没输出,说明核心问题还是类别不平衡,阈值调整只是后续优化的事。
解决思路
- 先确认类别分布:用代码
df['target'].value_counts(normalize=True)查看训练集、测试集里两类样本的占比,验证是否是不平衡问题。 - 换用合适的评估指标:别再看准确率了,改用召回率、F1分数、ROC-AUC,这些指标能真实反映模型对少数类(心脏病)的识别能力。
- 处理类别不平衡:
- 训练模型时给LogisticRegression加参数
class_weight='balanced',让模型自动给少数类样本更高的权重; - 用SMOTE过采样生成少数类样本,或者对多数类做欠采样,平衡两类数据量。
- 训练模型时给LogisticRegression加参数
- 优化特征工程:重新筛选和目标变量相关性高的特征,做标准化/归一化,处理缺失值,让模型能学到有效区分模式。
内容的提问来源于stack exchange,提问作者6haun
相关产品推荐
相关产品推荐

