如何在 naive_bayes MultinomialNB 中计算 feature_log_prob_
Posted
技术标签:
【中文标题】如何在 naive_bayes MultinomialNB 中计算 feature_log_prob_【英文标题】:How to calculate feature_log_prob_ in the naive_bayes MultinomialNB 【发布时间】:2020-08-18 13:37:12 【问题描述】:这是我的代码:
# Load libraries
import numpy as np
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
# Create text
text_data = np.array(['Tim is smart!',
'Joy is the best',
'Lisa is dumb',
'Fred is lazy',
'Lisa is lazy'])
# Create target vector
y = np.array([1,1,0,0,0])
# Create bag of words
count = CountVectorizer()
bag_of_words = count.fit_transform(text_data) #
# Create feature matrix
X = bag_of_words.toarray()
mnb = MultinomialNB(alpha = 1, fit_prior = True, class_prior = None)
mnb.fit(X,y)
print(count.get_feature_names())
# output:['best', 'dumb', 'fred', 'is', 'joy', 'lazy', 'lisa', 'smart', 'the', 'tim']
print(mnb.feature_log_prob_)
# output
[[-2.94443898 -2.2512918 -2.2512918 -1.55814462 -2.94443898 -1.84582669
-1.84582669 -2.94443898 -2.94443898 -2.94443898]
[-2.14006616 -2.83321334 -2.83321334 -1.73460106 -2.14006616 -2.83321334
-2.83321334 -2.14006616 -2.14006616 -2.14006616]]
我的问题是:
让我们说:“最佳”:class 1 : -2.14006616
的概率。
得到这个分数的计算公式是什么。
我正在使用LOG (P(best|y=class=1)) -> Log(1/2)
-> 无法获得-2.14006616
【问题讨论】:
【参考方案1】:从documentation 我们可以推断出feature_log_prob_
对应于给定类别的特征的经验对数概率。让我们举一个“最佳”的例子来说明这个例子,log
类 1
的这个特征的概率是 -2.14006616
(正如你所指出的),现在如果我们将它转换成实际的概率分数它将是np.exp(1)**-2.14006616 = 0.11764
。让我们后退一步,看看1
类中“最佳”的概率如何以及为什么是0.11764
。根据Multinomial Naive Bayes 的文档,我们看到这些概率是使用以下公式计算的:
其中,分子大致对应于特征“best”在训练集中出现在类1
(我们在这个例子中感兴趣)的次数,而分母对应于所有训练集的总计数1
类的功能。此外,我们添加了一个小的平滑值alpha
以防止概率为零,n
对应于特征的总数,即词汇的大小。为我们的示例计算这些数字,
N_yi = 1 # "best" appears only once in class `1`
N_y = 7 # There are total 7 features (count of all words) in class `1`
alpha = 1 # default value as per sklearn
n = 10 # size of vocabulary
Required_probability = (1+1)/(7+1*10) = 0.11764
您可以对任何给定的功能和类以类似的方式进行数学运算。
希望这会有所帮助!
【讨论】:
我认为您可以将np.exp(1)**-2.14006616
简化为np.exp(-2.14006616)
,不是吗?以上是关于如何在 naive_bayes MultinomialNB 中计算 feature_log_prob_的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sklearn.naive_bayes.Bernoulli 的朴素贝叶斯分类器;如何使用模型进行预测?
如何在 naive_bayes MultinomialNB 中计算 feature_log_prob_
sklearn.naive_bayes.GaussianNB 中的 ValueError