【发布时间】:2018-01-08 03:21:14
【问题描述】:
我正在尝试使用partial_fit 运行sklearn.naive_bayes.GaussianNB 模型。为此,我像这样计算priors:
unique_lbls, counts = np.unique(labels, return_counts=True)
counts = counts.astype(float)
priors = counts / counts.sum()
model = GaussianNB(priors=priors)
model.partial_fit(X, y, classes=unique_lbls)
我得到一个 `ValueError: The sum of the priors should be 1, but I have check and the priors sum up to 1.0:
print priors.sum()
> 1.0
我正在使用以下版本:
Python 2.7.12
scikit-learn 0.18.2
numpy 1.13.1
我只能想象它归结为求和值的敏感性,但我尝试使用priors /= priors.sum() 再次标准化先验,它返回相同的错误。
是否有不同的方法来确保先验总和为 1.0 并具有更高的容差,或者是否有一些(对我来说不是)明显的原因这不起作用?
编辑:labels 是一个 numpy 数组,其中包含以整数表示的整个数据集的标签,X 和 y 是完整数据集的一批。
y 和 labels 都有至少 100 个来自每个类的示例。
【问题讨论】:
-
一点帮助都没有,但在 Python 2.7.10、sklearn 0.18.2 和 numpy 1.13.1 上对我来说效果很好。这不太可能是 Python 的事情,但可能是。您能否发布一些数据,看看我是否可以使用您的数据重新创建?
-
您在
y中是否有不在unique_lbls中的值? (根据partial_fit的文档) -
创建数据示例很复杂,因此我尝试使用一组创建为
X = numpy.random.rand(10000,100)和y = numpy.random.int(10000)的随机值来重现错误。我按照与上述相同的步骤进行操作,并且没有任何问题。所以我的数据一定有什么东西。尽管priors.sum()如何返回1.0并且partial_fit 仍然抱怨它并非如此,但问题仍然存在。 @kazemakasey中的所有课程都可以在unique_lbls中找到 -
我不再认为是数据。我强烈怀疑如果你这样做
priors.sum() == 1.0,你会得到False。我说的对吗?
标签: python numpy scikit-learn sum naivebayes