Python 2.7 GaussianNB:-ValueError:优先级之和应为1

Python 2.7 GaussianNB:-ValueError:优先级之和应为1,python-2.7,machine-learning,scikit-learn,gaussian,Python 2.7,Machine Learning,Scikit Learn,Gaussian,我想做什么 我正在尝试使用GaussianNB分类器训练具有10个标签的数据集,但在调整GaussianNB先验参数时,我遇到了以下错误:- 文件“/home/mg/anaconda2/lib/python2.7/site packages/sklearn/naive_bayes.py”,第367行,部分匹配 raise VALUE ERROR('优先级之和应为1') ValueError:优先级之和应为1 此代码为:- clf=GaussianNB(先验值=[0.08,0.14,0.03,0.

我想做什么

我正在尝试使用GaussianNB分类器训练具有10个标签的数据集,但在调整GaussianNB先验参数时,我遇到了以下错误:-

文件“/home/mg/anaconda2/lib/python2.7/site packages/sklearn/naive_bayes.py”,第367行,部分匹配 raise VALUE ERROR('优先级之和应为1') ValueError:优先级之和应为1

此代码为:- clf=GaussianNB(先验值=[0.08,0.14,0.03,0.16,0.11,0.16,0.07,0.14,0.11,0.0])


你可以清楚地看到总和是1,但它显示了这个错误,你能指出错误吗。

这看起来像是sklearn内部的一个非常糟糕的设计决策,因为他们正在做通常的不要比较浮点数东西(),这让我惊讶(因为sklearn通常是高质量的代码)

(尽管使用了一个列表,但我看不出在您这方面有任何错误用法。文档调用数组,而不是像在许多其他情况下那样调用数组,但是他们的代码正在进行数组转换)

:

输出:

('my_sum: ', 1.0000000000000002)
('naive: ', False)
('safe: ', True)
编辑:

因为我认为这个代码不好,所以我发布了一个问题,你可以看看他们是否遵守


,它也采用了这样一个向量,实际上也在使用fp-safe方法(数值上更稳定的求和+ε检验;但没有使用
np.isclose()
),如图所示。

除了上面提到的行之外,你能分享完整的代码吗?也许问题出在其他方面。我试着用你的先验知识初始化分类器,它工作正常。
import numpy as np

priors = np.array([0.08, 0.14, 0.03, 0.16, 0.11, 0.16, 0.07, 0.14, 0.11, 0.0])
my_sum = np.sum(priors)
print('my_sum: ', my_sum)
print('naive: ', my_sum == 1.0)
print('safe: ', np.isclose(my_sum, 1.0))
('my_sum: ', 1.0000000000000002)
('naive: ', False)
('safe: ', True)