樸素貝葉斯 naive bayes

背景案例

幾年前割粮,J.K. 羅琳(憑借《哈利波特》出名)試著做了件有趣的事。她以 Robert Galbraith 的化名寫(xiě)了本名叫《The Cuckoo’s Calling》的書(shū)级零。盡管該書(shū)得到一些不錯(cuò)的評(píng)論,但是大家都不太重視它滞乙,直到 Twitter 上一個(gè)匿名的知情人士說(shuō)那是 J.K. Rowling 寫(xiě)的妄讯。《倫敦周日泰晤士報(bào)》找來(lái)兩名專家對(duì)《杜鵑在呼喚》和 Rowling 的《偶發(fā)空缺》以及其他幾名作者的書(shū)進(jìn)行了比較酷宵。分析結(jié)果強(qiáng)有力地指出羅琳就是作者,《泰晤士報(bào)》直接詢問(wèn)出版商情況是否屬實(shí)躬窜,而出版商也證實(shí)了這一說(shuō)法浇垦,該書(shū)在此后一夜成名。

這就是一個(gè)文本分類預(yù)測(cè)的例子荣挨,接下來(lái)我們看看樸素貝葉斯是怎么做的男韧。

貝葉斯定理

貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理為基礎(chǔ)默垄,故統(tǒng)稱為貝葉斯分類此虑。
這個(gè)定理解決了現(xiàn)實(shí)生活里經(jīng)常遇到的問(wèn)題:已知某條件概率,如何得到兩個(gè)事件交換后的概率口锭,也就是在已知P(A|B)的情況下如何求得P(B|A)朦前。

條件概率:


貝葉斯定理之所以有用,是因?yàn)槲覀冊(cè)谏钪薪?jīng)常遇到這種情況:我們可以很容易直接得出P(A|B)鹃操,P(B|A)則很難直接得出韭寸,但我們更關(guān)心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路荆隘。

貝葉斯定理:

樸素貝葉斯

樸素貝葉斯之所以樸素恩伺,是因?yàn)槠渌枷牒軜闼兀⑽?naive .....(不禁想到某位長(zhǎng)者)椰拒。在文本分類上晶渠,其忽略了詞序凰荚,記錄詞頻。樸素貝葉斯的思想基礎(chǔ)是這樣的:對(duì)于給出的待分類項(xiàng)褒脯,求解在此項(xiàng)出現(xiàn)的條件下各個(gè)類別出現(xiàn)的概率便瑟,哪個(gè)最大,就認(rèn)為此待分類項(xiàng)屬于哪個(gè)類別憨颠。

優(yōu)點(diǎn):

  • 易執(zhí)行
  • 特征空間大
  • 有效

缺點(diǎn):

  • 無(wú)語(yǔ)義分析

樸素貝葉斯分類的正式定義如下

  1. 設(shè)

    為一個(gè)待分類項(xiàng)胳徽,而每個(gè)a為x的一個(gè)特征屬性。

  2. 有類別集合

    爽彤。

  3. 計(jì)算

    养盗。

  4. 如果

    ,則
    适篙。

那么現(xiàn)在的關(guān)鍵就是如何計(jì)算第3步中的各個(gè)條件概率往核。我們可以這么做:

  • 找到一個(gè)已知分類的待分類項(xiàng)集合,這個(gè)集合叫做訓(xùn)練樣本集嚷节。

  • 統(tǒng)計(jì)得到在各類別下各個(gè)特征屬性的條件概率估計(jì)聂儒。即

  • 如果各個(gè)特征屬性是條件獨(dú)立的,則根據(jù)貝葉斯定理有如下推導(dǎo):
  • 因?yàn)榉帜笇?duì)于所有類別為常數(shù)硫痰,因?yàn)槲覀冎灰獙⒎肿幼畲蠡钥神没椤S忠驗(yàn)楦魈卣鲗傩允菞l件獨(dú)立的,所以有:


流程

第一階段——準(zhǔn)備工作階段效斑,這個(gè)階段的任務(wù)是為樸素貝葉斯分類做必要的準(zhǔn)備非春,主要工作是根據(jù)具體情況確定特征屬性,并對(duì)每個(gè)特征屬性進(jìn)行適當(dāng)劃分缓屠,然后由人工對(duì)一部分待分類項(xiàng)進(jìn)行分類奇昙,形成訓(xùn)練樣本集合。這一階段的輸入是所有待分類數(shù)據(jù)敌完,輸出是特征屬性和訓(xùn)練樣本储耐。這一階段是整個(gè)樸素貝葉斯分類中唯一需要人工完成的階段,其質(zhì)量對(duì)整個(gè)過(guò)程將有重要影響滨溉,分類器的質(zhì)量很大程度上由特征屬性什湘、特征屬性劃分及訓(xùn)練樣本質(zhì)量決定。

