1. 程式人生 > >貝葉斯理論

貝葉斯理論

例子-正向概率

還是拿質檢員的例子來做分析,假如我是一個質檢員,現在接到了三箱零件需要檢驗,其中第一箱有10個零件,第二箱有20個零件,第三箱有15個。半小時過去了,檢驗的結果出爐,第一箱有1個不合格,第二箱有3個不合格,第三箱2個不合格。

箱子 總零件個數 不合格
A 10 1
B 20 3
C 15 2

那現在我從這三個箱子中隨便拿取一個零件,這個零件是合格的概率是多少呢?我們假設事件D:零件合格,則:

\begin{equation*}
\begin{split}
P(D)&=P(A)*P(D| A) + P(B) *P(D| B) + P(C)*P(D | C) \\
&=(1/3) * (9/10) + (1/3) * (17/20) + (1/3) * (13/15)  \\
&= 0.872
\end{split}
\end{equation*}

像這樣得出一個零件是合格的概率就計算出來了,但是在機器學習領域中,可能我們更想知道,給你一個樣本,這個樣本屬於哪個類目的問題,這也叫分類問題,這就涉及到反向概率的問題。

反向概率-樸素貝葉斯理論

現在我們假設這樣一個場景:你拿到了一個零件,這個零件是屬於哪個箱子?這個問題在機器學習中就是類比為:給你一個樣本,這個樣本有很多特徵,機器模型輸出該樣本屬於哪個類別。這樣我們來理解貝葉斯理論。

條件概率

P(A|B) = \frac{P(AB)}{P(B)}

P(A|B)表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率,P(AB)表示事件A、事件B共同發生的概率,P(B)表示事件B發生的概率,這樣就計算就是一個條件概率。 我們結合上面零件合格這個場景繼續思考,如果我們知道了這件零件是合格的,那麼它是來自A、B、C三類中具體哪個類中?具體哪個類目我們肯定是不知道的,因為三個類目都有合格的零件,但是我們可以知道這件合格的零件來自每個類目的概率是多少,也就是求P(A|D)

P(B|D)P(C|D),其中D表示這件零件是合格的概率,由條件概率知道:

\begin{equation*}
\begin{split}
P(A|D) = \frac{P(A*D)}{P(D)} \\
P(B|D) = \frac{P(B*D)}{P(D)} \\
P(C|D) = \frac{P(C*D)}{P(D)} 
\end{split}
\end{equation*}

其中 P(D) 已經在上面計算出來了, P(D)=0.872P(A*D) 表示這件零件來自A箱子,並且是正品的概率,兩個條件是獨立的,所以我們計算為:

\begin{equation*}
\begin{split}
P(A*D) &=P(A)*P(D|A)\\
&= (1/3) * (9/10)  \\
&=0.3
\end{split}
\end{equation*}

於是我們可以計算合格商品來自每個箱子的概率:

\begin{equation*}
\begin{split}
P(A|D) &= \frac{P(A*D)}{P(D)} \\
&=0.3/0.872 \\
&=0.344 \\
\\
P(B|D) &= \frac{P(B*D)}{P(D)} \\
&=0.283 /0.872\\
&=0.324 \\
\\
P(C|D) &= \frac{P(C*D)}{P(D)} \\
&=0.289/0.872 \\
&=0.332
\end{split}
\end{equation*}

從而知道了合格的零件最可能來自箱子A,因為來自箱子A的概率最高,達到了0.344。從這個例子中我們可以引出貝葉斯理論:

我們假設事件D發生了,求事件D發生是因為事件A的概率,求逆向概率,怎麼理解?看下面: 1、假設事件A導致事件D發生的條件概率是:

P(D|A) = \frac{P(D*A)}{P(A)}

所以$$P(D*A)=P(D|A)*P(A)$$ 2、現在事件D發生了,可能是事件A導致的,也可能是事件B導致,或者其他事件導致的,我們想知道,是事件A導致的概率,所以,事件D發生是因為事件A導致的條件概率,公式如下:

P(A|D) = \frac{P(D*A)}{P(D)}

將1步驟中的P(D*A)=P(D|A)*P(A) 代入到本公式中,替換分子P(D*A)得到:

P(A|D) = \frac{P(D|A)*P(A)}{P(D)}

公式推導如上,經過上述兩個步驟後,我們可以得到最終的貝葉斯公式:

P(A|D) = \frac{P(D|A)*P(A)}{P(D)}

可能有人問:我們這麼轉換公式是為了什麼?其實推導工程也就用了兩次條件概率,正好兩次條件概率公式的分子是一樣的,用來替換一下,其實這是因為在我們日常中,我們比較容易知道結果,就像你帶著眼罩從箱子裡隨便拿到一個零件,這個零件合格或不合格是容易判斷的,但是你怎麼知道它是來自哪個箱子的?於是我們的問題就變成了:從三個箱子中拿出一個零件,這個零件是屬於某一個箱子的概率,問題角度變了,我們不再關注它是合格還是不合格,合格或不合格很容易知道,但它屬於哪個箱子就不容易知道,貝葉斯的提出就是解決這個問題

類比到機器學習領域

好了,我們知道了貝葉斯理論,那麼對應到機器學習領域,這個思維怎麼轉換?類比到機器學習就是:給你一條樣本,這個樣本的特徵給出來了,每個特徵的具體數值也給你了,現在請你告訴我它屬於哪個類目?當然,這肯定是一條測試集,因為在訓練集中,每一條記錄都被標記了結果,也就是被打上標籤,在二分類任務中,樣本屬於A類就被標記1,不屬於A類就被標記0,形式化描述就是如下:

