BernoulliNB在sklearn包中用于预测的方法是什么?

时间:2018-03-25 07:29:11

标签: machine-learning scikit-learn naivebayes

我正在阅读Sklearn中朴素贝叶斯的实现,我无法理解伯努利的预测部分:

source

借来的代码
def _joint_log_likelihood(self, X):
    #.. some code ommited

    neg_prob = np.log(1 - np.exp(self.feature_log_prob_))
    # Compute  neg_prob · (1 - X).T  as  ∑neg_prob - X · neg_prob
    jll = safe_sparse_dot(X, (self.feature_log_prob_ - neg_prob).T)
    jll += self.class_log_prior_ + neg_prob.sum(axis=1)

    return jll

neg_prob在这方面的作用是什么?有人可以解释这种方法吗?

我在网上阅读的所有地方(source)简单的方法是:

For word in document:
    For class in all_class:
        class_prob[class] += np.log(class_prob_for[word])
# basically add up the log probability of word given that class.
# (Which is pre computed from training data)

# finally add up the log probability of the class itself.

For class in all_class:
    class_prob[class] += np.log(class_prob_for[class])

但这与BernoulliNB

的结果并不完全相同

非常感谢任何信息。如果我想添加更多详细信息,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:0)

发现BernoulliNBMultinomialNB略有不同。

如此处所述:http://blog.datumbox.com/machine-learning-tutorial-the-naive-bayes-text-classifier/

文档中未出现的术语也用作:(1 - conditional_probability_of_term_in_class)

  

伯宁利变异,如Manning等人(2008)所述,   生成关于词汇表中每个术语相等的布尔指示符   如果该术语属于检查文件则为1,如果属于检查文件则为0   不。这种变化的模型明显不同于   多项式不仅因为它没有考虑到   每个单词的出现次数,也因为它占用了   考虑文档中的非发生术语。而在   多项式模型中的非出现项完全被忽略   伯努利模型在计算条件时被考虑在内   考虑概率,因此没有条款。

Algo用于sklearn来源:https://nlp.stanford.edu/IR-book/html/htmledition/the-bernoulli-model-1.html