这是this thread的后续内容,我使用GaussianNB分类器得到了错误的结果,结果是因为我在linux VM上使用了scikit-learn v0.10实验。我最终使用了伯努利和多项式NB分类器,但是当我(最终)在我的macbook上安装了scipy时,我抓到的scikit-learn版本是0.13,这是本文撰写时的最新版本。我现在遇到了一个新问题:
有谁知道版本之间发生了什么变化?我看了一下回购历史,但没有看到任何可以解释这种准确性变化的东西。由于我使用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时,不会使用它们在培训期间建立模型。不确定这是否是故意的 - 您是否想要忽略用于在测试时建立模型的先验?
答案 0 :(得分:0)
为了总结我的结果,这个bug出现在伯努利NB分类器的0.10版本中,它在计算特征先验时偏向了类计数,并且显然偏向所得到的模型以产生优异的结果。我设法调整了它正在做的事情,并最终获得了0.13版(Correct)MultinomialNB的相同性能。