學習了一個多學期的機器學習和數據挖掘的基本知識,經過一次考試認識到,目前知識還處於混亂狀態,藉此平臺整理,加深記憶。
如果中間過程沒有看懂,我相信我的例子一定能讓你透徹理解。例子需要動手計算,相信算完再回顧前面的理論就會有新的理解。例子在第五部分。
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) j≠i,1≤j≤K
則將X分類到i類。
也就是說,選擇概率最大的那一類將X歸入。
基於Bayes理論,條件概率可以被表示爲
p(Ck|X)=p(Ck)p(X|Ck)p(x)
或者表示爲
posterior=prior∗likelihoodevidence
下面討論此公式的計算問題。
<1>在實際使用中
p(x) 可以不用計算,因爲對於所有類來說
p(x) 相同。
<2>p(X|Ck) 的計算。由概率論中的知識我們可以知道這是一個已知Ck 時X 的聯合分佈,對於計算這個聯合分佈是十分困難的。所以這就是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分類器可以表示爲:
ŷ =argmaxk∈1...kP(Ck)∏j=1mP(xj|Ck)
3. 事件模型
這一部分是針對上一部分P(xj|Ck) 的進一步討論,在實際計算時,我們往往將P(xj|Ck) 假定爲某一種分佈,例如:
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)=914∗29∗49∗69∗69=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)=514∗35∗25∗15∗25=0.006757
綜上所述:P(not buy|X)< P(buy|X)$所以wxc575843同學會買電腦。
6. python 代碼實現
這一部分是用代碼實現naive bayes分類器。此部分待我整理好之後,這兩天發出。