輸入:訓練集X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\} ,測試集 X_{test}=\{{x_1},{x_2},{x_3},...,{x_m}\} 其中x_1=\{{t_1},{t_2},{t_3},...,{t_h}\},每一個樣本又h個特徵,訓練集中每一個樣本還有一個label標註結果。

這是比較形式化的一個描述,但又比較抽象,我們可以這麼理解,給你測試集的一個樣本,這個樣本的每個特徵數值告訴你了,這相當於告訴你這個零件是合格的還是不合格,然後你來告訴我這個樣本是屬於哪個類目,也就是 樣本中的特徵數值 就是上述箱子例子中零件合格這個結果,同時因為訓練集有特徵數值、每個樣本有類目結果,我們可以從訓練集入手,比較輕鬆的計算貝葉斯公式中某些概率,下一節,我們將具體計算。

機器學習中的貝葉斯理論

我們繼續將貝葉斯理論結合到機器學習領域,我們假設場景:

背景條件:訓練集X_{train}=\{{x_1},{x_2},{x_3},...,{x_n}\},分類結果是C=\{C_1,C_2,...,C_i\},每一條訓練集記錄對飲一個分類結果 輸入:給你一個測試集樣本x_1=\{{t_1},{t_2},{t_3},...,{t_h}\} 輸出:給出這個樣本屬於哪個類目

首先思考,一共有i個分類結果,我們可以計算這個樣本屬於每個分類結果的概率,選取概率大的分類結果作為這條樣本的類目,那針對這條樣本我們知道每個特徵的數值,我們認為這些特徵是從訓練集中挑選的,每個訓練集樣本有一個分類結果,於是我們將特徵類比為合格,那麼這個合格樣本來自那個類目?思考如下:

1、樣本資料是x_1=\{{t_1},{t_2},{t_3},...,{t_h}\},先取一個特徵分析,我們假設取的特徵是t_h,根據貝葉斯理論我們知道P(C_i|t_h)公式定義如下:

P(C_i|t_h)= \frac{P(t_h|C_i)*P(C_i)}{P(t_h)}

2、我們針對1中的公式來拆解分析:

  • (1)$P(t_h|C_i)$表示在$C_i$分類中$t_h$出現的概率,我們可以利用訓練集中來計算,因為訓練集中有這個特徵數值,可以計算這個特徵數值出現在$C_i$類目樣本中的概率
  • (2)$P(C_i)$表示類目$C_i$出現的概率,這個直接計算訓練集中$C_i$類目樣本佔總樣本的比例
  • (3)$P(t_h)$表示特徵$t_h$出現的概率,計算類似從箱子中取一個合格零件的概率,這裡就是從各個類目中抽取這個特徵數值的概率

    通過上述的三個步驟就可以計算出特徵t_h屬於類目C_i的概率。我們繼續推廣,一個樣本記錄有多個特徵,所以我們假設:

    假設:樣本中每個特徵之間是互相獨立、互不影響的。

    這條假設很重要,因為接下來我們要計算一個樣本屬於某個類目的概率了。

    P(C_i|x_i),由上述的假設,每個特徵都是獨立的,則:

    (1)P(x|C_i)=P(t_1|C_i)*P(t_2|C_i)*P(t_3|C_i)...P(t_h|C_i)=\prod_{j=0}^hP(t_j|C_i) (2)P(x)=P(t_1)*P(t_2)*P(t_3)... P(t_h)=\prod_{j=0}^hP(t_j) 所以P(C_i|t_h)公式為:

    P(C_i|x)= \frac{P(x|C_i)*P(C_i)}{P(x)}= \frac{\prod_{j=0}^hP(t_j|C_i)*P(C_i)}{\prod_{j=0}^hP(t_j)}

    這樣根據公式P(C_i|x),我們就可以計算出:P(C_1|x)、P(C_1|x)、P(C_i|x)等分類的概率,通過比較大小,我們就可以知道這個這個樣本屬於哪個類目了,重點是比較概率大小,所以在計算的時候也可以不計算分子,因為分子P(x)對於多有分類結果來說都是一樣的,所以直接計算分子比較概率大小。

    P(t_h|C_i)計算

    上文中我們研究了貝葉斯理論實現對樣本的分類,但是其中P(t_h|C_i)的計算會有一個問題:如果特徵都是離散值,這就可以直接求離散值的佔比情況就可以,但是如果特徵是連續值,就不好計算了, 通常當特徵屬性為連續值時,我們假定其值是服從高斯分佈(也稱正態分佈)。即:

    g(x,\sigma,\mu)=\frac{1}{\sqrt{{2\pi}}\times\sigma}e^{\frac{1}{2}(\frac{x-\mu}{\sigma})^2}
    P(t_h|C_i)=g(t_h,\sigma_{C_i},\mu_{C_i})

    因此只要計算出訓練集中各個類別中此特徵項劃分的各均值和標準差,代入上述公式即可得到需要的估計值。另一個需要討論的問題就是當P(t_h|C_i)=0怎麼辦,當某個類別下某個特徵項劃分沒有出現時,就是產生這種現象,這會令分類器質量大大降低。為了解決這個問題,我們引入Laplace校準,它的思想非常簡單,就是對每類別下所有特徵出現的計數加1,這樣如果訓練樣本集數量充分大時,並不會對結果產生影響,並且解決了上述頻率為0的尷尬局面。

    總結

    這很多都是自我理解的東西,有些概念、標題可能不是那麼準確,也就是拍腦袋想起來的,總結不到位的地方希望大家指出。下回我將講解貝葉斯理論如何結合實際場景,總之感謝網路上大牛的部落格,讓我學到了很多內容,此文是自己思考理解的,希望對大家有幫助。

    參考部落格

    機器學習:說說貝葉斯分類 演算法雜貨鋪——分類演算法之樸素貝葉斯分類(Naive Bayesian classification)