1. 程式人生 > >錯過了先飛,那就多飛......

錯過了先飛,那就多飛......

目錄

前言

總結

前言

  什麼是分類演算法

   通俗地講分類演算法就是把大量已知特徵及類別的樣本物件輸入計算機,讓計算機根據這些已知的類別與特徵歸納出類別與特徵之間的規律(準確地說應該是分類模型),最終目的是運用得到的分類模型對新輸入的物件(該物件已知特徵,類別是不知道的)判斷出該物件所屬分類。   

   樸素貝葉斯分類演算法

     分類演算法常用的有很多種,樸素貝葉斯演算法是其中一個比較常用的,之所以稱為樸素貝葉斯演算法主要是因為該演算法最基本的原理是基於貝葉斯定理的,稱為樸素是因為該演算法成立的前提是特徵之間必須得是獨立的。

     樸素貝葉斯(Naive Bayes)演算法理論基礎是基於貝葉斯定理和條件獨立性假設的一種分類方法。 

一、簡述貝葉斯定理

貝葉斯公式如下所示:

                                        

換個比較形象的形式也可如下

          

  公式二很直白地說明的了貝葉斯模型的用途以及其原理。

  通俗地說在 B 出現的前提下 A 出現的概率,等於 A 和 B 都出現的概率除以 B 出現的概率。

  換句話說就是後驗概率和先驗概率的關係。

公式解說:

P(A)是先驗概率,表示每種類別分佈的概率;

P(B|A)是條件概率,表示在某種類別前提下,某事發生的概率;該條件概率可通過統計而得出,這裡需要引入極大似然估計概念,詳見後文。

P(A|B)是後驗概率,表示某事發生了,並且它屬於某一類別的概率,有了這個後驗概率,便可對樣本進行分類。後驗概率越大,說明某事物屬於這個類別的可能性越大,便越有理由把它歸到這個類別下。

二、貝葉斯定理的推導

首先假設A和B為兩個不相互獨立的事件,做圖如下:

                  

由上圖可以看出,在事件B已經發生的情況下,事件A發生的概率為事件A和事件B的交集除以事件B:

                                   P(A|B) = P(A\cap B)/ P(B)

同理,在事件A已經發生的情況下,事件B發生的概率為事件A和事件B的交集除以事件A:

                                   P(B|A) = P(B\cap A)/ P(A)

           公式解說:

           通過上圖圖形面積可以比較形象地得出上面的公式。

          由上面的公式可以得到:

                                              

          上式通過轉換便可得到貝葉斯定理:

                                                   

公式解說:

1、各個事件不相互獨立,注意事件對應的特徵是獨立的。

P(AB) 表示 A,B 事件同時發生的概率,如果 A 和 B 是相互獨立的兩個事件,那麼:

P(A|B) = P(A) 或 P(B|A) = P(B),因此要滿足貝葉斯公式必需得各個事件不相互獨立。

2、條件概率

條件概率是指事件A在另外一個事件B已經發生條件下的發生概率。

條件概率表示為:P(A|B),讀作“在B的條件下A的概率”。若只有兩個事件A,B,那麼,

                                                           

           由上面的公式同樣可得到如下公式,將如下公式進行轉換則也可得出貝葉斯定理:

                                                    

           總的來說,對於貝葉斯定理可通過畫圖的形式直觀地通過面積佔比得出,也可通過嚴格的條件概率定理轉換而來。 

三、貝葉斯定理的例子說明

  •    注:例子引自李燁老師機器學習極簡入門第十二課,付費課程連結

例子1

我們假設:目前的全集是一個小學的小學一年級學生。

這個小學一年級一共100人,其中有男生30人。

穿白襪子的人數一共有20個,這20個人裡面,有5個是男生。

那麼請問,男生裡面穿白襪子的人的出現概率為多少?

這不是廢話嘛,一共30個男生,5個穿白襪子,出現概率是5/30=1/6啊。用得著貝葉斯公式嗎?

如果我已經把人數都告訴你了,當然沒必要算什麼先後驗概率。

但是我先不告訴你人數,我只告訴你:

(下面用 A 指代“穿白襪子”,B 指代“是男生”)

這個小學一年級學生裡面,男生的出現概率是 0.3 —— P(B);

穿白襪子的人的出現概率是0.2 —— P(A);

穿白襪子的人是男生這件事出現的概率是0.25 —— P(B|A)。

請問你,一個人是男生又穿白襪子的出現概率 —— P(A|B)是多少?

這個時候就該貝葉斯公式出場啦:

P(A|B)=P(B|A)P(A)/P(B) ==> P(A|B) = 0.25 * 0.2 / 0.3 = 1/6

另一個簡單的例子

如果你問我,明明人數都知道了,為什麼還要繞個彎算概率?那麼再來看另一個例子。

