樸素貝葉斯分類器的應用

jopen 10年前發布 | 13K 次閱讀 樸素貝葉斯

        生活中很多場合需要用到分類,比如新聞分類、病人分類等等。

        本文介紹樸素貝葉斯分類器(Naive Bayes classifier),它是一種簡單有效的常用分類算法。

樸素貝葉斯分類器的應用

        一、病人分類的例子

        讓我從一個例子開始講起,你會看到貝葉斯分類器很好懂,一點都不難。

        某個醫院早上收了六個門診病人,如下表。

癥狀職業疾病

打噴嚏護士感冒

打噴嚏農夫過敏

頭痛建筑工人腦震蕩

頭痛建筑工人感冒

打噴嚏教師感冒

頭痛教師腦震蕩

        現在又來了第七個病人,是一個打噴嚏的建筑工人。請問他患上感冒的概率有多大?

        根據貝葉斯定理

P(AB) = P (BA) P (A) / P (B)

        可得

P(感冒打噴嚏x建筑工人)

= P (打噴嚏x建筑工人感冒) x P (感冒)

/ P (打噴嚏x建筑工人)

        假定"打噴嚏"和"建筑工人"這兩個特征是獨立的,因此,上面的等式就變成了

P(感冒打噴嚏x建筑工人)

= P (打噴嚏感冒) x P (建筑工人感冒) x P (感冒)

/ P (打噴嚏) x P (建筑工人)

        這是可以計算的。

P(感冒打噴嚏x建筑工人)

= 0.66 x 0.33 x 0.5 / 0.5 x 0.33

= 0.66

        因此,這個打噴嚏的建筑工人,有 66% 的概率是得了感冒。同理,可以計算這個病人患上過敏或腦震蕩的概率。比較這幾個概率,就可以知道他最可能得什么病。

        這就是貝葉斯分類器的基本方法:在統計資料的基礎上,依據某些特征,計算各個類別的概率,從而實現分類。

        二、樸素貝葉斯分類器的公式

        假設某個體有n項特征(Feature),分別為F1、F2、...、Fn。現有m個類別(Category),分別為C1、C2、...、Cm。貝葉斯分類器就是計算出概率最大的那個分類,也就是求下面這個算式的最大值:

P(CF1F2...Fn)

= P (F1F2...FnC)P(C) / P (F1F2...Fn)

        由于 P (F1F2...Fn) 對于所有的類別都是相同的,可以省略,問題就變成了求

P(F1F2...FnC)P(C)

        的最大值。

        樸素貝葉斯分類器則是更進一步,假設所有特征都彼此獨立,因此

P(F1F2...FnC)P(C)

= P (F1C)P(F2C) ... P (FnC)P(C)

        上式等號右邊的每一項,都可以從統計資料中得到,由此就可以計算出每個類別對應的概率,從而找出最大概率的那個類。

        雖然"所有特征彼此獨立"這個假設,在現實中不太可能成立,但是它可以大大簡化計算,而且有研究表明對分類結果的準確性影響不大。

        下面再通過兩個例子,來看如何使用樸素貝葉斯分類器。

        三、賬號分類的例子

        本例摘自張洋的《算法雜貨鋪----分類算法之樸素貝葉斯分類》

        根據某社區網站的抽樣統計,該站 10000 個賬號中有 89% 為真實賬號(設為C),11% 為虛假賬號(設為C1)。

C0 = 0.89

C1 = 0.11

        接下來,就要用統計資料判斷一個賬號的真實性。假定某一個賬號有以下三個特征:

F1: 日志數量/注冊天數

F2: 好友數量/注冊天數

F3: 是否使用真實頭像(真實頭像為1,非真實頭像為0)

F1 = 0.1

F2 = 0.2

F3 = 0

        請問該賬號是真實賬號還是虛假賬號?

        方法是使用樸素貝葉斯分類器,計算下面這個計算式的值。

P(F1C)P(F2C)P(F3C)P(C)

        雖然上面這些值可以從統計資料得到,但是這里有一個問題:F1 和 F2 是連續變量,不適宜按照某個特定值計算概率。

        一個技巧是將連續值變為離散值,計算區間的概率。比如將 F1 分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三個區間,然后計算每個區間的概率。在我們這個例子中,F1 等于 0.1,落在第二個區間,所以計算的時候,就使用第二個區間的發生概率。

        根據統計資料,可得:

P(F1C0) = 0.5, P (F1C1) = 0.1

P(F2C0) = 0.7, P (F2C1) = 0.2

P(F3C0) = 0.2, P (F3C1) = 0.9

        因此,

P(F1C0) P (F2C0) P (F3C0) P (C0)

= 0.5 x 0.7 x 0.2 x 0.89

= 0.0623

P(F1C1) P (F2C1) P (F3C1) P (C1)

= 0.1 x 0.2 x 0.9 x 0.11

= 0.00198

        可以看到,雖然這個用戶沒有使用真實頭像,但是他是真實賬號的概率,比虛假賬號高出 30 多倍,因此判斷這個賬號為真。

        四、性別分類的例子

        本例摘自維基百科,關于處理連續變量的另一種方法。

        下面是一組人類身體特征的統計資料。

性別身高(英尺)體重(磅)腳掌(英寸)

男 6 18012

男 5.9219011

男 5.5817012

男 5.9216510

女 5 1006

女 5.5 1508

女 5.421307

女 5.751509

        已知某人身高 6 英尺、體重 130 磅,腳掌 8 英寸,請問該人是男是女?

        根據樸素貝葉斯分類器,計算下面這個式子的值。

P(身高性別) x P (體重性別) x P (腳掌性別) x P (性別)

        這里的困難在于,由于身高、體重、腳掌都是連續變量,不能采用離散變量的方法計算概率。而且由于樣本太少,所以也無法分成區間計算。怎么辦?

        這時,可以假設男性和女性的身高、體重、腳掌都是正態分布,通過樣本計算出均值和方差,也就是得到正態分布的密度函數。有了密度函數,就可以把值代入,算出某一點的密度函數的值。

        比如,男性的身高是均值 5.855、方差 0.035 的正態分布。所以,男性的身高為 6 英尺的概率等于 1.5789(大于 1 并沒有關系,因為這里是密度函數的值)。

樸素貝葉斯分類器的應用

        有了這些數據以后,就可以計算性別的分類了。

P(身高=6 男) x P (體重=130 男) x P (腳掌=8 男) x P (男)

= 6.1984 x e-9

P(身高=6 女) x P (體重=130 女) x P (腳掌=8 女) x P (女)

= 5.3778 x e-4

        可以看到,女性的概率比男性要高出將近 10000 倍,所以判斷該人為女性。

                    <span id="shareA4" class="fl">                          </span> 

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!