我個人認為,在數(shù)據(jù)挖掘領(lǐng)域裹刮,分類算法是最為重要音榜。它根據(jù)以往的數(shù)據(jù)來對新的數(shù)據(jù)做預(yù)測。垃圾郵件判斷捧弃,潛在用戶挖掘等都會用到分類算法赠叼。今天把總結(jié)樸素貝葉斯算法的學(xué)習(xí)心得。
#Bayes是誰#
Thomas Bayes违霞,英國數(shù)學(xué)家嘴办。約1701年出生于倫敦,做過神甫买鸽。1742年成為英國皇家學(xué)會會員涧郊。1761年4月7日逝世。貝葉斯在數(shù)學(xué)方面主要研究概率論眼五。他首先將歸納推理法用于概率論基礎(chǔ)理論妆艘,并創(chuàng)立了貝葉斯統(tǒng)計理論,對于統(tǒng)計決策函數(shù)看幼、統(tǒng)計推斷批旺、統(tǒng)計的估算等做出了貢獻。
#Bayes定理#
通俗來說就是:****
已知事件B的發(fā)生概率P(B)
已知在事件B已經(jīng)發(fā)生的情況下诵姜,事件A發(fā)生的概率P(A|B)
則可根據(jù)Bayes定理汽煮,計算事件A發(fā)生的條件下,事件B發(fā)生的概率P(B|A)。
計算方法為:
P(B|A)=P(A|B)× P(B)/ P(A)
#NaiveBayes分類算法實例#
門診部一共就診了6位患者暇赤,情況如下:
這時心例,來了第七位患者,一位“打噴嚏的工人”翎卓,請推斷他得了啥病契邀。
這就是一個分類問題“诩模現(xiàn)狀把所有患者分成了三類“感冒”“過敏”“腦震蕩”失暴,我們的目的是把“打噴嚏的工人”分到這三類中的一類中。具體做法為:根據(jù)Bayes定理微饥,計算這個“打噴嚏的工人”患三種疾病的概率逗扒。
P(感冒|打噴嚏&工人)
= P(打噴嚏&工人|感冒)×P(感冒) / P(打噴嚏&工人)
= P(打噴嚏|感冒)× P(工人|感冒)× P(感冒) / P(打噴嚏)× P(工人)
= (2/3 × 1/3 × 1/2)/ (1/2 × 1/3)
= 66.7%
解釋:
- '&'項可以分成兩個,是因為“癥狀”變量和“職業(yè)”變量是相互獨立的欠橘,沒什么聯(lián)系
- 感冒的有3個矩肩,其中打噴嚏的2個,所以P(打噴嚏|感冒)=2/3
- 感冒的有3個肃续,其中工人1個黍檩,所以P(工人|感冒)=1/3
- 一共六個人,感冒3個始锚,所以P(感冒)=1/2
- 一共六個人刽酱,打噴嚏的3個,所以P(打噴嚏)=1/2
- 一共六個人瞧捌,其中工人2個棵里,所以P(工人)=1/3
按照這個方法,計算“打噴嚏的工人”另外兩種疾病的概率姐呐;
P(過敏|打噴嚏&工人)
= P(打噴嚏&工人|過敏)×P(過敏) / P(打噴嚏&工人)
= P(打噴嚏|過敏)× P(工人|過敏)× P(過敏) / P(打噴嚏)× P(工人)
= (1 × 0 × 1/6)/ (1/2 × 1/3)
= 0%
P(腦震蕩|打噴嚏&工人)
= P(打噴嚏&工人|腦震蕩)×P(腦震蕩) / P(打噴嚏&工人)
= P(打噴嚏|腦震蕩)× P(工人|腦震蕩)× P(腦震蕩) / P(打噴嚏)× P(工人)
= (0 × 1/2 × 1/3)/ (1/2 × 1/3)
= 0%
可見殿怜,“打噴嚏的工人”患感冒概率66.7%,初步判斷應(yīng)該是感冒曙砂。但是一般的分類器都要根據(jù)具體業(yè)務(wù)設(shè)置閾值头谜,對于人命關(guān)天的事,最好嚴格一些鸠澈,比如95%以上才做出判斷柱告,那么這里最好的答案應(yīng)該是“機器無法判斷,建議去讓醫(yī)生看看”款侵。
#補充說明#
- 算法叫做樸素貝葉斯(NaiveBayes)末荐,是因為算法是在太簡單了
- ‘&’能分開兩個概率相乘是因為變量的獨立性,如果不獨立的話新锈,這樣計算會有誤差
- 分母項 P(打噴嚏)× P(工人)在每次計算中都一樣甲脏,可以只互相比較分子計算的結(jié)果作出判斷
- 例子中最初的6個病人的數(shù)據(jù)叫做訓(xùn)練集
#訓(xùn)練集樣本較小情況下的概率調(diào)整#
P(打噴嚏|過敏)和P(工人|過敏)分別為1,0,實際中不可能是這樣的块请,因為沒有什么是一定不發(fā)生娜氏,也沒有什么100%發(fā)生。出現(xiàn)這種情況是因為我們的樣本太少墩新,如果樣本足夠多贸弥,概率會相對靠譜。
在起步階段海渊,樣本就是很少绵疲,為了避免0,1這種極端概率臣疑,需要人為做一些數(shù)學(xué)變換盔憨。
比如,對過敏來說讯沈,每個癥狀的初始概率都為50%郁岩,當來了一個過敏病人,如果出現(xiàn)打噴嚏缺狠,那么P(打噴嚏|過敏)的概率就提升一點點问慎,反之如果不打噴嚏,則P(打噴嚏|過敏)的概率就下降一點點挤茄。
這樣使得每一個概率都變得在(0如叼,1)之間平滑變化,對其他的變量也這樣處理驮樊。
在《Programming Collective Intelligence》這本書中給出了這個變換的公式薇正,我套用到過敏來說就是:
P(打噴嚏|過敏)調(diào)整 =(1×0.5 + 打噴嚏數(shù) × P(打噴嚏|過敏)) / (1+打噴嚏數(shù))
所以調(diào)整后的概率為:
P(打噴嚏|過敏)調(diào)整 = (0.5 + 3 ×1 )/(1+3 )=87.5%
P(工人|過敏)調(diào)整 = (0.5 + 2 ×0)/ (1+2)=16.7%
所以,在上例中計算第二種疾病的時候囚衔,如果用調(diào)整后的概率結(jié)果如下:
P(過敏|打噴嚏&工人)
= P(打噴嚏&工人|過敏)×P(過敏) / P(打噴嚏&工人)
= P(打噴嚏|過敏)× P(工人|過敏)× P(過敏) / P(打噴嚏)× P(工人)
= (87.5% × 16.7% × 1/6)/ (1/2 × 1/3)
= 14.6%
****#連續(xù)變量處理#****
對于上例來說挖腰,不論是職業(yè)還是癥狀,都是離散變量练湿,也就是取值數(shù)有限猴仑,這樣都可以通過數(shù)個數(shù)的方式來計算概率(古典概率模型),但是如果出現(xiàn)連續(xù)型變量就不能靠數(shù)個數(shù)了肥哎,比如身高辽俗,可以有175cm 176cm 176.1cm 176.11cm,無窮盡……
- 處理方式一:離散化
身高來說篡诽,可以就精確到cm崖飘,那么基于現(xiàn)實世界從40cm(嬰兒)到230cm(姚明)基本就夠用了,可以數(shù)個數(shù)杈女。要么就分段【小于100cm】【100-150cm】【150-180cm】……這樣也可以朱浴。 - 處理方式二:利用變量的分布來計算概率
一般來說自然界中的大部分變量都是符合正態(tài)分布的吊圾,正態(tài)分布是一個鐘型曲線,概率意義是翰蠢,一次實驗取到均值附近概率最大项乒,去到遠離均值的值的概率越來越小。那么可以計算樣本的均值和標準差梁沧,利用Z值【(實際值-均值)/標準差】檀何,查標準正態(tài)分布表,查出取到每個樣本值的概率廷支。
當然频鉴,如果明確知道變量屬于某個其他分布,如泊松分布酥泞,那么就直接用分布函數(shù)求概率即可砚殿。
#數(shù)學(xué)表達以備裝B之需#