分類演算法-樸素貝葉斯

娃哈哈店長發表於2020-01-17

樸素貝葉斯分類器(Naive Bayes Classifier, NBC)發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。同時,NBC 模型所需估計的引數很少,對缺失資料不太敏感,演算法也比較簡單。之所以成為“樸素”是因為整個形式化過程只做最原始、最簡單的假設。樸素貝葉斯在資料較少的情況下仍然有效,可以處理多類別問題。

 0x00貝葉斯概論原理

首先,要明白貝葉斯統計方式與統計學中的頻率概念是不同

統計學中的機率從頻率的角度出發,即假定資料遵循某種分佈,我們的目標是確定該分佈的幾個引數,在某個固定的環境一下做模型。而貝葉斯則是根據實際的推理方式來建模。我們拿到的資料,來更新模型對某事件即將發生的可能性的預測結果。

在貝葉斯統計學中,我們使用資料來描述模型,而不是使用模型來描述資料。 貝葉斯定理旨在計算P(A|B)的值,也就是在已知B發生的條件下,A發生的機率是多少。

大多數情況下,B是被觀察事件,比如“昨天下雨了”,A為預測結果“今天會下雨”。對資料探勘來說,B通常是觀察樣本個體,A為被預測個體所屬類別。所以,說簡單一點,貝葉斯就是計算的是:B是A類別的機率。

舉例說明,我們想計算含有單詞drugs的郵件為垃圾郵件的機率。

在這裡,A為“這是封垃圾郵件”。我們先來計算P(A),它也被稱為先驗機率,計算方法是,統計訓練中的垃圾郵件的比例,如果我們的資料集每100封郵件有30封垃圾郵件,P(A)為30/100=0.3。

B表示“該封郵件含有單詞drugs”。類似地,我們可以透過計算資料集中含有單詞drugs的郵件數P(B)。如果每100封郵件有10封包含有drugs,那麼P(B)就為10/100=0.1。

P(B|A)指的是垃圾郵件中含有的單詞drugs的機率,計算起來也很容易,如果30封郵件中有6封含有drugs,那麼P(B|A)的機率為6/30=0.2。

現在,就可以根據貝葉斯定理計算出P(A|B),得到含有drugs的郵件為垃圾郵件的機率。把上面的每一項帶入前面的貝葉斯公式,得到結果為0.6。這表明如果郵件中含有drugs這個詞,那麼該郵件為垃圾郵件的機率為60%。

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot演算法 決策樹 多層感知機


演算法應用示例

下面舉例說明下計算過程,假如資料集中有以下一條用二值特徵表示的資料:[1,0,0,1]。

訓練集中有75%的資料集屬於類別0,25%屬於類別1,且每一個特徵屬於每個類別的機率為:

類別0:[0.3, 0.4, 0.4, 0.7]

類別1:[0.7, 0.3, 0.4, 0.9]

注:上述類別中的小數表示有多少機率該特徵為1,例如0.3表示有30%的資料,特徵1的值為1。

我們來計算一下這條資料屬於類別0的機率。類別為0時,P(C=0) = 0.75。

樸素貝葉斯演算法不用P(D),因此我們不用計算它。

P(D|C=0) = P(D1|C=0) * P(D2|C=0) * P(D3|C=0) * P(D4|C=0)

= 0.3 * 0.6 * 0.6 * 0.7

= 0.0756

現在我們就可以計算該條資料從屬於每個類別的機率。

P(C=0|D) = P(C=0) * P(D|C=0)

= 0.75 * 0.0756

= 0.0567

接著計算類別1的機率,方法同上。可以得到

P(C=1|D) = 0.06615

由此可以推斷這條資料應該分到類別1中。以上就是樸素貝葉斯的全部計算過程。還有一點應該注意,通常, P(C=0|D) + P(C=1|D) 應該等於1。然而在上述中並不是等於1,這是因為我們在計算中省去了公式中的P(D)項。

補充:

上述只考慮了二值特徵屬性(離散屬性)的情況,但是,在實際情況中也會遇上非離散屬性而是連續屬性的情況,這時就該用機率密度函式來計算條件機率P(x|c)。μ(c,i)和 σ(c,i)^2分別是第c類樣本在第i個屬性上取值的均值和方差。則有:

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot 演算法 決策樹 多層感知機

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot 演算法 決策樹 多層感知機

同時,對於樸素貝葉斯還需要說明的一點是:若某種屬性值在訓練集中沒有與某個類同時出現過,則直接基於機率估計公式得出來機率為0,再透過各個屬性機率連乘式計算出的機率也為0,這就導致沒有辦法進行分類了,所以,為了避免屬性攜帶的資訊被訓練集未出現的屬性值“抹去”,在估計機率值時通常要進行“平滑”,常用“拉普拉斯修正”,具體來講,令N表示訓練集D中可能的類別數,Ni表示第i個屬性可能的取值數。

拉普拉斯修正避免了樣本不充分而導致機率估計為零的問題,並且在訓練集樣本變大的時候,修正過程所引入的先驗的影響也會逐漸變得可忽視,使得估計值越來越接近實際機率值。

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot 演算法 決策樹 多層感知機

 0x00樸素貝葉斯

其實,透過上面的例子我們可以知道它能計算個體從屬於給定類別的機率。因此,他能用來分類。

我們用C表示某種類別,用D代表資料集中的一篇文件,來計算貝葉斯公式所要用到的各種統計量,對於不好計算的,做出樸素假設,簡化計算。

P(C)為某一類別的機率,可以從訓練集中計算得到。