第二階段——分類器訓(xùn)練階段业踏,這個(gè)階段的任務(wù)就是生成分類器禽炬,主要工作是計(jì)算每個(gè)類別在訓(xùn)練樣本中的出現(xiàn)頻率及每個(gè)特征屬性劃分對(duì)每個(gè)類別的條件概率估計(jì),并將結(jié)果記錄勤家。其輸入是特征屬性和訓(xùn)練樣本腹尖,輸出是分類器。這一階段是機(jī)械性階段,根據(jù)前面討論的公式可以由程序自動(dòng)計(jì)算完成热幔。

第三階段——應(yīng)用階段乐设。這個(gè)階段的任務(wù)是使用分類器對(duì)待分類項(xiàng)進(jìn)行分類,其輸入是分類器和待分類項(xiàng)绎巨,輸出是待分類項(xiàng)與類別的映射關(guān)系近尚。這一階段也是機(jī)械性階段,由程序完成场勤。

Example

病人分類的例子

讓我從一個(gè)例子開(kāi)始講起戈锻,你會(huì)看到貝葉斯分類器很好懂,一點(diǎn)都不難和媳。
某個(gè)醫(yī)院早上收了六個(gè)門(mén)診病人格遭,如下表。

    癥狀  職業(yè)   疾病
  打噴嚏 護(hù)士   感冒 
  打噴嚏 農(nóng)夫   過(guò)敏 
  頭痛  建筑工人 腦震蕩 
  頭痛  建筑工人 感冒 
  打噴嚏 教師   感冒 
  頭痛  教師   腦震蕩

現(xiàn)在又來(lái)了第七個(gè)病人留瞳,是一個(gè)打噴嚏的建筑工人拒迅。請(qǐng)問(wèn)他患上感冒的概率有多大?

根據(jù)貝葉斯定理:
P(A|B) = P(B|A) P(A) / P(B)

可得

P(感冒|打噴嚏x建筑工人) 
    = P(打噴嚏x建筑工人|感冒) x P(感冒) 
    / P(打噴嚏x建筑工人)

假定"打噴嚏"和"建筑工人"這兩個(gè)特征是獨(dú)立的她倘,因此璧微,上面的等式就變成了

P(感冒|打噴嚏x建筑工人) 
    = P(打噴嚏|感冒) x P(建筑工人|感冒) x P(感冒) 
    / P(打噴嚏) x P(建筑工人)

這是可以計(jì)算的

P(感冒|打噴嚏x建筑工人) 
    = 0.66 x 0.33 x 0.5 / 0.5 x 0.33 
    = 0.66

因此,這個(gè)打噴嚏的建筑工人硬梁,有66%的概率是得了感冒前硫。同理,可以計(jì)算這個(gè)病人患上過(guò)敏或腦震蕩的概率荧止。比較這幾個(gè)概率开瞭,就可以知道他最可能得什么病。
這就是貝葉斯分類器的基本方法:在統(tǒng)計(jì)資料的基礎(chǔ)上罩息,依據(jù)某些特征,計(jì)算各個(gè)類別的概率个扰,從而實(shí)現(xiàn)分類瓷炮。

實(shí)戰(zhàn)

我們有一組郵件,分別由同一家公司的兩個(gè)人撰寫(xiě)其中半數(shù)的郵件递宅。我們的目標(biāo)是僅根據(jù)郵件正文區(qū)分每個(gè)人寫(xiě)的郵件娘香。

先給你一個(gè)字符串列表。每個(gè)字符串代表一封經(jīng)過(guò)預(yù)處理的郵件的正文办龄;提供代碼烘绽,用來(lái)將數(shù)據(jù)集分解為訓(xùn)練集和測(cè)試集。

樸素貝葉斯特殊的一點(diǎn)在于俐填,這種算法非常適合文本分類安接。在處理文本時(shí),常見(jiàn)的做法是將每個(gè)單詞看作一個(gè)特征英融,這樣就會(huì)有大量的特征盏檐。此算法的相對(duì)簡(jiǎn)單性和樸素貝葉斯獨(dú)立特征的這一假設(shè)歇式,使其能夠出色完成文本的分類。此項(xiàng)目使用 python 的 sklearn包胡野,然后使用樸素貝葉斯根據(jù)作者對(duì)郵件進(jìn)行分類材失。

