樸素貝葉斯應用(轉載)

樸素貝葉斯分類器的應用

 

做者: 阮一峯html

日期: 2013年12月16日算法

網址:http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html函數

生活中不少場合須要用到分類,好比新聞分類、病人分類等等。網站

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

分類法

1、病人分類的例子日誌

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

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

  症狀  職業   疾病ip

  打噴嚏 護士   感冒
  打噴嚏 農夫   過敏
  頭痛  建築工人 腦震盪
  頭痛  建築工人 感冒
  打噴嚏 教師   感冒
  頭痛  教師   腦震盪 get

如今又來了第七個病人,是一個打噴嚏的建築工人。請問他患上感冒的機率有多大?

根據貝葉斯定理

 P(A|B) = P(B|A) 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%的機率是得了感冒。同理,能夠計算這個病人患上過敏或腦震盪的機率。比較這幾個機率,就能夠知道他最可能得什麼病。

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

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

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

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

因爲 P(F1F2...Fn) 對於全部的類別都是相同的,能夠省略,問題就變成了求

 P(F1F2...Fn|C)P(C)

的最大值。

樸素貝葉斯分類器則是更進一步,假設全部特徵都彼此獨立,所以

 P(F1F2...Fn|C)P(C)
  = P(F1|C)P(F2|C) ... P(Fn|C)P(C)

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

雖然"全部特徵彼此獨立"這個假設,在現實中不太可能成立,可是它能夠大大簡化計算,並且有研究代表對分類結果的準確性影響不大。

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

3、帳號分類的例子

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

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

  C0 = 0.89

  C1 = 0.11

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

    F1: 日誌數量/註冊天數
    F2: 好友數量/註冊天數
    F3: 是否使用真實頭像(真實頭像爲1,非真實頭像爲0)

    F1 = 0.1
    F2 = 0.2
    F3 = 0

請問該帳號是真實帳號仍是虛假帳號?

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

    P(F1|C)P(F2|C)P(F3|C)P(C)

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

一個技巧是將連續值變爲離散值,計算區間的機率。好比將F1分解成[0, 0.05]、(0.05, 0.2)、[0.2, +∞]三個區間,而後計算每一個區間的機率。在咱們這個例子中,F1等於0.1,落在第二個區間,因此計算的時候,就使用第二個區間的發生機率。

根據統計資料,可得:

  P(F1|C0) = 0.5, P(F1|C1) = 0.1
  P(F2|C0) = 0.7, P(F2|C1) = 0.2
  P(F3|C0) = 0.2, P(F3|C1) = 0.9

所以,

  P(F1|C0) P(F2|C0) P(F3|C0) P(C0)
    = 0.5 x 0.7 x 0.2 x 0.89
    = 0.0623

  P(F1|C1) P(F2|C1) P(F3|C1) P(C1)
    = 0.1 x 0.2 x 0.9 x 0.11
    = 0.00198

能夠看到,雖然這個用戶沒有使用真實頭像,可是他是真實帳號的機率,比虛假帳號高出30多倍,所以判斷這個帳號爲真。

4、性別分類的例子

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

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

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

  男    6       180     12
  男    5.92     190     11
  男    5.58     170     12
  男    5.92     165     10
  女    5       100     6
  女    5.5      150     8
  女    5.42     130     7
  女    5.75     150     9

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

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

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

這裏的困難在於,因爲身高、體重、腳掌都是連續變量,不能採用離散變量的方法計算機率。並且因爲樣本太少,因此也沒法分紅區間計算。怎麼辦?

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

好比,男性的身高是均值5.85五、方差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倍,因此判斷該人爲女性。

(完)

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息