P(D)為某一文件的機率,它牽扯到很多特徵,計算很難,但是,可以這樣理解,當在計算文件屬於哪一類別時,對於所有類別來說,每一篇文件都是獨立重複事件,P(D)相同,因此根本不用計算它。稍後看怎樣處理它。

P(D|C)為文件D屬於C類的機率,由於D包含很多特徵,計算起來很難,這時樸素貝葉斯就派上用場了,我們樸素地假定各個特徵是互相獨立的,分別計算每個特徵(D1、D2、D3等)在給定類別的機率,再求他們的積。

上式右側對於二值特徵相對比較容易計算。直接在資料集中進行統計,就能得到所有特徵的機率值。

相反,如果我們不做樸素的假設,就要計算每個類別不同特徵之間的相關性。這些計算很難完成,如果沒有大量的資料或足夠的語言分析模型是不可能完成的。

 0x00貝葉斯概論和統計概論區別

摘抄於 https://blog.csdn.net/huguozhiengr/article...

頻率學派:

頻率學派認為,對於一批樣本,其分佈是確定的,也即是是確定的,只不過未知。為什麼會有這樣的想法?這就要從頻率學派的基本宗旨來看了,頻率學派認為機率即是頻率,某次得到的樣本X只是無數次可能的試驗結果的一個具體實現,樣本中未出現的結果不是不可能出現,只是這次抽樣沒有出現而已,因此綜合考慮已抽取到的樣本X以及未被抽取、實現的結果,可以認為總體分佈是確定的,不過未知,而樣本來自於總體,故其樣本分佈也同樣的特點。  基於此,就可以使用估計方法去推斷。

貝葉斯學派:

貝葉斯學派否定了機率及頻率的觀點,並且反對把樣本X放到“無限多可能值之一”背景下去考慮,既然只得到了樣本X,那麼就只能依靠它去做推斷,而不能考慮那些有可能出現而未出現的結果。與此同時,貝葉斯學派引入了主觀機率的概念,認為一個事件在發生之前,人們應該對它是有所認知的,即中的不是固定的,而是一個隨機變數,並且服從分佈,該分佈稱為“先驗分佈”(指抽樣之前得到的分佈),當得到樣本X後,我們對的分佈則有了新的認識,此時有了更新,這樣就得到了“後驗分佈”(指抽樣之後得到的分佈),此時可以再對做點估計、區間估計,此時的估計不再依賴樣本,完全只依賴的後驗分佈了。

頻率學派對貝葉斯學派的批評

頻率學派對貝葉斯學派的批評主要集中在主觀機率及與之相關的先驗分佈的確定問題上。按頻率學派的觀點,一個事件的機率可以用大量重複試驗之下事件出現的頻率來解釋,這種解釋不取決於主體的認識。頻率學派認為主觀機率不僅難以捉摸,而且與認識主體有關,沒有客觀性,因而也就沒有科學性,這是不可接受的。

針對頻率學派的批評,貝葉斯學派做出了以下回應:

1. 主觀機率事實上是人們常用的概念。例如人們常說:”這個事兒十有八九能成”,這就是人們的一個主觀機率,能做出這樣的推測人們肯定是考慮了一些因素的(比如考慮了做事兒的人,做事的方法等),這是有一定道理的。

 2. 在涉及採取行動並承擔後果的問題上,每個人瞭解的情況不同,對問題所具有的只是也不同,他們採取的最佳行動方案也會不同,在這種情況下,不同的人有不同的先驗分佈是很正常的,要求所謂的“客觀性”反倒沒有意義了。

頻率學派對貝葉斯學派還有一個批評,樣本分佈一般都是在頻率的意義上來解釋的,他們認為,既然貝葉斯學派否定頻率觀點,為何也會用到樣本分佈?對於這個批評,貝葉斯學派確實是難以做出讓人信服的回答,如果做一個徹底的主觀機率論者,就必須把樣本分佈看成刻畫樣本取各種值在主觀上的信服程度,由於樣本是已知的,而貝葉斯學派反對把樣本放到無窮多可能樣本的背景下去考慮這種做法,故而將主觀機率的思想推到極端,貝葉斯學派甚至不能去談論什麼樣本分佈問題。

貝葉斯學派對頻率學派的批評

 1. 關於機率的頻率解釋觀點。許多問題是沒法做重複性試驗、是一次性的,嚴格相同甚至大致相同的條件下的重複事實上是不可能的,比如地震觀測,因此在這種條件下統計概念和方法的頻率解釋完全沒有現實意義。

 2. 頻率學派基於機率的頻率解釋,其所匯出的方法(點估計、區間估計、假設檢驗等)的精度和可靠度也只是大量重複下的平均值,這是在抽樣之前就已經確定的(也就是前文所說

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot 演算法 決策樹 多層感知機

的是確定的),這種不顧實際的樣本值而在事前就規定的精度和可靠度是不合理的,而且往往是實際情況大相庭徑。直觀上人們更傾向於接受的是:統計推斷的精度和可靠性如何,與試驗結果(樣本)有關。

我們來計算一個列題試一試:

基本資料和結果:

分類問題-k-近鄰演算法 樸素貝葉斯 支援向量機 AdaBoot演算法 決策樹 多層感知機

特徵和類別時相互獨立的,

特徵:外貌、性格、身高、上進心

類別:嫁否

嘗試計算男生向女生求婚,但是男的特點不帥、性格不好、矮、不上進、判斷嫁還是不嫁?

分類演算法-樸素貝葉斯

根據樸素貝葉斯演算法得出結果1/48大於1/864,答案時不嫁。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
文章!!首發於我的部落格Stray_Camel(^U^)ノ~YO

相關文章