【发布时间】:2013-04-28 21:36:42
【问题描述】:
这是this thread 的后续行动,在那里我使用 GaussianNB 分类器得到了错误的结果,结果证明是因为我在我正在做实验的 linux VM 上安装了 scikit-learn v0.10 .我最终改用了 Bernoulli 和 Multinomial NB 分类器,但是当我(最终)在我的 macbook 上安装了 scipy 时,我抓取的 scikit-learn 版本是 0.13,这是撰写本文时的最新版本。我现在遇到了一个新问题:
- 在 v0.10 上,我使用 BernoulliNB 获得了超过 90% 的准确率 我的一个功能集上的分类器,这是唯一值得注意的 到目前为止我已经取得了进步。
- 在 v0.13 上,大约 67% 使用完全相同的代码
有人知道版本之间有什么变化吗?我查看了回购历史,但没有看到任何可以解释这种准确性变化的原因。由于我使用 BernoulliNB v0.10 获得了非常好的结果,我显然很想使用它们,但如果不了解版本之间的冲突结果,我会犹豫不决。
我尝试设置(较新的)class_prior 属性,但这并没有改变 0.13 的结果。
编辑:没有提出一个可行的例子(我会继续努力),0.13 的结果有很大的偏差,这不是我对贝叶斯分类器的期望,让我相信它可能是对类先前计算的回归,尽管我还没有找到它。例如:
0.10:
T\P F M
F 120 18
M 19 175
0.13:
T\P F M
F 119 19
M 59 135
编辑 2:
我手工完成了几个示例。 0.13版肯定是对的,0.10版肯定不是,这是我既怀疑又害怕的。 0.10 中的错误似乎在类先验计算中。 _count 函数存在错误,特别是在 this line of the file 上,类计数完全错误:与 the 0.13 branch 比较,忽略两个分支在不同位置拉入平滑因子。
我必须更多地考虑这一点,为什么拙劣的特征计数会导致我的数据表现如此出色,我仍然有点不确定为什么设置类先验不起作用。也许这是对源文件中已经存在的男性偏见的惩罚?
编辑 3:
我相信这正是它正在做的事情。 _count 函数,以及 fit 内的特征先验计算,不会使此参数生效,因此虽然 predict 内考虑了 class_priors,但它们不用于在训练期间构建模型.不确定这是否是故意的 - 您想在测试时忽略用于构建模型的先验吗?
【问题讨论】:
-
能否请您提供一个简约的复制脚本 + 展示回归的数据?
-
@ogrisel:我当然可以尝试,但需要一些工作来获取代码和测试数据,以便我可以在当前框架之外重现回归。到目前为止,这将比我承认的调试问题所付出的更多的努力,所以我会看看我能把什么放在一起,然后根据时间框架更新帖子或重新发布,如果没有人知道版本之间的预期行为变化
标签: machine-learning scikit-learn bayesian document-classification bernoulli-probability