ML學習筆記(一):naive bayas

學習了一個多學期的機器學習和數據挖掘的基本知識,經過一次考試認識到,目前知識還處於混亂狀態,藉此平臺整理,加深記憶。

如果中間過程沒有看懂,我相信我的例子一定能讓你透徹理解。例子需要動手計算,相信算完再回顧前面的理論就會有新的理解。例子在第五部分。

1. 簡介

naive bayes分類器是一種很簡單的概率分類器。主要理論是bayes理論,以及對特徵間強獨立性的假設。就是假設所有事件互相獨立。舉例來說就是,決定是否買電腦時,我的年齡和我的收入是完全獨立的。年齡不會影響收入。

優點:Simple and fast
缺點:在現實問題中,對於各個特徵完全獨立的假設可能不準確。

2. 概率模型

naive bayes分類器是一個條件概率模型,該分類器如下面公式所示:

問題描述:X=(x(1),x(2)...,x(m)) 其中m代表特徵的數量。P(Ck|X) 代表分到第k類的概率。如果滿足:

P(Ci|X)P(Cj|X)  ji,1jK
則將X分類到i類。
也就是說,選擇概率最大的那一類將X歸入。

基於Bayes理論,條件概率可以被表示爲

p(Ck|X)=p(Ck)p(X|Ck)p(x)
或者表示爲
posterior=priorlikelihoodevidence

下面討論此公式的計算問題。
<1>在實際使用中p(x) 可以不用計算,因爲對於所有類來說p(x) 相同。

<2>p(X|Ck) 的計算。由概率論中的知識我們可以知道這是一個已知CkX 的聯合分佈,對於計算這個聯合分佈是十分困難的。所以這就是naive bayes的奇妙之處,下面是詳細的公式推導,使用naive bayes的特徵獨立性,得出來p(X|Ck) 的結果。

p(x(1),x(2)...,x(m)|Ck)=p(x(1),x(2)...,x(m),Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)p(x(2)...,x(m),Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)p(x(2)|...,x(m),Ck)...p(xm,Ck)p(Ck)

=p(x(1)|x(2)...,x(m),Ck)p(x(2)|...,x(m),Ck)...p(xm|Ck)  (1)

由於naive bayes假設所有特徵獨立,此時條件概率等於無條件概率即:
p(x(1)|x(2))=p(x(1),x(2))p(x(2))=p(x(1))p(x(2))p(x(2))=p(x(1))

所以(1)可以化簡爲:
p(x(1),x(2)...,x(m)|Ck)=j=1mp(x(j)|Ck)

但是讀者可能又會問,p(x(j)|Ck) 怎麼計算呢,這個你看到第四部分,參數估計就明白了。這裏是原理,請耐心閱讀。

<3>P(Ck) 的計算。
P(C_k)爲先驗概率,此概率一半爲已知。

<4>接下來就是結論,編程的時候就是使用的這一部分,綜上naive bayes分類器可以表示爲:

ŷ =argmaxk1...kP(Ck)j=1mP(xj|Ck)

3. 事件模型

這一部分是針對上一部分P(xj|Ck) 的進一步討論,在實際計算時,我們往往將P(xj|Ck) 假定爲某一種分佈,例如:

  • 正態分佈

    P(x=v|c)=12πσ2ce(vμc)22σ2c
  • Bernoulli分佈

    P(x=l|Ck)=plkj(1pkj)1l  l=0,1

4. 參數估計

上一部分,就是說如果碰到實際問題,可以假設概率就是這個樣子。但是如果不能假設成爲這個樣子,我們就需要用到參數估計的知識了。現在我們再回顧一下我們要計算的公式:

P(Ck)j=1mP(x(j)|Ck)

所以本節分爲兩個部分

part one: P(Ck) 的估計

P̂ (Y=Ck)=ni=1I(yi=Ck)+λn+Kλ

這個式子就是說,我這一類的先驗概率可以表示爲,我所有已知數據中是這一類的數量/總的數量。其中λ 是平滑參數,主要使用意義在part two中防止分母爲0,這個值是我們預先取定的,如果λ=1 則稱爲拉普拉斯平滑。

part two:P(x(j)|Ck) 的估計

P(x(j)|Ck)=i=1nI(x(j)i=l,yi=Ck)+λni=1I(yi=Ck)+Sjλ

這個式子就是說,P(x(j)=l|Ck) 可以用屬於這一類,並且x(j) 屬性爲l 的數據的數量/這一類數據的數量。其中λ 主要是爲了防止分母爲0,因爲某一類可能一個數據也沒有。Sj 是這一個屬性x(j) 有幾種情況,比如是否買電腦問題的年齡屬性,這個屬性可能取值爲年輕,年老,中年。那麼此時Sj=3

5. 例子:是否購買電腦

好了,講了這麼多,如果沒有例子我也是謎的。下面這個例子相信能讓你對我上面總結的各種公式有深刻的理解。

例:現在我們已經有了一些購買電腦人的信息如下圖,使用naive bayes模型,預測wxc575843同學他會不會買電腦,此同學的屬性爲X=(age=youth,income=medium,student=yes,credit_rating=fair)
不使用平滑即λ=0

解:
這裏一共要計算兩個值,P(buy|X)P(not buy|X)

<1>P(buy|X)=P(buy)P(age=youth|buy)P(income=medium|buy)P(student=yes|buy)P(credit_rating=fair|buy)

這裏我們可以數出,14個人中有9個買了電腦,所以P(buy)=914
在9個買了電腦的人中age=youth的有兩個所以P(age=youth|buy)=29
在9個買了電腦的人中income=medium的有4個所以P(income=medium|buy)=49
同理
P(student=yes|buy)=69
P(credit_rating=fair|buy)=69
所以P(buy|X)=91429496969=0.02822

<2>P(not buy|X)=P(not buy)P(age=youth|not buy)P(income=medium|not buy)P(student=yes|not buy)P(credit_rating=fair|not buy)

同<1>中的計算方式可得P(not buy|X)=51435251525=0.006757

綜上所述:P(not buy|X)< P(buy|X)$所以wxc575843同學會買電腦。

6. python 代碼實現

這一部分是用代碼實現naive bayes分類器。此部分待我整理好之後,這兩天發出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章