樸素貝葉斯
樸素貝葉斯貝葉斯定理基本方法模型多項模型 MultinomialNB
貝葉斯定理
貝葉斯定理是關于隨機事件A和B的條件概率的一則定理。 P(A|B)=P(B|A)P(A)P(B) 在貝葉斯定理中,每個名詞都有約定俗成的名稱:P(A|B)是已知B發生后A的條件概率,也由于得自B的取值而被稱作A的后驗概率。P(A)是A的先驗概率(或邊緣概率)。P(B)是B的先驗概率或邊緣概率
先驗概率是指根據以往經驗和分析得到的概率,沒有考慮其他證據。后驗概率是考慮其他證據后得到的條件概率
Wiki:In Bayesian statistical, a PRior probability distribution, often simply called the prior, of an uncertain quantity is the probability distribution that would express one’s beliefs about this quantity before some evidence is taken into account. The posterior probability of a random event or an uncertain proposition is the conditional probability that is assigned after the relevant evidence or background is taken into account.
基本方法
輸入空間 X∈Rn 為n維向量集合, x=(x1,x2,x3,...,xn), 輸出空間 Y 為 K 類標記集合,即 y=(y1,y2,...,yK), 訓練數據 T={(x1,y1),(x2,y2),...,(xN,yN)}
樸素貝葉斯學習先驗概率分布 P(Y=yk) 及條件概率分布 P(X=x|Y=yk)=P(X=x1,x2,x3,...,xn|yk) 假設xi的值有Si個, i=1,2,...,n, 條件概率分布P(X=x|Y=yk) 參數個數為 K∏ni=1Si, 有指數級數量的參數
樸素貝葉斯算法對條件概率分布作出了獨立性的假設, 假設各維度特征獨立 P(x|yk)=P(x1,x2,x3,...,xn|yk)=∏i=1nP(xi|yk) 此假設使樸素貝葉斯變簡單,但犧牲一定準確率。
所以后驗概率等于 P(yk|x)=P(x|yk)P(yk)P(x)=P(x|yk)P(yk)∑k1P(x|yk)P(yk)=∏ni=1P(xi|yk)P(yk)∑k1∏ni=1P(xi|yk)P(yk),k=1...K 這是樸素貝葉斯的基本公式。于是,樸素貝葉斯分類器表示為 y=argmaxP(yk|x)=argmax∏ni=1P(xi|yk)P(yk)∑k1∏ni=1P(xi|yk)P(yk),k=1...K 對與不同 k 分母相同, 所以 y=argmax∏i=1nP(xi|yk)P(yk),k=1...K
模型
多項模型 (MultinomialNB)
可能會出現所要估計的概率值P(xi|yk), P(yk)為0的情況, 加入一個正數λ>0 P(yk)=Nyk+λN+Kλ P(xi|yk)=N(xi,yk)+λNyk+Siλ 對k=1...K,j=1...Si 有 ∑Kk=1P(yk)=1 ∑j=1Sip(xij|yk)=1 Si 是 xi的特征數量
class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
參數: alpha : float, optional (default=1.0) λ 值 fit_prior : boolean, optional (default=True). Whether to learn class prior probabilities or not. If false, a uniform prior will be used. 默認True, 如果false各先驗概率相等。 class_prior : array-like, size (n_classes,), optional (default=None). Prior probabilities of the classes. If specified the priors are not adjusted according to the data. 默認None,可用來指定先驗概率。
>>> import numpy as np>>> X = np.random.randint(5, size=(6, 100)) # X.shape = [n_samples, n_features]>>> y = np.array([1, 2, 3, 4, 5, 6]) # y.shape = [n_samples]>>> from sklearn.naive_bayes import MultinomialNB>>> clf = MultinomialNB()>>> clf.fit(X, y)MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)>>> print(clf.predict(X[2:3]))[3]
[1]: 李航 統計學習方法 [2]: https://en.wikipedia.org/wiki/Prior_probability Prior probability [3]: http://www.letiantian.me/2014-10-12-three-models-of-naive-nayes/ 樸素貝葉斯的三個常用模型:高斯、多項式、伯努利 [4]: http://blog.csdn.net/u012162613/article/details/48323777 樸素貝葉斯理論推導與三種常見模型