樸素貝葉斯分類器

2022-09-16 01:54:17 字數 3463 閱讀 2828

所謂"條件概率"(conditional probability),就是指在事件b發生的情況下,事件a發生的概率,用p(a|b)來表示。

根據文氏圖,可以發現

同理可得,

所以,即

其中,p(a)稱為"先驗概率"(prior probability),即在b事件發生之前,我們對a事件概率的乙個判斷;

p(a|b)稱為"後驗概率"(posterior probability),即在b事件發生之後,我們對a事件概率的重新評估;

p(b|a)/p(b)稱為"可能性函式"(likelyhood),這是乙個調整因子,使得預估概率更接近真實概率;

所以,條件概率可以理解成下面的式子:

後驗概率 = 先驗概率 x 調整因子

這就是貝葉斯推斷的含義。我們先預估乙個"先驗概率",然後加入實驗結果,看這個實驗到底是增強還是削弱了"先驗概率",由此得到更接近事實的"後驗概率"。

在這裡,如果"可能性函式"p(b|a)/p(b)>1,意味著"先驗概率"被增強,事件a的發生的可能性變大;如果"可能性函式"=1,意味著b事件無助於判斷事件a的可能性;如果"可能性函式"<1,意味著"先驗概率"被削弱,事件a的可能性變小。

假設某個體有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)

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

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

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

根據某社群**的抽樣統計,該站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多倍,因此判斷這個賬號為真。

另乙個例子摘自維基百科,關於處理連續變數的另一種方法。

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

性別  身高(英呎) 體重(磅)  腳掌(英吋)

男    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.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倍,所以判斷該人為女性。

樸素貝葉斯分類器

p a b frac 類別 結果 a出現在特徵b樣本裡的概率 frac 假設乙個學校裡有60 男生和40 女生。女生穿褲子的人數和穿裙子的人數相等,所有男生穿褲子。隨機看到了乙個穿褲子的學生,那麼這個學生是女生的概率是多少?begin 特徵 穿褲子 類別 女生 p 女生 穿褲子 frac frac ...

樸素貝葉斯分類器

樸素貝葉斯分類器是用來做分類的乙個簡便方法。在貝葉斯公式的基礎上,引人條件獨立的假設,使得貝葉斯分類器具有簡單易行的優點和假設時常與實際不符的缺點。下面簡單介紹一下樸素貝葉斯分類器。首先規定一下資料格式 輸入的每乙個樣本為 其中 i 為樣本編號,x 為樣本的特徵,是乙個 n 維向量,x cdots ...

樸素貝葉斯分類器初探

從期末複習開始頹廢了有一陣 開始接觸機器學習,今天讀了一些部落格 整理一下思路 主要是自己的理解 所以可能沒那麼準確 首先分類器指的是根據乙個事物的一些特徵來判斷事物的類別。對於乙個事物x有類別,那麼對於類別集中最大的p yi x 可以認為x即為yi。所以需要算出每乙個p yi x 但是這很難直接算...