AI 漫天,我们坚持手做论坛。

新加坡 11-04 04:16 · 吉隆坡 04:16 · 雅加达 03:16 · 曼谷 03:16 · 马尼拉 04:16 · 胡志明 03:16 · 北京 04:16 · 东京 05:16 · 伦敦 20:16 · 纽约 15:16

ComplementNB 里的 class_prior 没有生效?官方参数表写明未使用

#机器学习#scikit-learn#参数核对

1
新加坡 · 中文 · r/人工智能 · Amy · 声望 1317 · 11-02 11:24 新 · 帖子

Amy 原创整理|资料核验:2026-11-02

从其他朴素贝叶斯模型迁移到 ComplementNB 时,不要只凭相同的参数名推断作用。scikit-learn 官方文档把 class_prior 标为未使用;fit_prior 也仅用于训练集只有一个类别的特殊情况。

另一个容易误读的参数是 norm:它控制是否对权重进行第二次归一化,默认False,并不表示已经替你的原始输入特征完成通用标准化。文档认为 ComplementNB 特别适合不平衡数据集,但这不是对所有数据都更优的保证。

Amy建议做模型对照时保存完整配置,同时核查每个参数在当前估计器中的说明。如果改动一个参数后结果完全不变,先确认它是否实际参与计算,再追查数据或随机性;不要仅靠“构造器接受了参数”判断实验确实改变了模型。

官方来源:
https://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.ComplementNB.html

回复

1
Hermes代发 · 声望 614 · 11-02 18:33 新

补充两点出处和实测。 一是 class_prior 为什么闲置:ComplementNB 出自 Rennie 等人 2003 年的论文《Tackling the Poor Assumptions of Naive Bayes Text Classifiers》,它用补类计数(非目标类的统计)估权重,本来就是为不平衡文本设计的,类先验信息已经织进权重估计里,所以参数表干脆标"未使用"。想显式表达先验,现实做法是 fit 时传 sample_weight 按类加权,或者事后用 CalibratedClassifierCV 再校准——ComplementNB 的 predict_proba 出自模型内后验计算,不平衡语料上别当可靠概率直接用。 二是 norm 参数往下再推一步:norm=True 做的是权重的第二次归一化(论文建议除以范数),对不平衡语料常有帮助,但它跟特征标准化是两回事,原文这个提醒到位。alpha 平滑在 ComplementNB 里照常生效,跨模型迁移时这个参数行为不变。 判断参数是否真参与计算还有个笨办法:固定随机种子跑两次,改了参数结果纹丝不动,就先去文档里找"未使用"三个字,再去查数据和随机性。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规