例子2

把場景從一個小學的一年級轉換為某個大飯店的門口,我們根據以往資料,可以計算出:

所有來吃飯的所有客人中,會有10%的人喝酒 —— P(B),

所有客人中,會有20%的人駕車前來—— P(A),

開車來的客人中,會有5%喝酒 —— P(B|A)。

那麼請問,在這個飯店喝過酒的人裡,仍然會開車的比例—— P(A|B)是多少?

P(A|B)=P(B|A)P(A)/P(B) ==> P(A|B) = 5% * 20% / 10% = 10%

一般化的貝葉斯公式

更一般化的情況,假設事件 A 本身又包含多種可能性,即 A 是一個集合:A(_{1},_{2},_{3},...,_{n}),那麼對於集合中任意的 A_{i},貝葉斯定理可用下式表示:

                                                              

這和之前的簡化版公式:

                                                                       

在使用上有什麼區別呢?

我們還是來看一個例子

例子3

某 AI 公司招聘工程師,來了8名應聘者,這8個人裡,有5個人是985院校畢業的,另外3人不是。

面試官拿出一道演算法題準備考察他們。根據以前的面試經驗,面試官知道:985畢業生做對這道題的概率是80%,非985畢業生做對率只有30%。

現在,面試管從8個人裡隨手指了一個人——小甲,讓 TA 出來做題。結果小甲做對了,那麼請問,小甲是985院校畢業的概率是多大?

  •    筆者解決該題的思路:首先理清該題求小甲所畢業院校實際上是根據輸入的物件特徵(題目做對或做錯為物件特徵),以及不同特徵所對應的分類(物件類別:畢業於985,非畢業於985),還有目前已知的類別對應的特徵概率(先驗概率),求輸入的物件所對應的類別。按上述思路將已知條件轉換為具體數值,代入一般化的貝葉斯公式則可求出輸入物件所對應類別的概率情況,求入的各個類別佔比之和為1。

具體解決方法:

現在我們來看,這道題裡面的小甲的畢業院校有兩種可能,也就是 A={A1,A2},

A1 —— 被選中的人是985畢業的;

A2 —— 被選中的人不是985畢業的。

B —— 被選中的人做對了面試題

P(A1) = 5/8

P(A2) = 3/8

P(B|A1) = 80% = 0.8(985畢業生做對改道面試題的先驗概率)

P(B|A2) = 30% = 0.3(非985畢業生做對改道面試題的先驗概率)

因此:

所以,小甲是985畢業的概率是81.6%,非畢業於985為:1-0.8163

  • 注意:上面的幾個例子中,先驗、後驗事件的概率都是離散的。
  •  事實上貝葉斯定理一樣可以應用於連續概率的情況,假設上面的具體事件的概率不是一個確定值,而是一個分佈函式,也是一樣的。只不過 sum 部分變為了對應函式的積分而已。
  • 連續概率的貝葉斯定理的形式為(下面所說的 A 和 B 對應之前貝葉斯公式中的的 A 與 B):

                                                          

    其中,f(x|y) 是給定 B=y 時,A 的後驗分佈;對應的 f(y|x) 是給定 A=x 時,B 的後驗分佈; f(x) 則是 A 的先驗分佈概率函式。

為了方便起見,這裡的 f 在這些專有名詞中代表不同的函式。

四、樸素貝葉斯分類器

樸素貝葉斯”(Naïve Bayes)既可以是一種演算法——樸素貝葉斯演算法,也可以是一種模型——樸素貝葉斯分類模型(分類器)。

     簡潔版的貝葉斯定理:

                                                             

  •      在之前的幾個例子中,為了便於理解,當 B 作為 A 的條件出現時,我們假定它總共只有一個特徵。
  •      但在實際應用中,很少有一件事只受一個特徵影響的情況,往往影響一件事的因素有多個。假設,影響 B 的因素有 n 個,分別是 b1,b2,…,bn。

則 P(A|B) 可以寫為:

                                                     

  • A 的先驗概率 P(A) 和多個因素的聯合概率 P(b1,b2,…,bn) 都是可以單獨計算的,與 A 和 bi 之間的關係無關,因此這兩項都可以被看作常數。
  • 對於求解 P(A|b1,b2,…,bn),最關鍵的是 P(b1,b2,…,bn|A)。根據鏈式法則,可得:

                                   

  • 上面的求解過程,看起來好複雜,但是,如果從 b1 到 bn這些特徵之間,在概率分佈上是條件獨立的,也就是說每個特徵 bi與其他特徵都不相關。如下圖所示:

                                            

  • 那麼,當 i≠j 時,有 P(bi|A,bj)=P(bi|A) —— 無關條件被排除到條件概率之外,這一點由上圖可以很直觀地看出。因此,當 b1,b2,…,bn 中每個特徵與其他 n-1 個特徵都不相關時,就有:

                                   

  • 注:\prod是希臘字母,即π的大寫形式,在數學中表示求積運算或直積運算,形式上類似於\sum
  • Z 對應 P(_{b1},_{b2},_{b3},...,_{bn})

