我可以在sklearn贝叶斯分类器中设置特征先验吗?

时间:2017-03-24 11:21:40

标签: python scikit-learn classification bayesian

我做了一些简单的贝叶斯分类

X = [[1,0,0], [1,1,0]] ### there are more data of course
Y = [1,0]

classifier = BernoulliNB()

classifier.fit(X, Y)

现在我有一些"内幕贴士"每个X中的第一个元素比其他元素更重要。

  1. 我可以在培训模型之前加入这些知识吗?

  2. 如果sklearn不允许,是否还有其他分类器或其他图书馆允许我们在之前的模型培训中加入我们的课程?

2 个答案:

答案 0 :(得分:2)

我不知道问题2的答案,但我可以回答问题1。

在评论中"multiply the first element for each observation by different values"是一种错误的做法。

当您使用BernoulliNB或二项式时,您整合先前知识的方式是将您的知识添加到样本(数据)中。

让我们说你正在翻转硬币而且你知道这枚硬币是朝着更多头部方向操纵的。然后,您将添加更多显示更多头部的样本。如果您的先前知识显示70%的头部和30%的尾部:您可以添加总共100个样本,70个头部和30个尾部,到您的数据X

答案 1 :(得分:-1)

考虑算法实际在做什么。朴素贝叶斯执行以下分类:

p(class = k | data) ~ p(class = k) * p(data | class = k)

用语言来说:观察在k类中的(后验)概率与观察到观察的概率的任何观察在k类中的概率(先前的)概率成正比,因为它来了来自k类(可能性)。

通常当我们不知道任何事情时,我们假设p(class = k)只反映了观察数据的分布。

在您的情况下,除了观察到的数据之外,您还说有一些信息可以让您相信先前的p(class = k)应该被修改。这是完全合法的。事实上,这是贝叶斯推理的美妙之处。无论您的先前知识是什么,您都应该将其纳入此术语。因此,在您的情况下,如果您知道它比数据建议更可能发生,那么可能会增加进入特定班级的概率(即增加评论中建议的权重)。