
數(shù)據(jù)挖掘系列樸素貝葉斯分類(lèi)算法原理與實(shí)踐
隔了很久沒(méi)有寫(xiě)數(shù)據(jù)挖掘系列的文章了,今天介紹一下樸素貝葉斯分類(lèi)算法,講一下基本原理,再以文本分類(lèi)實(shí)踐。
一個(gè)簡(jiǎn)單的例子
樸素貝葉斯算法是一個(gè)典型的統(tǒng)計(jì)學(xué)習(xí)方法,主要理論基礎(chǔ)就是一個(gè)貝葉斯公式,貝葉斯公式的基本定義如下:
這個(gè)公式雖然看上去簡(jiǎn)單,但它卻能總結(jié)歷史,預(yù)知未來(lái)。公式的右邊是總結(jié)歷史,公式的左邊是預(yù)知未來(lái),如果把Y看出類(lèi)別,X看出特征,P(Yk|X)就是在已知特征X的情況下求Yk類(lèi)別的概率,而對(duì)P(Yk|X)的計(jì)算又全部轉(zhuǎn)化到類(lèi)別Yk的特征分布上來(lái)。
舉個(gè)例子,大學(xué)的時(shí)候,某男生經(jīng)常去圖書(shū)室晚自習(xí),發(fā)現(xiàn)他喜歡的那個(gè)女生也常去那個(gè)自習(xí)室,心中竊喜,于是每天買(mǎi)點(diǎn)好吃點(diǎn)在那個(gè)自習(xí)室蹲點(diǎn)等她來(lái),可是人家女生不一定每天都來(lái),眼看天氣漸漸炎熱,圖書(shū)館又不開(kāi)空調(diào),如果那個(gè)女生沒(méi)有去自修室,該男生也就不去,每次男生鼓足勇氣說(shuō):“嘿,你明天還來(lái)不?”,“啊,不知道,看情況”。然后該男生每天就把她去自習(xí)室與否以及一些其他情況做一下記錄,用Y表示該女生是否去自習(xí)室,即Y={去,不去},X是跟去自修室有關(guān)聯(lián)的一系列條件,比如當(dāng)天上了哪門(mén)主課,蹲點(diǎn)統(tǒng)計(jì)了一段時(shí)間后,該男生打算今天不再蹲點(diǎn),而是先預(yù)測(cè)一下她會(huì)不會(huì)去,現(xiàn)在已經(jīng)知道了今天上了常微分方法這么主課,于是計(jì)算P(Y=去|常微分方程)與P(Y=不去|常微分方程),看哪個(gè)概率大,如果P(Y=去|常微分方程) >P(Y=不去|常微分方程),那這個(gè)男生不管多熱都屁顛屁顛去自習(xí)室了,否則不就去自習(xí)室受罪了。P(Y=去|常微分方程)的計(jì)算可以轉(zhuǎn)為計(jì)算以前她去的情況下,那天主課是常微分的概率P(常微分方程|Y=去),注意公式右邊的分母對(duì)每個(gè)類(lèi)別(去/不去)都是一樣的,所以計(jì)算的時(shí)候忽略掉分母,這樣雖然得到的概率值已經(jīng)不再是0~1之間,但是其大小還是能選擇類(lèi)別。
后來(lái)他發(fā)現(xiàn)還有一些其他條件可以挖,比如當(dāng)天星期幾、當(dāng)天的天氣,以及上一次與她在自修室的氣氛,統(tǒng)計(jì)了一段時(shí)間后,該男子一計(jì)算,發(fā)現(xiàn)不好算了,因?yàn)榭偨Y(jié)歷史的公式:
這里n=3,x(1)表示主課,x(2)表示天氣,x(3)表示星期幾,x(4)表示氣氛,Y仍然是{去,不去},現(xiàn)在主課有8門(mén),天氣有晴、雨、陰三種、氣氛有A+,A,B+,B,C五種,那么總共需要估計(jì)的參數(shù)有8*3*7*5*2=1680個(gè),每天只能收集到一條數(shù)據(jù),那么等湊齊1680條數(shù)據(jù)大學(xué)都畢業(yè)了,男生打呼不妙,于是做了一個(gè)獨(dú)立性假設(shè),假設(shè)這些影響她去自習(xí)室的原因是獨(dú)立互不相關(guān)的,于是
有了這個(gè)獨(dú)立假設(shè)后,需要估計(jì)的參數(shù)就變?yōu)椋?8+3+7+5)*2 = 46個(gè)了,而且每天收集的一條數(shù)據(jù),可以提供4個(gè)參數(shù),這樣該男生就預(yù)測(cè)越來(lái)越準(zhǔn)了。
樸素貝葉斯分類(lèi)器
講了上面的小故事,我們來(lái)樸素貝葉斯分類(lèi)器的表示形式:
當(dāng)特征為為x時(shí),計(jì)算所有類(lèi)別的條件概率,選取條件概率最大的類(lèi)別作為待分類(lèi)的類(lèi)別。由于上公式的分母對(duì)每個(gè)類(lèi)別都是一樣的,因此計(jì)算時(shí)可以不考慮分母,即
樸素貝葉斯的樸素體現(xiàn)在其對(duì)各個(gè)條件的獨(dú)立性假設(shè)上,加上獨(dú)立假設(shè)后,大大減少了參數(shù)假設(shè)空間?! ?/span>
在文本分類(lèi)上的應(yīng)用
文本分類(lèi)的應(yīng)用很多,比如垃圾郵件和垃圾短信的過(guò)濾就是一個(gè)2分類(lèi)問(wèn)題,新聞分類(lèi)、文本情感分析等都可以看成是文本分類(lèi)問(wèn)題,分類(lèi)問(wèn)題由兩步組成:訓(xùn)練和預(yù)測(cè),要建立一個(gè)分類(lèi)模型,至少需要有一個(gè)訓(xùn)練數(shù)據(jù)集。貝葉斯模型可以很自然地應(yīng)用到文本分類(lèi)上:現(xiàn)在有一篇文檔d(Document),判斷它屬于哪個(gè)類(lèi)別ck,只需要計(jì)算文檔d屬于哪一個(gè)類(lèi)別的概率最大:
在分類(lèi)問(wèn)題中,我們并不是把所有的特征都用上,對(duì)一篇文檔d,我們只用其中的部分特征詞項(xiàng)<t1,t2,...,tnd>(nd表示d中的總詞條數(shù)目),因?yàn)楹芏嘣~項(xiàng)對(duì)分類(lèi)是沒(méi)有價(jià)值的,比如一些停用詞“的,是,在”在每個(gè)類(lèi)別中都會(huì)出現(xiàn),這個(gè)詞項(xiàng)還會(huì)模糊分類(lèi)的決策面,關(guān)于特征詞的選取,我的這篇文章有介紹。用特征詞項(xiàng)表示文檔后,計(jì)算文檔d的類(lèi)別轉(zhuǎn)化為:
注意P(Ck|d)只是正比于后面那部分公式,完整的計(jì)算還有一個(gè)分母,但我們前面討論了,對(duì)每個(gè)類(lèi)別而已分母都是一樣的,于是在我們只需要計(jì)算分子就能夠進(jìn)行分類(lèi)了。實(shí)際的計(jì)算過(guò)程中,多個(gè)概率值P(tj|ck)的連乘很容易下溢出為0,因此轉(zhuǎn)化為對(duì)數(shù)計(jì)算,連乘就變成了累加:
我們只需要從訓(xùn)練數(shù)據(jù)集中,計(jì)算每一個(gè)類(lèi)別的出現(xiàn)概率P(ck)和每一個(gè)類(lèi)別中各個(gè)特征詞項(xiàng)的概率P(tj|ck),而這些概率值的計(jì)算都采用最大似然估計(jì),說(shuō)到底就是統(tǒng)計(jì)每個(gè)詞在各個(gè)類(lèi)別中出現(xiàn)的次數(shù)和各個(gè)類(lèi)別的文檔的數(shù)目:
其中,Nck表示訓(xùn)練集中ck類(lèi)文檔的數(shù)目,N訓(xùn)練集中文檔總數(shù);Tjk表示詞項(xiàng)tj在類(lèi)別ck中出現(xiàn)的次數(shù),V是所有類(lèi)別的詞項(xiàng)集合。這里對(duì)詞的位置作了獨(dú)立性假設(shè),即兩個(gè)詞只要它們出現(xiàn)的次數(shù)一樣,那不管它們?cè)谖臋n的出現(xiàn)位置,它們大概率值P(tj|ck)都是一樣,這個(gè)位置獨(dú)立性假設(shè)與現(xiàn)實(shí)很不相符,比如“放馬屁”跟“馬放屁”表述的是不同的內(nèi)容,但實(shí)踐發(fā)現(xiàn),位置獨(dú)立性假設(shè)得到的模型準(zhǔn)確率并不低,因?yàn)榇蠖鄶?shù)文本分類(lèi)都是靠詞的差異來(lái)區(qū)分,而不是詞的位置,如果考慮詞的位置,那么問(wèn)題將表達(dá)相當(dāng)復(fù)雜,以至于我們無(wú)從下手。
然后需要注意的一個(gè)問(wèn)題是ti可能沒(méi)有出現(xiàn)在ck類(lèi)別的訓(xùn)練集,卻出現(xiàn)在ck類(lèi)別的測(cè)試集合中,這樣因?yàn)門(mén)ik為0,導(dǎo)致連乘概率值都為0,其他特征詞出現(xiàn)得再多,該文檔也不會(huì)被分到ck類(lèi)別,而且在對(duì)數(shù)累加的情況下,0值導(dǎo)致計(jì)算錯(cuò)誤,處理這種問(wèn)題的方法是采樣加1平滑,即認(rèn)為每個(gè)詞在各個(gè)類(lèi)別中都至少出現(xiàn)過(guò)一次,即
下面這個(gè)例子來(lái)自于參考文獻(xiàn)1,假設(shè)有如下的訓(xùn)練集合測(cè)試集:
現(xiàn)在要計(jì)算docID為5的測(cè)試文檔是否屬于China類(lèi)別,首先計(jì)算個(gè)各類(lèi)的概率,P(c=China)=3/4,P(c!=China)=1/4,然后計(jì)算各個(gè)類(lèi)中詞項(xiàng)的概率:
注意分母(8+6)中8表示China類(lèi)的詞項(xiàng)出現(xiàn)的總次數(shù)是8,+6表示平滑,6是總詞項(xiàng)的個(gè)數(shù),然后計(jì)算測(cè)試文檔屬于各個(gè)類(lèi)別的概率:
可以看出該測(cè)試文檔應(yīng)該屬于CHina類(lèi)別。
文本分類(lèi)實(shí)踐
我找了搜狗的搜狐新聞數(shù)據(jù)的歷史簡(jiǎn)潔版,總共包括汽車(chē)、財(cái)經(jīng)、it、健康等9類(lèi)新聞,一共16289條新聞,搜狗給的數(shù)據(jù)是每一篇新聞?dòng)靡粋€(gè)txt文件保存,我預(yù)處理了一下,把所有的新聞文檔保存在一個(gè)文本文件中,每一行是一篇新聞,同時(shí)保留新聞的id,id的首字母表示類(lèi)標(biāo),預(yù)處理并分詞后的示例如下:
我用6289條新聞作為訓(xùn)練集,剩余1萬(wàn)條用于測(cè)試,采用互信息進(jìn)行文本特征的提取,總共提取的特征詞是700個(gè)左右。
分類(lèi)的結(jié)果如下:
總共10000條新聞,分類(lèi)正確的8343條,正確率0.8343,這里主要是演示貝葉斯的分類(lèi)過(guò)程,只考慮了正確率也沒(méi)有考慮其他評(píng)價(jià)指標(biāo),也沒(méi)有進(jìn)行優(yōu)化。貝葉斯分類(lèi)的效率高,訓(xùn)練時(shí),只需要掃描一遍訓(xùn)練集,記錄每個(gè)詞出現(xiàn)的次數(shù),以及各類(lèi)文檔出現(xiàn)的次數(shù),測(cè)試時(shí)也只需要掃描一次測(cè)試集,從運(yùn)行效率這個(gè)角度而言,樸素貝葉斯的效率是最高的,而準(zhǔn)確率也能達(dá)到一個(gè)理想的效果。
我的實(shí)現(xiàn)代碼如下:
代碼里面,計(jì)算特征詞與訓(xùn)練模型、測(cè)試是分開(kāi)的,需要修改main方法,比如計(jì)算特征詞:
訓(xùn)練模型:
預(yù)測(cè)模型:
總結(jié)
本文介紹了樸素貝葉斯分類(lèi)方法,還以文本分類(lèi)為例,給出了一個(gè)具體應(yīng)用的例子,樸素貝葉斯的樸素體現(xiàn)在條件變量之間的獨(dú)立性假設(shè),應(yīng)用到文本分類(lèi)上,作了兩個(gè)假設(shè),一是各個(gè)特征詞對(duì)分類(lèi)的影響是獨(dú)立的,另一個(gè)是詞項(xiàng)在文檔中的順序是無(wú)關(guān)緊要的。樸素貝葉斯的獨(dú)立性假設(shè)在實(shí)際中并不成立,但在分類(lèi)效上依然不錯(cuò),加上獨(dú)立性假設(shè)后,對(duì)與屬于類(lèi)ck的謀篇文檔d,其p(ck|d)往往會(huì)估計(jì)過(guò)高,即本來(lái)預(yù)期p(ck|d)=0.55,而樸素貝葉斯卻計(jì)算得到p(ck|d)=0.99,但這并不影響分類(lèi)結(jié)果,這是樸素貝葉斯分類(lèi)器在文本分類(lèi)上效果優(yōu)于預(yù)期的原因。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話(huà)題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10