高偏斜数据经类别不平衡处理后Naive Bayes准确率下降原因咨询
类别平衡后Naive Bayes分类效果不升反降的核心原因
你遇到的是不平衡分类任务里的典型踩坑,核心原因集中在操作流程、指标认知、模型特性三个层面:
- 采样操作应用范围错误,引发信息损失与分布偏差
如果你是先在全量数据集上运行supervised.instances.resample或supervised.instances.spreadsubsample把全量数据平衡为1:1,再做随机化、按比例划分训练/测试集,会直接导致两个致命问题:- 用
spreadsubsample做下采样时,为了凑1:1的比例会直接删掉约71%的多数类(负类)样本,Naive Bayes完全依赖统计不同类别下的特征条件概率做决策,大量负类样本被删除后,模型对负类的特征分布估计会出现严重偏差,根本学不到真实的类间边界。 - 用
resample做有放回过采样时,会生成大量重复的少数类(正类)样本,如果先采样再划分,这些重复样本会同时出现在训练集和测试集里,不仅会造成数据泄露,还会扭曲正类的真实特征分布,让概率估计失准。
正确流程必须是先在原始分布的数据集上做分层划分,锁死完全不做任何修改、保持6:1原始分布的测试集,仅对训练集做采样平衡操作。
- 用
- 两次实验的测试集分布不一致,指标完全没有可比性
未做平衡处理时,测试集是6:1的真实业务分布,这时候83%的准确率本身参考价值极低:6:1的不平衡比下,模型只要无脑把所有样本判为负类,就能拿到≈85.7%的准确率,83%的准确率甚至比全猜负类的基线还差,0.623的召回率本质是模型在100个正样本里只能找对62个,漏判率接近4成。
全量数据平衡后划分出来的测试集是人造的1:1分布,不仅样本量比原来的测试集少了一大半,样本构成也完全变了——尤其是随机下采样时很容易把多数类里特征边界清晰的“易判样本”删掉,剩下的都是和正类特征高度重叠的难例,这时候算出的指标,根本不能和原始分布下的结果直接对比。 - Naive Bayes对类别先验极度敏感,硬改分布违背模型假设
Naive Bayes分类时会把类别先验概率作为核心决策依据,你把训练集平衡为1:1,相当于强行告诉模型“现实中正类和负类的出现概率各为50%”,但真实场景中正类的出现概率只有1/7≈14%,错误的先验输入会直接让模型的决策阈值偏移。再加上随机采样本身的随机性,如果没固定随机种子,采样后的样本特征分布很容易和原始分布出现较大偏移,简单的Naive Bayes没有足够的拟合能力纠正这种偏差,召回率下跌是必然结果。
修正操作建议
- 所有采样、特征处理类操作只能作用于训练集,测试集必须保持原始分布、全程不做任何修改,否则指标没有任何业务参考价值
- 划分数据集时必须开启分层抽样,保证训练集、测试集的类别占比和原始数据集完全一致
- 如果需要平衡类别,优先选择在训练集上做SMOTE合成少数类样本,不要用随机下采样丢数据,也不要用简单复制的随机过采样扭曲分布
- 训练Naive Bayes时可以手动设置符合真实场景的类别先验,不要完全依赖训练集的样本占比计算先验
内容的提问来源于stack exchange,提问作者Encipher
相关产品推荐
相关产品推荐

