版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
使用樸素貝葉斯算法訓(xùn)練分類(lèi)器項(xiàng)目5項(xiàng)目目標(biāo)知識(shí)目標(biāo)掌握先驗(yàn)概率與后驗(yàn)概率的計(jì)算方法。理解樸素貝葉斯算法的原理與流程。了解樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法。掌握樸素貝葉斯算法的Sklearn實(shí)現(xiàn)方法。技能目標(biāo)能夠使用樸素貝葉斯算法訓(xùn)練分類(lèi)模型。能夠編寫(xiě)程序,使用樸素貝葉斯模型進(jìn)行分類(lèi)預(yù)測(cè)。素養(yǎng)目標(biāo)養(yǎng)成分析問(wèn)題、事前規(guī)劃的良好習(xí)慣。了解中國(guó)新技術(shù)的發(fā)展動(dòng)向,增強(qiáng)民族自信心和自豪感。郵件是人們工作、生活和學(xué)習(xí)中經(jīng)常使用的一種方便、快捷的溝通工具。正常郵件能使人們獲得有用信息,垃圾郵件會(huì)干擾人們的正常生活。項(xiàng)目導(dǎo)入小旌發(fā)現(xiàn)很多郵箱都有自動(dòng)攔截垃圾郵件的功能,這是怎么做到的呢?小旌開(kāi)始探索其中的奧秘。項(xiàng)目導(dǎo)入要想攔截垃圾郵件,前提是能夠辨別什么是垃圾郵件什么是正常郵件這正是機(jī)器學(xué)習(xí)中的二分類(lèi)問(wèn)題。項(xiàng)目導(dǎo)入了解到這一點(diǎn)后,小旌也想訓(xùn)練一個(gè)郵件分類(lèi)器,用于區(qū)分正常郵件與垃圾郵件。訓(xùn)練分類(lèi)器的第一步就是收集數(shù)據(jù)。于是,他將自己郵箱的正常郵件和垃圾郵件整理出來(lái),分別存儲(chǔ)于文件夾“normal”和“spam”中。項(xiàng)目導(dǎo)入項(xiàng)目導(dǎo)入正常郵件和垃圾郵件的樣例描述如圖5-1和圖5-2所示。圖5-1“normal-mail1”文件內(nèi)容(正常郵件舉例)圖5-2“spam-mail1”文件內(nèi)容(垃圾郵件舉例)項(xiàng)目導(dǎo)入有了數(shù)據(jù)集之后,接下來(lái)小旌要做的就是找到一個(gè)合適的算法去訓(xùn)練分類(lèi)器。了解到樸素貝葉斯算法中的多項(xiàng)式樸素貝葉斯算法經(jīng)常用于文檔分類(lèi)。于是,他決定使用多項(xiàng)式樸素貝葉斯算法訓(xùn)練模型,并使用該模型對(duì)新的未知類(lèi)別的郵件進(jìn)行預(yù)測(cè)。項(xiàng)目分析按照項(xiàng)目要求,使用樸素貝葉斯算法訓(xùn)練郵件分類(lèi)器的步驟分解如下。第1步:數(shù)據(jù)與停用詞表準(zhǔn)備。導(dǎo)入os模塊,使用os模塊的listdir()函數(shù)獲取正常郵件和垃圾郵件的文件列表,然后導(dǎo)入停用詞表并輸出停用詞表中的停用詞。第2步:數(shù)據(jù)預(yù)處理。多項(xiàng)式樸素貝葉斯算法是通過(guò)提取文檔中有效詞語(yǔ)出現(xiàn)的次數(shù)對(duì)文檔進(jìn)行分類(lèi)的。因此,數(shù)據(jù)預(yù)處理這個(gè)步驟要做的就是將數(shù)據(jù)集中的文檔進(jìn)行處理,得到有效詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)。具體描述如下,首先定義一個(gè)用于提取文檔有效詞語(yǔ)的函數(shù),使用該函數(shù)提取數(shù)據(jù)集中所有的有效詞語(yǔ),然后再?gòu)挠行г~語(yǔ)中找到出現(xiàn)頻頻次最高的10個(gè)詞語(yǔ),最終得到這10個(gè)詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)。第3步:訓(xùn)練分類(lèi)器。首先,導(dǎo)入多項(xiàng)式樸素貝葉斯模型,然后為數(shù)據(jù)集打標(biāo)簽,基于處理后的數(shù)據(jù)與標(biāo)簽,建立多項(xiàng)式樸素貝葉斯模型并進(jìn)行訓(xùn)練。第4步:測(cè)試郵件的類(lèi)別預(yù)測(cè)。準(zhǔn)備兩封測(cè)試郵件(一封是正常郵件,一封是垃圾郵件),然后對(duì)測(cè)試郵件進(jìn)行處理,得到高頻詞語(yǔ)在測(cè)試郵件中出現(xiàn)的次數(shù)。最后,使用訓(xùn)練完成的分類(lèi)器對(duì)測(cè)試郵件進(jìn)行預(yù)測(cè),得到預(yù)測(cè)結(jié)果。項(xiàng)目分析使用樸素貝葉斯算法訓(xùn)練郵件分類(lèi)器,需要先理解樸素貝葉斯算法的基本原理。本項(xiàng)目將對(duì)相關(guān)知識(shí)進(jìn)行介紹,包括先驗(yàn)概率和后驗(yàn)概率,樸素貝葉斯算法的原理與流程,樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法,以及樸素貝葉斯算法的Sklearn實(shí)現(xiàn)方法。項(xiàng)目準(zhǔn)備全班學(xué)生以3~5人為一組進(jìn)行分組,各組選出組長(zhǎng),組長(zhǎng)組織組員掃碼觀看“貝葉斯算法的歷史背景”視頻,討論并回答下列問(wèn)題。問(wèn)題1:關(guān)于貝葉斯算法,數(shù)學(xué)家貝葉斯最初提出的觀點(diǎn)是什么?問(wèn)題2:寫(xiě)出貝葉斯算法的數(shù)學(xué)原理。問(wèn)題3:寫(xiě)出貝葉斯算法的數(shù)學(xué)表達(dá)式。點(diǎn)擊此處播放微課貝葉斯算法的歷史背景樸素貝葉斯算法的基本原理樸素貝葉斯算法的Sklearn實(shí)現(xiàn)/項(xiàng)目導(dǎo)航/5.15.25.1樸素貝葉斯算法的基本原理5.1樸素貝葉斯算法的基本原理14樸素貝葉斯算法的基礎(chǔ)是貝葉斯算法。貝葉斯算法最初是一種研究不確定性的推理方法,不確定性常用貝葉斯概率表示。貝葉斯概率是一種主觀概率,對(duì)它的估計(jì)取決于先驗(yàn)知識(shí)的正確和后驗(yàn)知識(shí)的豐富和準(zhǔn)確。因此,貝葉斯概率常常會(huì)根據(jù)個(gè)人信息的不同而發(fā)生變化。例如,假設(shè)1班和2班即將進(jìn)行一場(chǎng)拔河比賽,不同人對(duì)勝負(fù)的主觀預(yù)測(cè)可能不同,但基本都會(huì)根據(jù)兩班以前的比賽戰(zhàn)況進(jìn)行預(yù)測(cè),那么兩班以前的比賽戰(zhàn)況就是一種先驗(yàn)知識(shí)。如果兩班以前的比賽勝負(fù)次數(shù)是9∶1,那么貝葉斯概率就認(rèn)為1班獲勝的概率是0.9。如果又獲取到另一個(gè)先驗(yàn)知識(shí),1班有兩名主力因受傷不能參加,則貝葉斯概率可能認(rèn)為1班獲勝的概率是0.8??梢?jiàn),雖然是一種主觀概率,但貝葉斯概率按照相關(guān)先驗(yàn)知識(shí)對(duì)事件進(jìn)行推理是一種合理的方法。5.1.1先驗(yàn)概率和后驗(yàn)概率15在一個(gè)空間中,事件A發(fā)生的概率用表示;在事件A發(fā)生的條件下,事件B發(fā)生的概率用表示。那么,就是先驗(yàn)概率(priorprobability),則稱作事件B的后驗(yàn)概率(posteriorprobability)。后驗(yàn)概率的計(jì)算公式為5.1.1先驗(yàn)概率和后驗(yàn)概率16例如,經(jīng)典的拋硬幣實(shí)驗(yàn),當(dāng)實(shí)驗(yàn)發(fā)生一定次數(shù)后,整個(gè)樣本空間中出現(xiàn)正面(F)與反面(R)的概率都趨近于0.5。如果一起拋3枚硬幣,那么,總共會(huì)出現(xiàn){FFF,F(xiàn)FR,F(xiàn)RF,F(xiàn)RR,RRR,RFF,RFR,RRF}8種情況,每種情況出現(xiàn)的概率為1/8?,F(xiàn)在,用A描述同時(shí)拋出3枚硬幣時(shí)第一枚硬幣出現(xiàn)正面的事件,第一枚硬幣出現(xiàn)正面的情況有4種,分別是{FFF,F(xiàn)FR,F(xiàn)RF,F(xiàn)RR},因此,概率為;用B描述硬幣出現(xiàn)反面的事件,拋出3枚硬幣出現(xiàn)反面的情況共有7種,分別是{FFR,F(xiàn)RF,F(xiàn)RR,RRR,RFF,RFR,RRF}。那么,事件A與事件B的交集為{FFR,F(xiàn)RF,F(xiàn)RR},共有3種情況,概率為。因此,在事件A發(fā)生的條件下,事件B發(fā)生的概率,即事件B的后驗(yàn)概率為由于,,則有
,因此有5.1.2樸素貝葉斯算法的原理與流程17在機(jī)器學(xué)習(xí)中,分類(lèi)任務(wù)就是預(yù)測(cè)某個(gè)樣本屬于某個(gè)類(lèi)別的過(guò)程,預(yù)測(cè)時(shí)需要從已有的數(shù)據(jù)集中找到相關(guān)規(guī)律,然后根據(jù)規(guī)律進(jìn)行判定。樸素貝葉斯算法找規(guī)律的原理是根據(jù)數(shù)據(jù)集中的已有數(shù)據(jù)得到先驗(yàn)概率,然后求解待測(cè)樣本屬于每個(gè)類(lèi)別的后驗(yàn)概率,哪個(gè)類(lèi)別概率高就將新樣本判定為哪個(gè)類(lèi)別。下面根據(jù)后驗(yàn)概率的公式,進(jìn)一步進(jìn)行推理。1.樸素貝葉斯算法的原理5.1.2樸素貝葉斯算法的原理與流程18計(jì)算得到的結(jié)果中,哪個(gè)概率大,就將新樣本劃分為哪個(gè)類(lèi)別。假設(shè)數(shù)據(jù)集中有1個(gè)特征和兩個(gè)類(lèi)別標(biāo)簽,特征用x表示,兩個(gè)類(lèi)別分別用和表示。則兩個(gè)類(lèi)別的先驗(yàn)概率分別為和,樣本屬于類(lèi)別和的后驗(yàn)概率分別為1.樸素貝葉斯算法的原理5.1.2樸素貝葉斯算法的原理與流程19現(xiàn)在,將數(shù)據(jù)集進(jìn)行擴(kuò)展,如果數(shù)據(jù)集中有多個(gè)特征(用,,,表示各特征)和多個(gè)類(lèi)別標(biāo)簽(用表示某個(gè)類(lèi)別)。那么,樣本屬于某個(gè)類(lèi)別的后驗(yàn)概率為對(duì)于同一個(gè)數(shù)據(jù)集來(lái)說(shuō),每個(gè)類(lèi)別的后驗(yàn)概率的分母都是相同的。因此,只需要比較分子的大小即可。1.樸素貝葉斯算法的原理5.1.2樸素貝葉斯算法的原理與流程20可見(jiàn),樸素貝葉斯算法是基于貝葉斯算法與特征條件獨(dú)立假設(shè)的分類(lèi)算法,其中“樸素”的含義就是假設(shè)所有特征之間相互獨(dú)立。計(jì)算分子的值時(shí),樸素貝葉斯算法做了一個(gè)假設(shè),即數(shù)據(jù)集中所有特征相互獨(dú)立,特征之間不存在依賴關(guān)系,因此下面的等式成立。而中每一項(xiàng)的值都可以從數(shù)據(jù)集的樣本中獲得,因此,可以計(jì)算出的值。1.樸素貝葉斯算法的原理5.1.2樸素貝葉斯算法的原理與流程21使用樸素貝葉斯算法訓(xùn)練分類(lèi)器的流程如下。(1)設(shè)為一個(gè)待分類(lèi)樣本,,,,為樣本的特征。(2)有類(lèi)別集合。(3)分別計(jì)算每個(gè)類(lèi)別的后驗(yàn)概率,,,,即等價(jià)于計(jì)算,,
,的值。(4)如果
,則。2.樸素貝葉斯算法的流程5.1.2樸素貝葉斯算法的原理與流程22客戶編號(hào)年齡(歲)收入是否為學(xué)生信用是否購(gòu)買(mǎi)平板電腦1<30高否一般否2<30高否好否330~40高否一般是4>40中等否一般是5>40低是一般是6>40低否好否730~40低是好是8<30中等是一般否9<30低是一般是10>40中等是一般是11<30中等是好是1230~40中等否好是1330~40高是一般是14>40中等否好否表5-1購(gòu)買(mǎi)平板電腦的客戶信息表2.樸素貝葉斯算法的流程【例5-1】某商家為了分析顧客是否要購(gòu)買(mǎi)新引進(jìn)的平板電腦,收集了14名客戶的信息,如表5-1所示。試使用樸素貝葉斯算法進(jìn)行計(jì)算,判斷新客戶(年齡<30,收入中等,是學(xué)生,信用一般)是否購(gòu)買(mǎi)該平板電腦。5.1.2樸素貝葉斯算法的原理與流程23【解】數(shù)據(jù)集中每個(gè)樣本有4個(gè)特征,分別為年齡、收入、是否為學(xué)生和信用;類(lèi)別標(biāo)簽共有兩個(gè),分別為會(huì)購(gòu)買(mǎi)平板電腦和不會(huì)購(gòu)買(mǎi)平板電腦,分別用和表示。判定新客戶是否會(huì)購(gòu)買(mǎi)平板電腦是一個(gè)二分類(lèi)問(wèn)題,使用樸素貝葉斯算法計(jì)算的過(guò)程如下。2.樸素貝葉斯算法的流程5.1.2樸素貝葉斯算法的原理與流程24(1)計(jì)算每個(gè)類(lèi)別屬性的先驗(yàn)概率。先驗(yàn)概率的計(jì)算方法為每個(gè)類(lèi)別的樣本數(shù)量除以數(shù)據(jù)集中的樣本總數(shù)量。①購(gòu)買(mǎi)平板電腦的先驗(yàn)概率為;②不購(gòu)買(mǎi)平板電腦的先驗(yàn)概率為。2.樸素貝葉斯算法的流程5.1.2樸素貝葉斯算法的原理與流程25(2)計(jì)算新客戶在每個(gè)類(lèi)別中的后驗(yàn)概率。①新客戶(年齡<30,收入中等,是學(xué)生,信用一般)購(gòu)買(mǎi)該平板電腦的后驗(yàn)概率為等價(jià)于計(jì)算“”的值。其中,
表示購(gòu)買(mǎi)平板電腦的客戶中年齡小于30歲的客戶比例,查數(shù)據(jù)集表中的數(shù)據(jù)可知。同理,其他的數(shù)據(jù)也可以通過(guò)查表得到,于是有2.樸素貝葉斯算法的流程5.1.2樸素貝葉斯算法的原理與流程26②新客戶(年齡<30,收入中等,是學(xué)生,信用一般)不購(gòu)買(mǎi)該平板電腦的后驗(yàn)概率為等價(jià)于計(jì)算“”的值。查數(shù)據(jù)集表中的數(shù)據(jù)可得(3)比較兩個(gè)值的大小。由于0.028大于0.007,故判定新客戶會(huì)購(gòu)買(mǎi)該平板電腦。2.樸素貝葉斯算法的流程(2)計(jì)算新客戶在每個(gè)類(lèi)別中的后驗(yàn)概率。5.1.2樸素貝葉斯算法的原理與流程27優(yōu)點(diǎn)缺點(diǎn)很多實(shí)際問(wèn)題中,特征之間相互獨(dú)立這個(gè)假設(shè)并不成立,如果在特征之間存在相關(guān)性,會(huì)導(dǎo)致分類(lèi)效果下降。①邏輯簡(jiǎn)單、易于實(shí)現(xiàn),算法的復(fù)雜性較??;②算法比較穩(wěn)定,具有較好的健壯性;③對(duì)小規(guī)模的數(shù)據(jù)表現(xiàn)很好,能處理多分類(lèi)任務(wù);④對(duì)缺失數(shù)據(jù)不太敏感,常用于文本分類(lèi);⑤雖然概率估計(jì)可能是有偏差的,但人們大多關(guān)心的不是它的值,而是排列次序,因此有偏差的估計(jì)在某些情況下可能并不重要。3.樸素貝葉斯算法的特點(diǎn)5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法28在使用樸素貝葉斯算法解決實(shí)際問(wèn)題時(shí),很可能會(huì)遇到某個(gè)特征的概率為0的現(xiàn)象。例如,例5-1中,如果要預(yù)測(cè)的新客戶的屬性值為(30<年齡<40,收入中等,是學(xué)生,信用一般),則不購(gòu)買(mǎi)平板電腦的概率計(jì)算如下??梢?jiàn),計(jì)算公式中只要有一項(xiàng)為0,其值必定為0。顯然,概率為0的類(lèi)別肯定是所有類(lèi)別中概率最小的類(lèi)別,但零概率問(wèn)題其實(shí)是因?yàn)閿?shù)據(jù)集中某個(gè)特征屬性值的樣本沒(méi)有出現(xiàn)造成的,不能因?yàn)楦怕适?,就將這個(gè)類(lèi)別排除,這是不合理的。1.零概率問(wèn)題5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法29為解決零概率問(wèn)題,科學(xué)家提出了使用“分子加1,分母加特征個(gè)數(shù)”的方法估計(jì)各個(gè)類(lèi)的后驗(yàn)概率,這個(gè)方法稱為拉普拉斯平滑。使用拉普拉斯平滑判定屬性值為(30<年齡<40,收入中等,是學(xué)生,信用一般)的新客戶的所屬類(lèi)別過(guò)程如下(以下公式分母中的4表示特征的個(gè)數(shù))。如果樣本量很大的情況下,每個(gè)分量的計(jì)數(shù)加1造成的估計(jì)概率變化可以忽略不計(jì),這樣就可以有效地避免零概率問(wèn)題,而且拉普拉斯平滑對(duì)所有類(lèi)的后驗(yàn)概率進(jìn)行計(jì)算,也不會(huì)造成偏向某個(gè)類(lèi)的現(xiàn)象。1.零概率問(wèn)題5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法30實(shí)際分類(lèi)問(wèn)題中,數(shù)據(jù)集的特征往往會(huì)有幾十甚至上百個(gè),每個(gè)特征的條件概率都小于1,多個(gè)小于1的數(shù)相乘,最終的結(jié)果會(huì)是一個(gè)非常小的小數(shù),而這個(gè)小數(shù)有可能會(huì)超出計(jì)算機(jī)浮點(diǎn)數(shù)的表示范圍,出現(xiàn)浮點(diǎn)數(shù)溢出的計(jì)算錯(cuò)誤。2.溢出問(wèn)題5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法31為了解決這個(gè)問(wèn)題,科學(xué)家們修改了條件概率的計(jì)算公式,即對(duì)公式求對(duì)數(shù),從而將各概率相乘變?yōu)橄嗉?。這樣做肯定會(huì)改變計(jì)算結(jié)果,但是樸素貝葉斯算法是通過(guò)比較待分類(lèi)樣本屬于各個(gè)類(lèi)別的概率的大小實(shí)現(xiàn)分類(lèi)的,并不關(guān)注概率本身。只要能比較概率的大小即可,無(wú)須計(jì)算準(zhǔn)確的概率值。這種對(duì)計(jì)算結(jié)果求對(duì)數(shù)的方法在很多機(jī)器學(xué)習(xí)算法中都有應(yīng)用,是一種常用的計(jì)算技巧。2.溢出問(wèn)題5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法32樸素貝葉斯算法的一個(gè)基本假設(shè)就是樣本的各特征之間相互獨(dú)立,從而方便計(jì)算各個(gè)類(lèi)別的概率值。但對(duì)于很多實(shí)際問(wèn)題,樣本的多個(gè)特征之間往往存在一定的聯(lián)系,強(qiáng)制假設(shè)其相互獨(dú)立在一定程度上會(huì)影響模型的預(yù)測(cè)準(zhǔn)確性。為此,人們提出了一種半樸素貝葉斯分類(lèi)模型,該模型允許樣本的部分特征之間存在依賴關(guān)系。半樸素貝葉斯分類(lèi)模型通常采用“獨(dú)依賴估計(jì)”策略表達(dá)特征之間的依賴關(guān)系?!蔼?dú)依賴估計(jì)”策略的基本思想是假設(shè)樣本的每個(gè)特征都可關(guān)聯(lián)一個(gè)對(duì)其產(chǎn)生影響的特征,基于此再進(jìn)行計(jì)算。3.特征獨(dú)立性無(wú)法滿足的問(wèn)題5.1.3樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法33截至2022年,百度已在人工智能領(lǐng)域深耕整十年,在AI專利申請(qǐng)量和授權(quán)量方面連續(xù)四年蟬聯(lián)中國(guó)第一,成為人工智能領(lǐng)域獲得中國(guó)專利獎(jiǎng)獎(jiǎng)項(xiàng)最多、獲獎(jiǎng)級(jí)別最高的高科技企業(yè)。2022年9月20日,百度首次發(fā)布“2022十大科技前沿發(fā)明”,十大發(fā)明具體為跨模態(tài)通用可控AIGC(基于人工智能的內(nèi)容生成)、無(wú)人車(chē)多傳感器融合處理系統(tǒng)、知識(shí)增強(qiáng)大模型、深度學(xué)習(xí)通用異構(gòu)參數(shù)服務(wù)器架構(gòu)、基于AI的生物計(jì)算平臺(tái)PaddleHelix、面向自動(dòng)駕駛的車(chē)路協(xié)同關(guān)鍵技術(shù)、全平臺(tái)量子軟硬一體、數(shù)字人智能化生產(chǎn)、智慧城市全要素雙總線技術(shù)與自動(dòng)駕駛多模態(tài)行人運(yùn)動(dòng)預(yù)測(cè)。百度領(lǐng)先的人工智能技術(shù)正在賦能千行百業(yè),為中國(guó)人工智能產(chǎn)業(yè)發(fā)展提供了自主可控的知識(shí)產(chǎn)權(quán)驅(qū)動(dòng)力。素養(yǎng)之窗(1)簡(jiǎn)述什么是先驗(yàn)概率,什么是后驗(yàn)概率。(2)簡(jiǎn)述使用樸素貝葉斯算法進(jìn)行分類(lèi)的流程。(3)簡(jiǎn)述樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法。課堂訓(xùn)練樸素貝葉斯算法的基本原理先驗(yàn)概率和后驗(yàn)概率樸素貝葉斯算法的原理與流程樸素貝葉斯算法的常見(jiàn)問(wèn)題及解決方法課堂小結(jié)5.2樸素貝葉斯算法的Sklearn實(shí)現(xiàn)
375.2.1Sklearn中的樸素貝葉斯模塊klearn的naive_bayes模塊提供了3種樸素貝葉斯算法,分別是高斯樸素貝葉斯算法、多項(xiàng)式樸素貝葉斯算法和伯努利樸素貝葉斯算法。這3種算法適合應(yīng)用在不同的場(chǎng)景下,在實(shí)際應(yīng)用中應(yīng)根據(jù)特征變量的不同選擇不同的算法。(1)高斯樸素貝葉斯算法通常應(yīng)用于特征變量是連續(xù)變量,符合高斯分布的情況,如人的身高、物體的長(zhǎng)度等。(2)多項(xiàng)式樸素貝葉斯算法通常用于特征變量是離散變量,符合多項(xiàng)式分布的情況,如文檔分類(lèi)中,特征變量為某單詞的出現(xiàn)次數(shù)。(3)伯努利樸素貝葉斯算法通常用于特征變量是布爾變量,符合0/1分布的情況,如文檔分類(lèi)中,特征變量為某單詞是否出現(xiàn)。在實(shí)際應(yīng)用中,多項(xiàng)式樸素貝葉斯算法和伯努利樸素貝葉斯算法經(jīng)常用在文本分類(lèi)中。多項(xiàng)式樸素貝葉斯算法以單詞為單位,計(jì)算某單詞在文件中出現(xiàn)的次數(shù),而伯努利樸素貝葉斯算法以文件為單位,如果某單詞在某文件中出現(xiàn)即為1,不出現(xiàn)即為0。385.2.1Sklearn中的樸素貝葉斯模塊高手點(diǎn)撥395.2.1Sklearn中的樸素貝葉斯模塊Sklearn的naive_bayes模塊提供了3種算法對(duì)應(yīng)的類(lèi),分別為GaussianNB、MultinomialNB和BernoulliNB,可通過(guò)下面語(yǔ)句導(dǎo)入。fromsklearn.naive_bayesimportGaussianNB #導(dǎo)入高斯樸素貝葉斯模塊fromsklearn.naive_bayesimportMultinomialNB #導(dǎo)入多項(xiàng)式樸素貝葉斯模塊fromsklearn.naive_bayesimportBernoulliNB #導(dǎo)入伯努利樸素貝葉斯模塊5.2.2樸素貝葉斯算法的應(yīng)用舉例40【程序分析】
Sklearn中自帶的鳶尾花數(shù)據(jù)集的特征變量有4個(gè),分別為花萼長(zhǎng)度、花萼寬度、花瓣長(zhǎng)度與花瓣寬度,這些特征變量都是連續(xù)變量,應(yīng)該使用高斯樸素貝葉斯算法對(duì)其進(jìn)行建模。【例5-2】使用樸素貝葉斯算法對(duì)Sklearn中自帶的鳶尾花數(shù)據(jù)集進(jìn)行分類(lèi)。41【運(yùn)行結(jié)果】
5.2.2樸素貝葉斯算法的應(yīng)用舉例程序運(yùn)行結(jié)果如圖所示??梢?jiàn),使用樸素貝葉斯算法訓(xùn)練分類(lèi)模型,預(yù)測(cè)準(zhǔn)確率可達(dá)94%。
程序運(yùn)行結(jié)果【參考代碼】#導(dǎo)入需要的庫(kù)fromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.naive_bayesimportGaussianNBfromsklearn.metricsimportaccuracy_score#提取特征,劃分?jǐn)?shù)據(jù)集x,y=load_iris().data,load_iris().targetx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1,test_size=50)#定義與訓(xùn)練模型model=GaussianNB()model.fit(x_train,y_train)#模型評(píng)估pred=model.predict(x_test)print("測(cè)試集數(shù)據(jù)的預(yù)測(cè)標(biāo)簽為",pred)print("測(cè)試集數(shù)據(jù)的真實(shí)標(biāo)簽為",y_test)print("測(cè)試集共有%d條數(shù)據(jù),其中預(yù)測(cè)錯(cuò)誤的數(shù)據(jù)有%d條,預(yù)測(cè)準(zhǔn)確率為%.2f"%(x_test.shape[0],(pred!=y_test).sum(),accuracy_score(y_test,pred)))項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)步驟1導(dǎo)入os模塊。步驟2使用os模塊的listdir()函數(shù)獲取正常郵件和垃圾郵件的文件列表。步驟3輸出正常郵件與垃圾郵件的文件列表。步驟4導(dǎo)入停用詞表并輸出停用詞表中的停用詞。42點(diǎn)擊此處播放微課數(shù)據(jù)與數(shù)據(jù)預(yù)處理1.?dāng)?shù)據(jù)與停用詞表準(zhǔn)備os模塊提供Python程序與操作系統(tǒng)進(jìn)行交互的各種接口。os模塊中的listdir()函數(shù)可返回(當(dāng)前)目錄下的全部文件列表。43項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)(1)郵件中經(jīng)常會(huì)出現(xiàn)一些不能說(shuō)明郵件性質(zhì)的詞,如“的”“在”“于是”和標(biāo)點(diǎn)符號(hào)等。在郵件參與貝葉斯分類(lèi)前,需要對(duì)郵件中的非有效詞進(jìn)行過(guò)濾,這些非有效詞通常稱為停用詞,存儲(chǔ)于文件中。本項(xiàng)目的停用詞存儲(chǔ)于文件“stopwords.txt”中,需要對(duì)其進(jìn)行讀取。(2)開(kāi)始編寫(xiě)程序前,須將本書(shū)配套素材“item5/item5-ss-data”文件夾復(fù)制到當(dāng)前工作目錄中,也可將數(shù)據(jù)文件夾放于其他盤(pán),如果放于其他盤(pán),使用listdir()獲取文件列表時(shí),要指定路徑。指點(diǎn)迷津44項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖所示??梢?jiàn),郵件數(shù)據(jù)集導(dǎo)入成功。郵件數(shù)據(jù)集與停用詞表1.?dāng)?shù)據(jù)與停用詞表準(zhǔn)備【參考代碼】importos#獲取正常郵件和垃圾郵件的文件列表normalFileList=os.listdir("../item5/item5-ss-data/normal/")spamFileList=os.listdir("../item5/item5-ss-data/spam/")print("正常郵件的文件列表",normalFileList)print("垃圾郵件的文件列表",spamFileList)#獲取停用詞表,用于對(duì)停用詞進(jìn)行過(guò)濾stopList=[]forlineinopen("../item5/item5-ss-data/stopwords.txt",encoding='utf-8'):stopList.append(line[:len(line)-1])print("停用詞文件內(nèi)容:",stopList)項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)45步驟1導(dǎo)入中文分詞庫(kù)(如“結(jié)巴分詞”)。步驟2定義getWords()函數(shù),用于提取指定文件(郵件文件)中的詞語(yǔ)。2.?dāng)?shù)據(jù)預(yù)處理項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)46中文句子與英文句子不同,中文句子的詞語(yǔ)與詞語(yǔ)之間沒(méi)有分隔符。如果要對(duì)中文進(jìn)行分詞處理,就需要使用專門(mén)的工具來(lái)完成。目前已有的中文分詞工具中,使用較多的是“結(jié)巴分詞”。“結(jié)巴分詞”在使用之前需要先安裝,安裝步驟如下。(1)在“運(yùn)行”窗口中輸入命令“cmd”,然后單擊“確定”按鈕。(2)在彈出的窗口中輸入命令“pipinstalljieba”,按“Enter”鍵即可自動(dòng)安裝“結(jié)巴分詞”庫(kù)。高手點(diǎn)撥(1)使用strip()函數(shù)移除字符串首尾指定的字符(默認(rèn)為空格或換行符)或字符序列。(2)使用re模塊中的sub()函數(shù)過(guò)濾干擾字符或無(wú)效字符,如數(shù)字0~9或標(biāo)點(diǎn)符號(hào)等。sub(pattern,repl,string)函數(shù)中的參數(shù)pattern表示模式字符串,即需要匹配的字符串;參數(shù)repl表示要替換的字符串(即匹配到pattern后替換為repl);參數(shù)string表示要被處理(查找替換)的原始字符串。例如,字符串s的內(nèi)容為“我的家鄉(xiāng)云南”,執(zhí)行sub(r'[云南]','*',s)后,結(jié)果為“我的家鄉(xiāng)**”。(3)使用“結(jié)巴分詞”工具將句子拆分為一個(gè)個(gè)詞語(yǔ)。(4)使用filter(函數(shù),序列)函數(shù)過(guò)濾長(zhǎng)度為1的單個(gè)字。filter(函數(shù),序列)函數(shù)用于過(guò)濾不符合條件的元素,返回由符合條件元素組成的新列表。第一個(gè)參數(shù)“函數(shù)”可由lambda來(lái)創(chuàng)建。在Python中,lambda用來(lái)創(chuàng)建匿名函數(shù),其函數(shù)體比def簡(jiǎn)單很多。例如,“l(fā)ambdax:x+2”表示x為函數(shù)入口參數(shù),x+2為函數(shù)體。(5)使用停用詞表過(guò)濾停用詞,剩余有效詞語(yǔ)。47項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)提取指定文件中的詞語(yǔ)需要經(jīng)過(guò)以下幾個(gè)步驟。指點(diǎn)迷津項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)482.?dāng)?shù)據(jù)預(yù)處理【參考代碼】#導(dǎo)入需要的庫(kù)fromjiebaimportcut #導(dǎo)入中文分詞庫(kù)fromreimportsub#定義getWords()函數(shù),用于提取指定文件(郵件文件)中的詞語(yǔ)defgetWords(file,stopList):wordsList=[]forlineinopen(file,encoding='utf-8'):line=line.strip()#過(guò)濾干擾字符或無(wú)效字符line=sub(r'[.【】0-9、——,。!\~*]','',line)line=cut(line)#過(guò)濾長(zhǎng)度為1的單個(gè)字line=filter(lambdaword:len(word)>1,line)wordsList.extend(line)#過(guò)濾停用詞,剩余有效詞語(yǔ)words=[]foriinwordsList:ifinotinstopListandi.strip()!=''andi!=None:words.append(i)returnwords項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)49步驟3
使用getWords()函數(shù),提取數(shù)據(jù)集所有文件中的詞語(yǔ),存放于變量allwords中。步驟4將allwords的內(nèi)容進(jìn)行輸出。步驟5提取訓(xùn)練集中出現(xiàn)頻次最高的前10個(gè)詞語(yǔ),并進(jìn)行輸出。2.?dāng)?shù)據(jù)預(yù)處理(1)使用collections模塊中的Counter()函數(shù)獲取allwords中每個(gè)詞語(yǔ)出現(xiàn)的次數(shù)。需要注意的是allwords是一個(gè)二維列表,使用Counter()函數(shù)進(jìn)行計(jì)數(shù)時(shí),需要先使用itertools模塊中的chain()函數(shù)對(duì)allwords進(jìn)行解包。(2)使用most_common()函數(shù)獲取出現(xiàn)頻次最高的前幾個(gè)詞語(yǔ)和對(duì)應(yīng)詞語(yǔ)的出現(xiàn)頻次。需要注意的是most_common()函數(shù)的返回值是一個(gè)字典類(lèi)型,包含詞語(yǔ)與詞語(yǔ)出現(xiàn)的頻次,第一個(gè)元素是詞語(yǔ),第二個(gè)元素是詞語(yǔ)出現(xiàn)的頻次。因此,如果想單獨(dú)輸出詞語(yǔ),還需要使用for語(yǔ)句進(jìn)行提取。例如,“Counter("dadasfafasfa").most_common(2)”語(yǔ)句的輸出結(jié)果為[('a',5),('f',3)],如果需要單獨(dú)輸出a和f,可使用for語(yǔ)句“[w[0]forwinCounter("dadasfafasfa").most_common(2)]”進(jìn)行提取。50項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)提取訓(xùn)練集中出現(xiàn)頻次最高的前10個(gè)詞語(yǔ)需要經(jīng)過(guò)以下兩個(gè)步驟。指點(diǎn)迷津51項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖所示。訓(xùn)練集中所有的有效詞語(yǔ)與出現(xiàn)頻次最高的前10個(gè)詞語(yǔ)2.?dāng)?shù)據(jù)預(yù)處理【參考代碼】#導(dǎo)入需要的庫(kù)fromcollectionsimportCounterfromitertoolsimportchain#提取訓(xùn)練集所有文件中的詞語(yǔ)allwords=[]forspamfileinspamFileList:words=getWords("../item5/item5-ss-data/spam/"+spamfile,stopList)allwords.append(words)fornormalfileinnormalFileList:words=getWords("../item5/item5-ss-data/normal/"+normalfile,stopList)allwords.append(words)print("訓(xùn)練集中所有的有效詞語(yǔ)列表:")print(allwords)#提取訓(xùn)練集中出現(xiàn)頻次最高的前10個(gè)詞語(yǔ)frep=Counter(chain(*allwords)) #獲取有效詞語(yǔ)出現(xiàn)的頻次topTen=frep.most_common(10) #獲取出現(xiàn)頻次最高的前10個(gè)詞語(yǔ)和對(duì)應(yīng)的頻次topWords=[w[0]forwintopTen] #獲取出現(xiàn)頻次最高的前10個(gè)詞語(yǔ)print("訓(xùn)練集中出現(xiàn)頻次最高的前10個(gè)詞語(yǔ):")print(topWords)指點(diǎn)迷津程序中可能會(huì)用到map()函數(shù)。map()函數(shù)是Python內(nèi)置的高階函數(shù),它接收一個(gè)函數(shù)(函數(shù)可使用lambda定義)和一個(gè)列表,并通過(guò)把函數(shù)依次作用在列表的每個(gè)元素上,得到一個(gè)新的列表并返回。需要注意的是map()函數(shù)不改變?cè)械牧斜?,而是返回一個(gè)新列表。52項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)步驟6獲取10個(gè)高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)。2.?dāng)?shù)據(jù)預(yù)處理53項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)表5-2每封郵件中高頻詞語(yǔ)出現(xiàn)次數(shù)統(tǒng)計(jì)郵件高頻詞語(yǔ)修改期刊主要欄目投稿郵箱xxcom論文附件spam-mail1.txt0111111100spam-mail2.txt0111111100spam-mail3.txt0111111100spam-mail4.txt0111111100spam-mail5.txt0111111100spam-mail6.txt0111111100spam-mail7.txt0111111100spam-mail8.txt0111111100spam-mail9.txt0111111100normal-mail1.txt0000000000normal-mail2.txt1000000011normal-mail3.txt2000000011normal-mail4.txt1000000011normal-mail5.txt1000000011normal-mail6.txt1000000011normal-mail7.txt2000000010normal-mail8.txt1000000011normal-mail9.txt10000000112.?dāng)?shù)據(jù)預(yù)處理【運(yùn)行結(jié)果】
程序運(yùn)行結(jié)果如圖所示。運(yùn)行結(jié)果描述了10個(gè)高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù),具體描述如表5-2所示。高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)【參考代碼】#導(dǎo)入需要的庫(kù)importnumpyasnpvector=[]forwordsinallwords:temp=list(map(lambdax:words.count(x),topWords)) #每個(gè)高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)vector.append(temp)vector=np.array(vector)print("10個(gè)高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù):")print(vector)項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)54步驟1導(dǎo)入多項(xiàng)式樸素貝葉斯模型。步驟2為數(shù)據(jù)集打標(biāo)簽,1表示垃圾郵件,0表示正常郵件。步驟3將高頻詞語(yǔ)在每封郵件中出現(xiàn)的次數(shù)作為特征變量,賦值給x,將標(biāo)簽賦值給y。步驟4建立多項(xiàng)式樸素貝葉斯模型并進(jìn)行訓(xùn)練。點(diǎn)擊此處播放微課訓(xùn)練分類(lèi)器3.訓(xùn)練分類(lèi)器55項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)【參考代碼】fromsklearn.naive_bayesimportMultinomialNB#為數(shù)據(jù)集打標(biāo)簽,1表示垃圾郵件,0表示正常郵件target=np.array([1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0])x,y=vector,target#建立多項(xiàng)式樸素貝葉斯模型并進(jìn)行訓(xùn)練model=MultinomialNB()model.fit(x,y)3.訓(xùn)練分類(lèi)器項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)56步驟1
準(zhǔn)備測(cè)試郵件。測(cè)試郵件共有兩封,分別命名為“normal-test.txt”與“spam-test.txt”,保存在文件夾“test”中。其中,“normal-test.txt”為正常郵件,“spam-test.txt”為垃圾郵件。兩封郵件的具體內(nèi)容如圖a和圖b所示。圖a
“normal-test”文件內(nèi)容圖b
“spam-test”文件內(nèi)容點(diǎn)擊此處播放微課測(cè)試郵件的類(lèi)別預(yù)測(cè)4.測(cè)試郵件的類(lèi)別預(yù)測(cè)項(xiàng)目實(shí)施——樸素貝葉斯算法實(shí)現(xiàn)郵件分類(lèi)57步驟2獲取測(cè)試郵件的文件列表。步驟3調(diào)用getWords()函數(shù),分別提取測(cè)試文件中的詞語(yǔ)。步驟4提取10個(gè)高頻詞語(yǔ)分別在郵件中出現(xiàn)的次數(shù)。步驟5使用訓(xùn)練完成的分類(lèi)器進(jìn)行預(yù)測(cè)。步驟6輸出預(yù)測(cè)結(jié)果。4.測(cè)試郵
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 慢性胃炎患者的護(hù)理
- 2026年中國(guó)電子工程設(shè)計(jì)院股份有限公司河南分公司招聘?jìng)淇碱}庫(kù)及完整答案詳解一套
- 2026年云南昆華醫(yī)院投資管理有限公司(云南新昆華醫(yī)院)招聘?jìng)淇碱}庫(kù)及完整答案詳解1套
- 2026年樂(lè)清市市政公用事業(yè)發(fā)展有限公司公開(kāi)招聘工作人員備考題庫(kù)及1套參考答案詳解
- 2026年中關(guān)村第三小學(xué)永新分校招聘?jìng)淇碱}庫(kù)及完整答案詳解1套
- 2026年廣業(yè)環(huán)保集團(tuán)“環(huán)聚英才、綠動(dòng)未來(lái)”招聘?jìng)淇碱}庫(kù)帶答案詳解
- 2026年上海市醫(yī)療保險(xiǎn)事業(yè)管理中心招聘輔助人員的備考題庫(kù)有答案詳解
- 2026年安龍國(guó)家山地戶外運(yùn)動(dòng)示范公園招聘2名會(huì)計(jì)備考題庫(kù)及一套完整答案詳解
- 2026年寧波舜瑞產(chǎn)業(yè)控股集團(tuán)有限公司招聘?jìng)淇碱}庫(kù)附答案詳解
- 2026年南陽(yáng)市中醫(yī)院公開(kāi)招聘高層次人才55人備考題庫(kù)帶答案詳解
- 2025年廣東省茂名農(nóng)墾集團(tuán)公司招聘筆試題庫(kù)附帶答案詳解
- 礦業(yè)企業(yè)精益管理實(shí)施方案與案例
- 2024年水利部黃河水利委員會(huì)事業(yè)單位招聘高校畢業(yè)生考試真題
- 2025四川成都益民集團(tuán)所屬企業(yè)招聘財(cái)務(wù)綜合崗等崗位28人考試重點(diǎn)題庫(kù)及答案解析
- 腦缺血與急性腦梗死的影像學(xué)表現(xiàn)教學(xué)設(shè)計(jì)
- 中國(guó)倉(cāng)儲(chǔ)物流中心運(yùn)營(yíng)管理現(xiàn)狀與發(fā)展趨勢(shì)研究報(bào)告
- 2025年中共湛江市委巡察服務(wù)保障中心、湛江市清風(fēng)苑管理中心公開(kāi)招聘事業(yè)編制工作人員8人備考題庫(kù)完整參考答案詳解
- 2025年鄉(xiāng)鎮(zhèn)衛(wèi)生院黨風(fēng)廉政建設(shè)自查報(bào)告
- GB/T 4139-2012釩鐵
- 精品課程《人文地理學(xué)》完整版
- 某電子制造公司鈑金工程圖紙繪制規(guī)范
評(píng)論
0/150
提交評(píng)論