我想运行一个sklearn.naive_bayes.GaussianNB
模型与partial_fit
。为此,我计算priors
这样的:用scikit学习partial_fit返回ValueError:先验的总和应该是1
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异常:先验的总和应为1,但我已经确认并先验做总结为1.0:
print priors.sum()
> 1.0
我使用以下版本:
Python 2.7.12
scikit-learn 0.18.2
numpy 1.13.1
我只能想象它归结加法值的敏感性,但我试图用再次正常化先验并且它返回相同的错误。
有没有不同的方法来确保先验者和1.0具有更高的容忍度,或者有一些(对我来说不 - )显而易见的原因,这是行不通的?
编辑:labels
是一个numpy数组,包含整个数据集的标签表示为整数,X和y是一批完整的数据集。 y
和labels
都有来自每个班级的至少100个示例。
没有任何帮助,但它在Python 2.7.10,sklearn 0.18.2和numpy 1.13.1上工作正常。这不太可能是Python的事情,但可能是。你可以发布一些数据,看看我能否用你的数据重新创建? – ncfirth
你在'y'中的值不是'unique_lbls'吗? (根据文档['partial_fit'](http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.GaussianNB.html#sklearn.naive_bayes.GaussianNB.partial_fit)) – kazemakase
这是复杂的创建数据的例子,所以我反而尝试通过使用一组随机值来重现错误,这些随机值的创建方式为'X = numpy.random.rand(10000,100)'和'y = numpy.random.int(10000)'。我遵循上述相同的步骤,这没有任何问题。所以我的数据必须有一些东西。问题依然存在,尽管'priors.sum()'可以返回'1.0',partial_fit仍然抱怨它不是这种情况。 @kazemakase'y'中的所有类都可以在'unique_lbls'中找到 – Tobias