用樸素貝葉斯算法,一鍵破解垃圾郵件的秘密語言!
本文從貝葉斯算法切入,深入講解了其原理,以垃圾郵件為例,分析其應(yīng)用步驟和使用邊界,就讓我們一起來看看吧!
樸素貝葉斯算法,這個(gè)名字聽起來有些“樸素”,但其實(shí)它是一個(gè)非常實(shí)用的機(jī)器學(xué)習(xí)算法。在機(jī)器學(xué)習(xí)領(lǐng)域,樸素貝葉斯算法就像一個(gè)勤勞的園丁,幫助我們?cè)跀?shù)據(jù)花園里分類和預(yù)測(cè)各種花卉的品種。
它的核心思想是通過已知的部分信息,來推測(cè)未知的信息。那它到底是如何“施展拳腳”進(jìn)行垃圾郵件分類的呢?我們來一起深度分析一下。
一、樸素貝葉斯算法的原理
樸素貝葉斯算法基于兩個(gè)關(guān)鍵概念:貝葉斯定理和條件獨(dú)立性假設(shè)。
先說說貝葉斯定理。貝葉斯是由一名英國(guó)數(shù)學(xué)家提出來的,貝葉斯就是這個(gè)數(shù)學(xué)家的名字。同時(shí)它也是概率論中的一個(gè)重要公式,用于計(jì)算在已知一些相關(guān)事件發(fā)生的情況下,另一事件發(fā)生的概率。具體來說,貝葉斯定理的公式如下:
P(A|B) = [P(B|A) * P(A)] / P(B)
這里,P(A|B) 是在已知 B 發(fā)生的情況下 A 發(fā)生的概率(后驗(yàn)概率),P(B|A) 是在已知 A 發(fā)生的情況下 B 發(fā)生的概率(條件概率),P(A) 和 P(B) 分別是 A 和 B 的先驗(yàn)概率。
- 后驗(yàn)概率:已經(jīng)看到某個(gè)事情發(fā)生了,再判斷這個(gè)事情發(fā)生原因的概率;
- 條件概率:事件 B 在另一個(gè)事件 A 已經(jīng)發(fā)生條件下的概率;
- 先驗(yàn)概率:事件 A 或 事件 B 是根據(jù)經(jīng)驗(yàn)來判斷發(fā)生的概率。
再來說說條件獨(dú)立性假設(shè)。
這是樸素貝葉斯算法的“樸素”之處。它假設(shè)所有特征在類別給定的情況下都是相互獨(dú)立的。
那特征之間的相互獨(dú)立是什么意思呢?
簡(jiǎn)單來說,一個(gè)人的性別是女性和她是中國(guó)國(guó)籍這兩項(xiàng)特征就是相互獨(dú)立的,因?yàn)樗膰?guó)籍不會(huì)影響到她的性別。那特征之間不相互獨(dú)立也很好理解了,像是一個(gè)人的身高會(huì)影響他衣服的尺碼,所以身高和衣服的尺碼就不是相互獨(dú)立的。
二、樸素貝葉斯案例之垃圾郵件分類
通常在職場(chǎng)中,我們都需要用到郵件發(fā)送一些重要文件或者通知,也會(huì)用自己的郵件賬號(hào)來注冊(cè)網(wǎng)站,然而這些網(wǎng)站同時(shí)會(huì)推給我們很多營(yíng)銷類的或詐騙類的郵件,令我們非常困擾。解決這個(gè)垃圾郵件的問題就可以使用今天的主角——樸素貝葉斯算法來做預(yù)測(cè)和分類,將垃圾郵件送到垃圾箱,進(jìn)而實(shí)現(xiàn)將一些垃圾郵箱拉黑。具體分為三步:
1. 步驟一:數(shù)據(jù)預(yù)處理
- 收集數(shù)據(jù):獲取一個(gè)包含已標(biāo)記為垃圾郵件和非垃圾郵件的郵件數(shù)據(jù)集。
- 數(shù)據(jù)清洗:去除無關(guān)字符(如標(biāo)點(diǎn)符號(hào)、數(shù)字等),并將所有文本轉(zhuǎn)換為小寫。
- 文本分詞:將每封郵件分割成單詞或短語列表。
- 構(gòu)建詞典:統(tǒng)計(jì)所有郵件中出現(xiàn)過的唯一單詞,并為每個(gè)單詞分配一個(gè)唯一的索引。
2. 步驟二:學(xué)習(xí)或訓(xùn)練
計(jì)算先驗(yàn)概率 P(Y):對(duì)于每個(gè)類別(垃圾郵件和非垃圾郵件),計(jì)算其在數(shù)據(jù)集中的比例。
假設(shè)我們有1000封郵件,其中200封是垃圾郵件,那么:
P(Spam) = 200 / 1000 = 0.2
P(Not Spam) = 800 / 1000 = 0.8
計(jì)算條件概率 P(Xi|Y):對(duì)于每個(gè)類別和每個(gè)單詞 i,在該類別下的郵件中,計(jì)算該單詞出現(xiàn)的頻率。
例如,如果我們有一個(gè)單詞 “free”,它在垃圾郵件中出現(xiàn)了50次,在非垃圾郵件中出現(xiàn)了10次,那么:
P(“free”|Spam) = 50 / (總垃圾郵件單詞數(shù))P(“free”|Not Spam) = 10 / (總非垃圾郵件單詞數(shù))
3. 步驟三:預(yù)測(cè)或分類
對(duì)于新的未知郵件,首先進(jìn)行同樣的數(shù)據(jù)預(yù)處理步驟(清洗、分詞等)。
使用訓(xùn)練得到的先驗(yàn)概率和條件概率,計(jì)算郵件屬于每個(gè)類別的后驗(yàn)概率 P(Y|X)。假設(shè)新郵件只包含單詞 “free”,我們可以通過以下公式計(jì)算其作為垃圾郵件的概率:
P(Spam|”free”) = [P(“free”|Spam) * P(Spam)] / P(“free”)
其中,P(“free”) 是 “free” 在整個(gè)郵件數(shù)據(jù)集中的概率,可以通過 Spam 和 Not Spam 中 “free” 的概率相加并歸一化得到。
比較 P(Spam|X) 和 P(Not Spam|X),選擇后驗(yàn)概率更大的類別作為郵件的預(yù)測(cè)類別。
在這個(gè)例子中,樸素貝葉斯算法通過計(jì)算每個(gè)單詞在不同類別郵件中出現(xiàn)的條件概率,以及各類別的先驗(yàn)概率,來判斷新郵件是否為垃圾郵件。
三、樸素貝葉斯算法的應(yīng)用步驟
接下來,我們來看看樸素貝葉斯算法的步驟。以幫我們鞏固一下知識(shí)。主要包括以下三步:
- 數(shù)據(jù)預(yù)處理:清洗和整理數(shù)據(jù),將非數(shù)值數(shù)據(jù)轉(zhuǎn)換為數(shù)值形式,可能需要進(jìn)行標(biāo)準(zhǔn)化或歸一化。
- 學(xué)習(xí)或訓(xùn)練:使用訓(xùn)練數(shù)據(jù)集來計(jì)算每個(gè)類別的先驗(yàn)概率 P(Y) 和每個(gè)特征在給定類別下的條件概率 P(Xi|Y)。
- 預(yù)測(cè)或分類:對(duì)于新的未知樣本,根據(jù)貝葉斯定理和條件獨(dú)立性假設(shè),計(jì)算其屬于每個(gè)類別的后驗(yàn)概率 P(Y|X)。選擇后驗(yàn)概率最大的類別作為該樣本的預(yù)測(cè)類別。
計(jì)算公式如下:
P(Y|X) = [P(Y) * P(X1|Y) * P(X2|Y) * … * P(Xn|Y)] / P(X)
其中,X1, X2, …, Xn 是特征,Y 是類別。
四、樸素貝葉斯算法的適用邊界和優(yōu)缺點(diǎn)
(1)適用邊界
- 適用于大規(guī)模數(shù)據(jù)集。
- 特征之間高度獨(dú)立或者弱相關(guān)的問題效果較好。
- 在數(shù)據(jù)稀疏的情況下也能取得不錯(cuò)的效果。
(2)優(yōu)點(diǎn)部分
- 計(jì)算簡(jiǎn)單快速,易于實(shí)現(xiàn)。
- 對(duì)缺失數(shù)據(jù)不太敏感。
- 可以處理多分類問題。
(3)缺點(diǎn)部分
- 條件獨(dú)立性假設(shè)過于簡(jiǎn)化,可能導(dǎo)致預(yù)測(cè)精度下降。
- 對(duì)輸入數(shù)據(jù)的分布有一定的假設(shè),如果實(shí)際數(shù)據(jù)與這些假設(shè)不符,效果可能會(huì)受影響。
五、最后的話
總的來說,樸素貝葉斯算法是一種基于貝葉斯定理和條件獨(dú)立性假設(shè)的分類方法。雖然它的假設(shè)可能過于簡(jiǎn)化,但在許多實(shí)際問題中仍能取得良好的效果。盡管它的名字聽起來有些“樸素”,但它的實(shí)用性和高效性讓我們?cè)跈C(jī)器學(xué)習(xí)領(lǐng)域離不開它。
當(dāng)然,我們也要注意它的適用邊界和優(yōu)缺點(diǎn),以便更好地發(fā)揮它的作用。希望帶給你一點(diǎn)啟發(fā),加油。
作者:柳星聊產(chǎn)品,公眾號(hào):柳星聊產(chǎn)品
本文由 @柳星聊產(chǎn)品 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
- 目前還沒評(píng)論,等你發(fā)揮!