gpt4 book ai didi

machine-learning - Scikit-learn:BernoulliNB,v0.10 与 v0.13:结果截然不同

转载 作者:行者123 更新时间:2023-11-30 09:24:02 25 4
gpt4 key购买 nike

这是 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%

有谁知道版本之间发生了什么变化?我查看了 repo 历史记录,但没有看到任何可以解释这种准确性变化的内容。由于我使用 BernoulliNB v0.10 获得了非常好的结果,因此我显然想使用它们,但如果没有对版本之间的冲突结果有更多的了解,我对此犹豫不决。

我尝试设置(较新的)class_prior 属性,但这并没有改变 0.13 的结果。

编辑:由于缺乏一个可行的示例(我会继续研究),0.13 的结果存在严重偏差,这不是我对贝叶斯分类器的期望,这让我相信这可能是对类(class)先前计算的回归,尽管我还没有找到它。例如:

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 函数存在 bug,特别是 this line of the file ,类计数完全错误:与 the 0.13 branch 相比,忽略两个分支在不同位置引入平滑因子。

我必须更多地考虑这个问题,为什么糟糕的特征计数会在我的数据上产生如此好的性能,而且我仍然有点不确定为什么设置类先验不起作用。也许这是对源文件中已经存在的男性偏见的惩罚?

编辑3:

我相信这正是它正在做的事情。 _count 函数以及 fit 中特征先验的计算不会使该参数生效,因此虽然在 predict 中考虑了 class_priors ,它们在训练期间不用于构建模型。不确定这是否是故意的 - 您想忽略在测试时构建模型的先验吗?

最佳答案

总结我的结果,该错误存在于 BernoulliNB 分类器的 0.10 版本中,它在计算特征先验时扭曲了类计数,并且显然使结果模型产生偏差以产生更好的结果。我设法调整了它正在做的部分内容,并最终在 0.13 版本中获得了与(正确的)MultinomialNB 相同的性能。

关于machine-learning - Scikit-learn:BernoulliNB,v0.10 与 v0.13:结果截然不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com