如何计算预测对数概率朴素贝叶斯?

问题描述

#Load libraries

import numpy as np

from sklearn.naive_bayes import MultinomialNB

from sklearn.feature_extraction.text import CountVectorizer

from sklearn.feature_extraction.text import TfidfVectorizer 
#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])

#feature extraction

tfidf_vectorizer = TfidfVectorizer()
X = tfidf_vectorizer.fit_transform(text_data)


mnb = MultinomialNB(alpha = 1,fit_prior = True,class_prior = None)

mnb.fit(X,y)

print(tfidf_vectorizer.get_feature_names())

#output

['best','dumb','fred','is','joy','lazy','lisa','smart','the','tim']

print(mnb.class_log_prior_)

#output

[-0.51082562 -0.91629073]

print(mnb.feature_log_prob_) 

#output

[[-2.70956132 -2.16160272 -2.16160272 -1.97680838 -2.70956132 -1.90253959
  -1.90253959 -2.70956132 -2.70956132 -2.70956132]

 [-2.1671355  -2.60968347 -2.60968347 -2.14937805 -2.1671355  -2.60968347
  -2.60968347 -2.09680488 -2.1671355  -2.09680488]]
  
  
X_log_proba = mnb.predict_log_proba(tfidf_vectorizer.transform(["best"]))
print(mnb.predict(tfidf_vectorizer.transform(text_)))

#output
[1]

print(X_log_proba)  
#output

[[-0.76397049 -0.62700977]]

我正在尝试计算 X_log_proba 的值。据我所知,这个值来自日志先验类+类中特征的日志。 但例如,要预测仅包含 -2.167 的“最佳”单词的文本,它会给出 [[-0.76397049 -0.62700977]]。

但是当我尝试将特征“最佳”(-2.167)的对数概率添加到对数先验类(-0.91629073)时,结果不是-0.627。 有人能解释一下模型如何通过给定文本在此示例中仅包含单词“best”来给出 -0.627 的预测对数概率?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)