[英]Multinomial naive bayes - sklearn
import numpy as np
from sklearn.naive_bayes import MultinomialNB
X = np.array([[0.25, 0.73], [0.12, 0.42], [0.53, 0.92], [0.11, 0.32]])
y = np.array([0, 0, 0, 1])
mnb = MultinomialNB()
mnb.fit(X, y)
mnb.predict([[0.11, 0.32]])
->預測為0
它不應該預測1嗎?
不必要。 您不能僅僅因為模型看到了觀察就可以假設它會正確預測相應的標簽。 在像Naive Bayes這樣的高偏差算法中尤其如此。 高偏差模型往往會過分簡化X
和y
之間的關系,而您在此處看到的就是該結果。 最重要的是,您只適合4個樣本,對於學習穩健的關系的模型而言,這太少了。
如果您想知道模型是如何精確地創建這些預測的,那么多項式朴素貝葉斯會學習每個類的聯合對數似然率。 您實際上可以使用擬合模型來計算這些可能性:
>>> jll = mnb._joint_log_likelihood(X)
>>> jll
array([[-0.87974542, -2.02766662],
[-0.60540174, -1.73662711],
[-1.24051492, -2.36300468],
[-0.54761186, -1.66776584]])
從那里開始, predict
階段獲取類的argmax
,這是類標簽預測的來源:
>>> mnb.classes_[np.argmax(jll, axis=1)]
array([0, 0, 0, 0])
您可以看到,按照目前的狀態,該模型將為您提供的所有樣本預測0
。
這要看情況 。 在這里,您在擬合/訓練過程中僅使用一個 屬於1類的樣本。 此外, 每個樣本只有4個特征,而只有4個樣本,因此, 訓練仍然很糟糕 。
import numpy as np
from sklearn.naive_bayes import MultinomialNB
X = np.array([[0.25, 0.73], [0.12, 0.42], [0.53, 0.92], [0.11, 0.32]])
y = np.array([0, 0, 0, 1])
mnb = MultinomialNB()
mnb.fit(X, y)
mnb.predict([[0.11, 0.32]])
array([0])
mnb.predict([[0.25, 0.73]])
array([0])
該模型將學習規則,並且可以成功預測0類,但不能 成功預測 1類 。 這也稱為特異性和敏感性之間的權衡。 我們也通過說模型不能推廣規則來提及這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.