一款極簡單的樸素貝葉斯分類器

上式中的 b1 到 bn 是特徵(Feature),而 A 則是最終的類別(Class),所以,我們換一個寫法:

                                        

這個公式也就是我們的樸素貝葉斯分類器的模型函式

  • :由該公式可知,當所求的分類不同時,該式 Z 對應 P(b1,b2,…,bn)永遠都是固定不變的,因此當計算物件所屬類別時可直接省去該公式中的分母部分。

它用來做預測時是這樣的:       

  • 有一個樸素貝葉斯分類模型(器),它能夠區分出 k 個類 (c1,c2,…,ck), 用來分類的特徵有 n 個:(F1,F2,…,Fn)。

  • 現在有個樣本 s,我們要用 NB 分類器對它做預測,則需要先提取出這個樣本的所有特徵值 F1到 Fn,將其帶入到下式(因為對應不同分類的分母為固定值,所以公式可簡化為如下所示)中進行 k 次運算:

                                             

  • 然後比較這 k 次的結果,選出使得運算結果達到最大值的那個 cj(j=1,2,…,k)—— 這個 cj 對應的類別就是預測值。求上式的最大值也可以用為如下公式表示:                                                                                                                                                                                                             注:argmax是一種函式,函式y=f(x),x0= argmax(f(x)) 的意思就是引數x0滿足f(x0)為f(x)的最大值;                                                                               

  設我們當前有一個模型,總共只有兩個類別:c1 和 c2;有三個 Feature:F1,F2和F3。F1 有兩種可能性取值:f11 和 f12;F2 有三種可能性取值:f21,f22,f23;F3 也有兩種可能性取值:f31,f32。

那麼對於這個模型,我們要做得,就是通過訓練過程,獲得下面這些值:

                                                                                

                                                                                

把這些概率值都算出來以後,就可以用來做預測了。

上面那些先驗概率和條件概率如何得到呢?通過在訓練樣本中間做統計,就可以直接獲得了!

現在讓我們把上面那個抽象的例子具象化,來看一個新的例子,例子4

假設有一家小公司招收機器學習工程師,為了在更廣泛的範圍內篩選人才,他們寫了一些爬蟲,去各個招聘平臺、職場社交平臺爬取簡歷,然後又寫了一個簡單的分類器,來篩選他們感興趣的候選人。

這個篩選分類器是樸素貝葉斯分類器,訓練資料是現在公司裡的機器學習工程師和之前來面試過這一職位,沒有被錄取的人員的簡歷。

全部資料集如下圖所示:

                                        enter image description here

對應符號表達含義:

                                                   

注:符號“”表示成正比例,值得注意的是P(C=c1|x)與P(C=c2|x)這兩個值之和不為1是因為這裡的計算並沒有帶入分母,這也是主裡引入正比符號的原因,但是不引入分母對於實際分類的對比是沒有影響的。

體現的思路是:

    在訓練樣本的基礎上做一系列概率運算,然後用這些算出來的概率按樸素貝葉斯公式“拼裝”成分類模型——這就成了樸素貝葉斯分類器。

頻率 VS 概率

這也太簡單了吧

樸素貝葉斯分類器這個模型的訓練過程都不需要先從模型函式推導目標函式,再優化目標函式求 Cost 最小的解嗎?樸素貝葉斯公式就是樸素貝葉斯分類器的訓練演算法啦??

上述例子之所以這樣簡單,是因為我們簡單地將頻率當成了概率

但在現實應用中,這種方法往往不可行,因為這種方法實際上默認了“未被觀測到”的就是“出現概率為0”的。這樣做顯然是不合理的。

比如:上面例子中,由於樣本量太小,“博士”候選人只有兩位,而且全部被錄取,因此對於“未被錄用”的情況而言,學歷是博士的條件概率就變成了0。這種情況使得學歷是否是博士成了唯一決定因素,顯然不合理。

雖然我們可以靠做一些簡單的變換——比如加一平滑法(就是把概率計算為:對應類別樣本中該特徵值出現次數 + 1 /對應類別樣本總數)——來規避除以0的情況,但是這樣做的“準確性”仍然非常不可靠。

總結

         全文主要是簡單描述了貝葉斯的基本思想以及推匯出樸素貝葉斯分類器的基本公式如下。對於更加深入的部分詳見下一篇博文。

                         

:本文主要是參考李燁老師的部落格以及個人的理解整理出來的,目的是為了後期以便學習與回顧,參考文獻如下