樸素貝葉斯是生成方法,也就是直接找出特徵輸出Y和特徵X的聯合分佈P ( X , Y ) P(X,Y) P ( X , Y ) ,然後再利用P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P ( Y ∣ X ) = P ( X ) P ( X , Y ) 得出。
1. 相關的統計學知識
條件獨立公式,如果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) = \frac{P(X,Y)}{P(X)} P ( Y ∣ X ) = P ( X ) P ( X , Y )
P ( X ∣ Y ) = P ( Y , X ) P ( Y ) P(X|Y) = \frac{P(Y,X)}{ P(Y) } P ( X ∣ Y ) = P ( Y ) P ( Y , X )
P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P(Y|X) = P(X|Y)\frac{P(Y)}{P(X)} P ( Y ∣ X ) = P ( X ∣ Y ) P ( X ) 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 = Y k ) P ( Y k ) 其 中 k ∑ P ( Y k ) = 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 ( Y k ∣ X ) = k ∑ P ( X ∣ Y = Y k ) P ( Y k ) P ( X ∣ Y k ) P ( Y k )
2.樸素貝葉斯模型
對於數據分析,假設分類模型的樣本是:
( 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 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_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 n )
即表示有m個樣本,每個樣本有n個特徵,特徵輸出有K個類別,定義爲:C 1 , C 2 , C 3 , . . . . . . C K C_1, C_2, C_3,......C_K C 1 , C 2 , C 3 , . . . . . . C K 。
從樣本中可以學習得到樸素貝葉斯的先驗分佈概率P ( Y = C i ) ( i = 1 , 2 , 3 , . . . K ) P(Y=C_i)(i=1, 2,3,...K) P ( Y = C i ) ( i = 1 , 2 , 3 , . . . K ) ,接着可以學習到條件概率分佈P ( X = x ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) P(X=\mathcal{x}| Y=C_k) = P(X_1=x_1, X_2=x_2,...X_n=x_n|Y=C_k) P ( X = x ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x n ∣ Y = C k ) ,然戶就可以利用貝葉斯公式可以得到X和Y的聯合概率分佈P ( X , Y ) P(X,Y) P ( X , Y ) ,聯合概率分佈定義爲P ( X , Y ) P(X,Y) P ( X , Y ) :
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ P(X,Y=C_k) &=…
上面的式子可以看出:雖然條件分佈的求解被簡化了,但是也帶來了預測的不準確性,如果特徵之間非常不獨立,那就儘量避免使用樸素貝葉斯模型,對於一般情況下,樣本的各個特徵之間相互獨立這個條件是弱成立的,尤其在數據量非常大的時候,雖然樸素貝葉斯模型犧牲了準確性,但是卻帶來了計算的簡化。
迴歸到需要解決的問題,問題是給定一個行的樣本特徵( x 1 ( t e s t ) , x 2 ( t e s t ) , . . . x n ( t e s t ) (x_1^{(test)}, x_2^{(test)}, ...x_n^{(test)} ( x 1 ( t e s t ) , x 2 ( t e s t ) , . . . x n ( t e s t ) ,需要解決的問題是判斷它屬於那個特徵。
對於貝葉斯模型,使用後驗概率最大化來判斷分類,只要計算出所有的K個條件概率P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P ( Y = C k ∣ X = X ( t e s t ) ) ,然後找出最大的條件概率對應的類別,這就是樸素貝葉斯的預測了。
3. 樸素貝葉斯的推斷過程
需要預測的類別C r e s u l t C_{result} C r e s u l t 是使P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P ( Y = C k ∣ X = X ( t e s t ) ) 最大化的類別,數學表達式爲:
\begin{align} 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) \Bigg{/}P(X=X^{(test)}) \end{align}
由於對於所有的類別計算P ( Y = C k ∣ X = X ( t e s t ) ) P(Y=C_k|X=X^{(test)}) P ( Y = C k ∣ X = X ( t e s t ) ) 時,上式的分母是一樣的,都是P ( X = X ( t e s t ) P(X=X^{(test)} P ( X = X ( t e s t ) ,因此,預測公式可以簡化爲:
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) C r e s u l t = C k a r g m a x P ( X = X ( t e s t ) ∣ Y = C k ) P ( Y = C k )
利用樸素貝葉斯的獨立性假設,就可以得到通常意義上的樸素貝葉斯推斷公式:
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) C r e s u l t = C k a r g m a x P ( Y = C k ) j = 1 ∏ n P ( X j = X j ( t e s t ) ∣ Y = C k )
4. 樸素貝葉斯的參數估計
上面可以得到只要我們求出P ( Y = C k ) 和 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . n ) P(Y=C_k)和P(X_j=X_j^{(test)}|Y=C_k)(j=1,2,...n) P ( Y = C k ) 和 P ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . n ) ,通過比較就可以得到樸素貝葉斯的推斷結果,下面討論如何通過訓練集來計算這兩個概率:
對於P ( Y = C k ) P(Y=C_k) P ( Y = C k ) ,通過極大似然估計很容易得到P ( Y = C k ) P(Y=C_k) P ( Y = C k ) 樣本類別C k C_k C k 出現的頻率,即樣本類別C k C_k C k 出現的次數m K m_K m K 除以樣本總數m m 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 ( X j = X j ( t e s t ) ∣ Y = C k ) ( j = 1 , 2 , . . . n ) 取決於我們的先驗條件:
如果X j X_j X j 是離散的值,可以假設X j X_j X j 符合多項式分佈,這樣得到P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P ( X j = X j ( t e s t ) ∣ Y = C k ) 是在樣本類別C k C_k C k 中,特徵X j ( t e s t ) X_j^{(test)} X j ( t e s t ) 出現的頻率,即:
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 ( X j = X j ( t e s t ) ∣ Y = C k ) = m k m k j t e s t
其中m k m_k m k 爲樣本類別C k C_k C k 總的特徵計數,而mkjtest爲類別爲C k C_k C k 的樣本中,第j維特徵X j ( t e s t ) X^{(test)}_j X j ( t e s t ) 出現的計數。
某些時候,可能某些類別在樣本中沒有出現,這樣可能導致P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P ( X j = X j ( t e s t ) ∣ Y = C k ) 爲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 ( X j = X j ( t e s t ) ∣ Y = C k ) = m k + O j λ m k j t e s t + λ
其中λ \lambda λ 爲一個大於0的常數,常常取爲1。O j O_j O j 爲第j個特徵的取值個數。
2. 如果X j X_j X j 是非常稀疏的離散值,即表示各個特徵出現的概率很低,這個時候我們可以假設X j X_j X j 符合伯努利分佈 ,即特徵X j X_j X j 出現記爲1,不出現記爲0,即表示只要X j X_j X j 出現即可,不關注X j X_j X j 的出現次數,這樣得到的P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P ( X j = X j ( t e s t ) ∣ Y = C k ) 是在樣本類別C k C_k C k 中,X j ( t e s t ) X_j^{(test)} X j ( t e s t ) 出現的頻率。此時有:
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 ( 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 ) )
其中,X j ( t e s t ) X_j^{(test)} X j ( t e s t ) 的取值爲0或者1。
3. 如果X j X_j X j 是連續值,我們通常取X j X_j X j 的先驗概率爲正態分佈,即表示在樣本類別C k C_k C k 中,X j X_j X j 的這個值符合正態分佈。這樣的話,P ( X j = X j ( t e s t ) ∣ Y = C k ) P(X_j=X_j^{(test)}|Y=C_k) P ( X j = X j ( t e s t ) ∣ Y = C k ) 的概率分佈爲:
KaTeX parse error: Invalid delimiter: '{"type":"ordgroup","mode":"math","loc":{"lexer":{"input":" P(X_j=X_j^{(test)}|Y=C_k) = \\frac{1}{\\sqrt{2\\pi\\sigma_k^2}}exp\\Bigg{(}-\\frac{(X_j^{(test)} - \\mu_k)^2}{2\\sigma_k^2}\\Bigg{)} ","settings":{"displayMode":true,"throwOnError":true,"errorColor":"#cc0000","macros":{},"colorIsTextColor":false,"strict":"warn","maxSize":null,"maxExpand":1000,"allowedProtocols":["http","https","mailto","_relative"]},"tokenRegex":{}},"start":71,"end":74},"body":[{"type":"atom","mode":"math","family":"open","loc":{"lexer":{"input":" P(X_j=X_j^{(test)}|Y=C_k) = \\frac{1}{\\sqrt{2\\pi\\sigma_k^2}}exp\\Bigg{(}-\\frac{(X_j^{(test)} - \\mu_k)^2}{2\\sigma_k^2}\\Bigg{)} ","settings":{"displayMode":true,"throwOnError":true,"errorColor":"#cc0000","macros":{},"colorIsTextColor":false,"strict":"warn","maxSize":null,"maxExpand":1000,"allowedProtocols":["http","https","mailto","_relative"]},"tokenRegex":{}},"start":72,"end":73},"text":"("}]}' after '\Bigg' at position 72: …a_k^2}}exp\Bigg{̲(̲}̲-\frac{(X_j^{(t…
其中μ k 和 σ k 2 \mu_k和\sigma_k^2 μ k 和 σ k 2 正態分佈的期望和方差,可以通過極大似然估計求得。μ k \mu_k μ k 爲在樣本類別C k C_k C k 中,所有X j X_j X j 的平均值。σ k 2 \sigma^2_k σ k 2 爲在樣本類別C k C_k C k 中,所有X − j X-j X − j 的方差。對於一個連續的樣本值,帶入正態分佈的公式,就可以求出概率分佈了。
5. 樸素貝葉斯算法過程
我們假設訓練集爲m個樣本n個維度,如下:
( x 1 ( 0 ) , x 2 ( 0 ) , . . . x n ( 0 ) , y 0 ) , ( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) , . . . ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y n ) (x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n) ( x 1 ( 0 ) , x 2 ( 0 ) , . . . x n ( 0 ) , y 0 ) , ( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) , . . . ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y n )
共有K個特徵輸出類別,分別爲C 1 , C 2 , . . . , C K {C_1,C_2,...,C_K} C 1 , C 2 , . . . , C K ,每個特徵輸出類別的樣本個數爲m 1 , m 2 , . . . , m K {m_1,m_2,...,m_K} m 1 , m 2 , . . . , m K ,在第k個類別中,如果是離散特徵,則特徵X j X_j X j 各個類別取值爲m j l m_{jl} m j l 。其中l l l 取值爲1 , 2 , . . . S j 1,2,...S_j 1 , 2 , . . . S j ,X j X_j X j 爲特徵j j j 不同的取值數。
輸出爲X ( t e s t ) X^{(test)} X ( t e s t ) 的分類。
算法流程如下:
1. 如果沒有Y Y Y 的先驗概率,則計算Y Y Y 的K K K 個先驗概率:P ( Y = C k ) = ( m k + λ ) / ( m + K λ ) P(Y=C_k) = (m_k+\lambda)/(m+K\lambda) P ( Y = C k ) = ( m k + λ ) / ( m + K λ ) ,否則P ( Y = C k ) P(Y=C_k) P ( Y = C k ) 爲輸入的先驗概率。
2. 分別計算第k k k 個類別的第j維特徵的第l l l 個個取值條件概率:P ( X j = x j l ∣ Y = C k ) P(X_j=x_{jl}|Y=C_k) P ( X j = x j l ∣ Y = C k )
2.1 如果是離散值:
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 ( X j = x j l ∣ Y = C k ) = m k + S j λ m k j l + λ
λ \lambda λ 可以取值爲1,或者其他大於0的數字。
2.2 果是稀疏二項離散值:
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 ( 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 )
此時l l l 只有兩種取值。
2.3 如果是連續值不需要計算各個l的取值概率,直接求正態分佈的參數:
KaTeX parse error: Invalid delimiter: '{"type":"ordgroup","mode":"math","loc":{"lexer":{"input":" P(X_j=x_j|Y=C_k) = \\frac{1}{\\sqrt{2\\pi\\sigma_k^2}}exp\\Bigg{(}-\\frac{(x_j - \\mu_k)^2}{2\\sigma_k^2}\\Bigg{)} ","settings":{"displayMode":true,"throwOnError":true,"errorColor":"#cc0000","macros":{},"colorIsTextColor":false,"strict":"warn","maxSize":null,"maxExpand":1000,"allowedProtocols":["http","https","mailto","_relative"]},"tokenRegex":{}},"start":62,"end":65},"body":[{"type":"atom","mode":"math","family":"open","loc":{"lexer":{"input":" P(X_j=x_j|Y=C_k) = \\frac{1}{\\sqrt{2\\pi\\sigma_k^2}}exp\\Bigg{(}-\\frac{(x_j - \\mu_k)^2}{2\\sigma_k^2}\\Bigg{)} ","settings":{"displayMode":true,"throwOnError":true,"errorColor":"#cc0000","macros":{},"colorIsTextColor":false,"strict":"warn","maxSize":null,"maxExpand":1000,"allowedProtocols":["http","https","mailto","_relative"]},"tokenRegex":{}},"start":63,"end":64},"text":"("}]}' after '\Bigg' at position 63: …a_k^2}}exp\Bigg{̲(̲}̲-\frac{(x_j - \…
需要求出μ k \mu_k μ k 和σ k 2 \sigma^2_k σ k 2 。μ k \mu_k μ k 爲在樣本類別C k C_k C k 中,所有X j X_j X j 的平均值。σ k 2 \sigma_k^2 σ k 2 爲在樣本C k C_k C k 中,所有X j X_j X j 的方差。
3. 對於實例X ( t e s t ) X^{(test)} X ( t e s t ) ,分別計算:
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 = C k ) j = 1 ∏ n P ( X j = x j ( t e s t ) ∣ Y = C k )
4. 確定實例X ( t e s t ) X^{(test)} X ( t e s t ) 的分類結果C r e s u l t C_{result} C r e s u l t :
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) C r e s u l t = C k a r g m a x P ( Y = C k ) j = 1 ∏ n P ( X j = X j ( t e s t ) ∣ Y = C k )
從上面的計算可以看出,沒有複雜的求導和矩陣運算,因此效率很高。
6. 樸素貝葉斯算法小結
樸素貝葉斯的主要優點有:
樸素貝葉斯模型發源於古典數學理論,有穩定的分類效率。
對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤其是數據量超出內存時,我們可以一批批的去增量訓練。
對缺失數據不太敏感,算法也比較簡單,常用於文本分類。
樸素貝葉斯的主要缺點有:
理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因爲樸素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,樸素貝葉斯性能最爲良好。對於這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
需要知道先驗概率,且先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候會由於假設的先驗模型的原因導致預測效果不佳。
由於我們是通過先驗和數據來決定後驗的概率從而決定分類,所以分類決策存在一定的錯誤率。
對輸入數據的表達形式很敏感。