#!/usr/bin/python

    
import sys
from time import time
sys.path.append("../tools/")
from email_preprocess import preprocess
from sklearn.metrics import accuracy_score

### features_train and features_test are the features for the training
### and testing datasets, respectively
### labels_train and labels_test are the corresponding item labels
features_train, features_test, labels_train, labels_test = preprocess()

#########################################################
### main code ###
from sklearn.naive_bayes import GaussianNB

# 創(chuàng)建分類器
clf = GaussianNB()
t0 = time()
clf.fit(features_train, labels_train)
print "training time:", round(time()-t0, 3), "s"

t1 = time()
# 進(jìn)行預(yù)測(cè)
pred = clf.predict(features_test)
print "predicting time:", round(time()-t1, 3), "s"

# 輸出預(yù)測(cè)準(zhǔn)確率
print accuracy_score(pred,labels_test)

#########################################################



結(jié)果

no. of Chris training emails: 7936
no. of Sara training emails: 7884
training time: 2.396 s
predicting time: 0.464 s

accuracy: 0.973265073948

參考文章

算法雜貨鋪——分類算法之樸素貝葉斯分類(Naive Bayesian classification))
樸素貝葉斯分類器的應(yīng)用
Intro to machine learning

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市硫豆,隨后出現(xiàn)的幾起案子龙巨,更是在濱河造成了極大的恐慌,老刑警劉巖熊响,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旨别,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡耘眨,警方通過(guò)查閱死者的電腦和手機(jī)昼榛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剔难,“玉大人胆屿,你說(shuō)我怎么就攤上這事∨脊” “怎么了非迹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纯趋。 經(jīng)常有香客問(wèn)我憎兽,道長(zhǎng),這世上最難降的妖魔是什么吵冒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任纯命,我火速辦了婚禮,結(jié)果婚禮上痹栖,老公的妹妹穿的比我還像新娘亿汞。我一直安慰自己,他們只是感情好揪阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布疗我。 她就那樣靜靜地躺著,像睡著了一般南捂。 火紅的嫁衣襯著肌膚如雪吴裤。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天溺健,我揣著相機(jī)與錄音麦牺,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枕面,可吹牛的內(nèi)容都是我干的愿卒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼潮秘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琼开!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枕荞,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柜候,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后躏精,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渣刷,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年矗烛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辅柴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞭吃,死狀恐怖碌嘀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歪架,我是刑警寧澤股冗,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站和蚪,受9級(jí)特大地震影響止状,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攒霹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一怯疤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧催束,春花似錦旅薄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)洛口。三九已至矫付,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間第焰,已是汗流浹背买优。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杀赢。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓烘跺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親脂崔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子滤淳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 寫(xiě)在前面的話:哈嘍,大家早安砌左、午安脖咐、晚安嘍,歡迎大家指點(diǎn)汇歹,也希望我的內(nèi)容可以溫暖屁擅、幫助同在學(xué)習(xí)路上的人們~ 再次申...
    keepStriving閱讀 9,242評(píng)論 1 9
  • 寫(xiě)在前面的話:哈嘍,大家早安产弹、午安派歌、晚安嘍,歡迎大家指點(diǎn)痰哨,也希望我的內(nèi)容可以溫暖胶果、幫助同在學(xué)習(xí)路上的人們~ 正文開(kāi)...
    keepStriving閱讀 11,565評(píng)論 0 10
  • 忘光了概率統(tǒng)計(jì)的知識(shí)還想學(xué)樸素貝葉斯算法?這一篇就是為你準(zhǔn)備的作谭。雖然如此稽物,作為初學(xué)者,別指望 5 分鐘就能完全理解...
    kamidox閱讀 2,691評(píng)論 4 7
  • 0折欠、寫(xiě)在前面的話 我個(gè)人一直很喜歡算法一類的東西贝或,在我看來(lái)算法是人類智慧的精華,其中蘊(yùn)含著無(wú)與倫比的美感锐秦。而每次將...
    chaaffff閱讀 746評(píng)論 0 1
  • 又聽(tīng)了什么歌 是不是過(guò)去聽(tīng)完就傷心的歌 現(xiàn)在來(lái)聽(tīng)已經(jīng)沒(méi)有什么感覺(jué) 與誰(shuí)有了距離的阻隔 不再為了靠近一點(diǎn)點(diǎn)就出謀劃策...
    洛之亦閱讀 157評(píng)論 0 3