我正在阅读Sklearn中朴素贝叶斯的实现,我无法理解伯努利的预测部分:
借来的代码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
非常感谢任何信息。如果我想添加更多详细信息,请告诉我。谢谢。
答案 0 :(得分:0)
发现BernoulliNB
与MultinomialNB
略有不同。
如此处所述: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