文章目錄
-
- 貝葉斯公式
- 貝葉斯模型描述
-
- 給定條件
- 目标
- 推理的過程
- $P(Y=C_k)$和$P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...,n)$怎麼學習
- 算法過程
- 代碼實踐:Thucnews分類
參考 樸素貝葉斯原理
貝葉斯公式
條件獨立公式,如果X和Y互相獨立,則有:
P ( X , Y ) = P ( X ) P ( Y ) \ P(X,Y) =P(X)P(Y) P(X,Y)=P(X)P(Y)
條件機率公式:
P ( Y ∣ X ) = P ( X , Y ) / P ( X ) \ P(Y|X) = P(X,Y)/P(X) P(Y∣X)=P(X,Y)/P(X)
P ( X ∣ Y ) = P ( X , Y ) / P ( Y ) \ P(X|Y) = P(X,Y)/P(Y) P(X∣Y)=P(X,Y)/P(Y)
全機率公式:
P ( X ) = ∑ k P ( X ∣ Y = Y k ) P ( Y k ) 其 中 ∑ k P ( Y k ) = 1 \ P(X) = \sum\limits_{k}P(X|Y =Y_k)P(Y_k) 其中\sum\limits_{k}P(Y_k)=1 P(X)=k∑P(X∣Y=Yk)P(Yk)其中k∑P(Yk)=1
從上面的公式很容易得出貝葉斯公式:
P ( Y k ∣ X ) = P ( X ∣ Y k ) P ( Y k ) ∑ k P ( X ∣ Y = Y k ) P ( Y k ) \ P(Y_k|X) = \frac{P(X|Y_k)P(Y_k)}{\sum\limits_{k}P(X|Y =Y_k)P(Y_k)} P(Yk∣X)=k∑P(X∣Y=Yk)P(Yk)P(X∣Yk)P(Yk)
貝葉斯模型描述
給定條件
假如我們的分類模型樣本是:
( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) , ( x 1 ( 2 ) , x 2 ( 2 ) , . . . x n ( 2 ) , y 2 ) , . . . ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y m ) (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1), (x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)},y_2), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m) (x1(1),x2(1),...xn(1),y1),(x1(2),x2(2),...xn(2),y2),...(x1(m),x2(m),...xn(m),ym)
代表有m個樣本,每個樣本有n個特征,特征輸出有K個類别,定義為 C 1 , C 2 , . . . , C K \ {C_1,C_2,...,C_K} C1,C2,...,CK
目标
在以上給定條件後,我們希望貝葉斯模型能通過給定樣本 X ( t e s t ) = ( x 1 ( t e s t ) , x 2 ( t e s t ) , . . . x n ( t e s t ) ) X^{(test)}={(x_1^{(test)}, x_2^{(test)}, ...x_n^{(test)})} X(test)=(x1(test),x2(test),...xn(test)),通過後驗機率最大化來判斷分類,預測出 P ( Y = C K ∣ X = X ( t e s t ) ) P(Y=C_K|X=X^{(test)}) P(Y=CK∣X=X(test))
推理的過程
已知要求 P ( Y = C K ∣ X = X ( t e s t ) ) P(Y=C_K|X=X^{(test)}) P(Y=CK∣X=X(test)),根據貝葉斯公式可得:
P ( Y = C k ∣ X = X ( t e s t ) ) = P ( X = X ( t e s t ) ∣ Y k ) P ( Y = C k ) ∑ k P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k ) P(Y=C_k|X=X^{(test)}) = \frac{P(X=X^{(test)}|Y_k)P(Y=C_k)}{\sum\limits_{k}P(X=X^{(test)}|Y=C_k)P(Y=C_k)} P(Y=Ck∣X=X(test))=k∑P(X=X(test)∣Y=Ck)P(Y=Ck)P(X=X(test)∣Yk)P(Y=Ck)
C r e s u l t C_{result} Cresult是使 P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P(Y=Ck∣X=X(test))最大化的類别,數學表達式為:
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ∣ X = X ( t e s t ) ) = a r g m a x ⎵ C k P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k ) / P ( X = X ( t e s t ) ) \begin{aligned} C_{result} & = \underbrace{argmax}_{C_k}P(Y=C_k|X=X^{(test)}) \\ & = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) {/}P(X=X^{(test)}) \end{aligned} Cresult=Ck
argmaxP(Y=Ck∣X=X(test))=Ck
argmaxP(X=X(test)∣Y=Ck)P(Y=Ck)/P(X=X(test))
由于對于所有的類别計算 P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P(Y=Ck∣X=X(test))時,上式的分母是一樣的,都是 P ( X = X ( t e s t ) ) P(X=X^{(test)}) P(X=X(test)),是以,我們的預測公式可以簡化為:
C r e s u l t = a r g m a x ⎵ C k P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k ) C_{result} = \underbrace{argmax}_{C_k}P(X=X^{(test)}|Y=C_k)P(Y=C_k) Cresult=Ck
argmaxP(X=X(test)∣Y=Ck)P(Y=Ck)
這裡給出一個大膽的獨立性假設:即X的n個次元之間互相獨立
那麼有:
P ( X ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) = P ( X 1 = x 1 ∣ Y = C k ) P ( X 2 = x 2 ∣ Y = C k ) . . . P ( X n = x n ∣ Y = C k ) \begin{aligned} P(X|Y=C_k) & = P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) \\ & = P(X_1=x_1|Y=C_k)P(X_2=x_2|Y=C_k)...P(X_n=x_n|Y=C_k) \end{aligned} P(X∣Y=Ck)=P(X1=x1,X2=x2,...Xn=xn∣Y=Ck)=P(X1=x1∣Y=Ck)P(X2=x2∣Y=Ck)...P(Xn=xn∣Y=Ck)
那麼我們利用樸素貝葉斯的獨立性假設,就可以得到通常意義上的樸素貝葉斯推斷公式:
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ) ∏ j = 1 n P ( X j = X j ( t e s t ) ∣ Y = C k ) C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) Cresult=Ck
argmaxP(Y=Ck)j=1∏nP(Xj=Xj(test)∣Y=Ck)
P ( Y = C k ) P(Y=C_k) P(Y=Ck)和 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . , n ) P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...,n) P(Xj=Xj(test)∣Y=Ck)(j=1,2,...,n)怎麼學習
我們知道隻要求出 P ( Y = C k ) P(Y=C_k) P(Y=Ck)和 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . n ) P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n) P(Xj=Xj(test)∣Y=Ck)(j=1,2,...n),我們通過比較就可以得到樸素貝葉斯的推斷結果。這一節我們就讨論怎麼通過訓練集計算這兩個機率。
對于 P ( Y = C k ) P(Y=C_k) P(Y=Ck),比較簡單,通過極大似然估計我們很容易得到 P ( Y = C k ) P(Y=C_k) P(Y=Ck)為樣本類别 C k C_k Ck出現的頻率,即樣本類别 C k C_k Ck出現的次數 m k m_k mk除以樣本總數m。
對于 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . n ) P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n) P(Xj=Xj(test)∣Y=Ck)(j=1,2,...n),這個取決于我們的先驗條件:
a) X j X_j Xj是離散的值,那麼我們可以假設 X j X_j Xj符合多項式分布,這樣得到 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)是在樣本類别 C k C_k Ck中,特征 X j ( t e s t ) X_j^{(test)} Xj(test)出現的頻率。即:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = m k j t e s t m k P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}}}{m_k} P(Xj=Xj(test)∣Y=Ck)=mkmkjtest
其中 m k m_k mk為樣本類别 C k C_k Ck總的特征計數,而 m k j t e s t m_{kj^{test}} mkjtest為類别為 C k C_k Ck的樣本中,第 j j j維特征 X j ( t e s t ) X_j^{(test)} Xj(test)出現的計數。
某些時候,可能某些類别在樣本中沒有出現,這樣可能導緻 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)為0,這樣會影響後驗的估計,為了解決這種情況,我們引入了拉普拉斯平滑,即此時有:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = m k j t e s t + λ m k + O j λ P(X_j=X_j^{(test)}|Y=C_k) = \frac{m_{kj^{test}} + \lambda}{m_k + O_j\lambda} P(Xj=Xj(test)∣Y=Ck)=mk+Ojλmkjtest+λ
其中 λ \lambda λ為一個大于0的常數,常常取為1。 O j O_j Oj為第 j j j個特征的取值個數。
b) X j X_j Xj是非常稀疏的離散值,即各個特征出現機率很低,這時我們可以假設 X j X_j Xj符合伯努利分布,即特征 X j X_j Xj出現記為1,不出現記為0。即隻要 X j X_j Xj出現即可,我們不關注 X j X_j Xj的次數。這樣得到 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)是在樣本類别 C k C_k Ck中, X j ( t e s t ) X_j^{(test)} Xj(test)出現的頻率。此時有:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = P ( X j ∣ Y = C k ) X j ( t e s t ) + ( 1 − P ( X j ∣ Y = C k ) ) ( 1 − X j ( t e s t ) ) P(X_j=X_j^{(test)}|Y=C_k) = P(X_j|Y=C_k)X_j^{(test)} + (1 - P(X_j|Y=C_k))(1-X_j^{(test)}) P(Xj=Xj(test)∣Y=Ck)=P(Xj∣Y=Ck)Xj(test)+(1−P(Xj∣Y=Ck))(1−Xj(test))
其中, X j ( t e s t ) X_j^{(test)} Xj(test)取值為0和1。
c) X j X_j Xj是連續值,我們通常取 X j X_j Xj的先驗機率為正态分布,即在樣本類别 C k C_k Ck中, X j X_j Xj的值符合正态分布。這樣 P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P(Xj=Xj(test)∣Y=Ck)的機率分布是:
P ( X j = X j ( t e s t ) ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( X j ( t e s t ) − μ k ) 2 2 σ k 2 ) P(X_j=X_j^{(test)}|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp{(}-\frac{(X_j^{(test)} - \mu_k)^2}{2\sigma_k^2}{)} P(Xj=Xj(test)∣Y=Ck)=2πσk2
1exp(−2σk2(Xj(test)−μk)2)
其中 μ k \mu_k μk和 σ k 2 \sigma_k^2 σk2是正态分布的期望和方差,可以通過極大似然估計求得。 μ k \mu_k μk為在樣本類别 C k C_k Ck中,所有 X j X_j Xj的平均值。 σ k 2 \sigma_k^2 σk2為在樣本類别 C k C_k Ck中,所有 X j X_j Xj的方差。對于一個連續的樣本值,帶入正态分布的公式,就可以求出機率分布了。
算法過程
我們假設訓練集為m個樣本n個次元,如下:
( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) , ( x 1 ( 2 ) , x 2 ( 2 ) , . . . x n ( 2 ) , y 2 ) , ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y m ) \ (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)}, y_1),(x_1^{(2)}, x_2^{(2)}, ...x_n^{(2)},y_2),(x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m) (x1(1),x2(1),...xn(1),y1),(x1(2),x2(2),...xn(2),y2),(x1(m),x2(m),...xn(m),ym)
共有K個特征輸出類别,分别為 C 1 , C 2 , . . . , C K {C_1,C_2,...,C_K} C1,C2,...,CK,每個特征輸出類别的樣本個數為 m 1 , m 2 , . . . , m K {m_1,m_2,...,m_K} m1,m2,...,mK,在第k個類别中,如果是離散特征,則特征 X j X_j Xj各個類别取值為 m j l m_{jl} mjl。其中l取值為 1 , 2 , . . . S j 1,2,...S_j 1,2,...Sj, S j S_j Sj為特征j不同的取值數。輸出為執行個體 X ( t e s t ) X^{(test)} X(test)的分類
算法流程如下:
- 如果沒有Y的先驗機率,則計算Y的K個先驗機率: P ( Y = C k ) = ( m k + λ ) / ( m + K λ ) \ P(Y=C_k)=(m_k+\lambda)/(m+K\lambda) P(Y=Ck)=(mk+λ)/(m+Kλ),否則 P ( Y = C k ) \ P(Y=C_k) P(Y=Ck)為輸入的先驗機率。
-
分别計算第k個類别的第j維特征的第l個個取值條件機率: P ( X j = x j l ∣ Y = C k ) P(X_j=x_{jl}|Y=C_k) P(Xj=xjl∣Y=Ck)
a)如果是離散值:
P ( X j = x j l ∣ Y = C k ) = m k j l + λ m k + S j λ P(X_j=x_{jl}|Y=C_k) = \frac{m_{kjl} + \lambda}{m_k + S_j\lambda} P(Xj=xjl∣Y=Ck)=mk+Sjλmkjl+λ
l a m b d a \ lambda lambda可以取值為1,或者其他大于0的數字。
b)如果是稀疏二項離散值: P ( X j = x j l ∣ Y = C k ) = P ( j ∣ Y = C k ) x j l + ( 1 − P ( j ∣ Y = C k ) ( 1 − x j l ) P(X_j=x_{jl}|Y=C_k) =P(j|Y=C_k)x_{jl} + (1 - P(j|Y=C_k)(1-x_{jl}) P(Xj=xjl∣Y=Ck)=P(j∣Y=Ck)xjl+(1−P(j∣Y=Ck)(1−xjl)
此時 l l l隻有兩種取值。
c)如果是連續值不需要計算各個l的取值機率,直接求正态分布的參數:
P ( X j = x j ∣ Y = C k ) = 1 2 π σ k 2 e x p ( − ( x j − μ k ) 2 2 σ k 2 ) P(X_j=x_j|Y=C_k) = \frac{1}{\sqrt{2\pi\sigma_k^2}}exp(-\frac{(x_j - \mu_k)^2}{2\sigma_k^2}) P(Xj=xj∣Y=Ck)=2πσk2
1exp(−2σk2(xj−μk)2)
需要求出 μ k 和 σ k 2 \mu_k和\sigma_k^2 μk和σk2。 μ k \mu_k μk為在樣本類别 C k C_k Ck中,所有 X j X_j Xj的平均值。 σ k 2 \sigma_k^2 σk2為在樣本類别 C k C_k Ck中,所有 X j X_j Xj的方差。
3)對于執行個體 X ( t e s t ) X^{(test)} X(test),分别計算:
P ( Y = C k ) ∏ j = 1 n P ( X j = x j ( t e s t ) ∣ Y = C k ) P(Y=C_k)\prod_{j=1}^{n}P(X_j=x_j^{(test)}|Y=C_k) P(Y=Ck)j=1∏nP(Xj=xj(test)∣Y=Ck)
4)确定執行個體 X ( t e s t ) X^{(test)} X(test)的分類 C r e s u l t C_{result} Cresult
C r e s u l t = a r g m a x ⎵ C k P ( Y = C k ) ∏ j = 1 n P ( X j = X j ( t e s t ) ∣ Y = C k ) C_{result} = \underbrace{argmax}_{C_k}P(Y=C_k)\prod_{j=1}^{n}P(X_j=X_j^{(test)}|Y=C_k) Cresult=Ck
argmaxP(Y=Ck)j=1∏nP(Xj=Xj(test)∣Y=Ck)
從上面的計算可以看出,沒有複雜的求導和矩陣運算,是以效率很高。
代碼實踐:Thucnews分類
樸素貝葉斯Thucnews分類