1. 用實例來理解樸素貝葉斯
下面用具體的數據來演示垃圾郵件 vs 正常郵件的概率計算
假設我們有一個小型郵件數據集
郵件內容 | 類別(垃圾/正常) |
---|---|
“免費 贏取 大獎” | 垃圾 |
“免費 參加會議” | 正常 |
“中獎 點擊 鏈接” | 垃圾 |
“明天 開會” | 正常 |
“贏取 免費 禮品” | 垃圾 |
Step 1: 統計基礎概率
- 總郵件數:5 封
- 垃圾郵件:3 封 →
P(垃圾) = 3/5 = 0.6
- 正常郵件:2 封 →
P(正常) = 2/5 = 0.4
- 垃圾郵件:3 封 →
Step 2: 統計每個詞的條件概率
計算每個詞在垃圾郵件和正常郵件中出現的概率:
(例如:P("免費"|垃圾)
= 垃圾郵件中出現“免費”的概率)
單詞 | 在垃圾郵件中出現的次數 | P(單詞|垃圾) | 在正常郵件中出現的次數 | P(單詞|正常) |
---|---|---|---|---|
免費 | 3 封(所有垃圾郵件) | 3/3 = ?1.0? | 1 封(“免費 參加會議”) | 1/2 = ?0.5? |
中獎 | 1 封 | 1/3 ≈ ?0.33? | 0 封 | 0/2 = ?0.0? |
贏取 | 2 封 | 2/3 ≈ ?0.67? | 0 封 | 0/2 = ?0.0? |
會議 | 0 封 | 0/3 = ?0.0? | 1 封 | 1/2 = ?0.5? |
明天 | 0 封 | 0/3 = ?0.0? | 1 封 | 1/2 = ?0.5? |
注:如果某個詞在某一類中未出現(概率=0),會導致整個乘積為0。實際中會使用拉普拉斯平滑(+1)避免此問題,這里暫不展開。
Step 3: 對新郵件進行分類
假設新郵件內容是:“免費 中獎”,判斷它是垃圾還是正常郵件。
計算垃圾郵件概率
P(垃圾∣"免費?中獎")∝P(垃圾)×P("免費"∣垃圾)×P("中獎"∣垃圾)=0.6×1.0×0.33≈0.198 P(垃圾|\text{"免費 中獎"}) \propto P(垃圾) \times P(\text{"免費"}|垃圾) \times P(\text{"中獎"}|垃圾) \\ = 0.6 \times 1.0 \times 0.33 \approx \mathbf{0.198} P(垃圾∣"免費?中獎")∝P(垃圾)×P("免費"∣垃圾)×P("中獎"∣垃圾)=0.6×1.0×0.33≈0.198
計算正常郵件概率
P(正常∣"免費?中獎")∝P(正常)×P("免費"∣正常)×P("中獎"∣正常)=0.4×0.5×0.0=0.0 P(正常|\text{"免費 中獎"}) \propto P(正常) \times P(\text{"免費"}|正常) \times P(\text{"中獎"}|正常) \\ = 0.4 \times 0.5 \times 0.0 = \mathbf{0.0} P(正常∣"免費?中獎")∝P(正常)×P("免費"∣正常)×P("中獎"∣正常)=0.4×0.5×0.0=0.0
問題:正常郵件概率=0,因為“中獎”從未在正常郵件中出現過。實際中會調整概率(見后文修正)。
結論
- 垃圾郵件概率:0.198
- 正常郵件概率:0.0
→ 判定為垃圾郵件。
修正:拉普拉斯平滑(避免概率=0)
對未出現的詞,給所有計數+1(避免零概率):
- 修正后
P("中獎"|正常) = (0+1)/(2+總唯一詞數)
(假設總唯一詞數=5,則P("中獎"|正常) = 1/7 ≈ 0.14
)
修正后的正常郵件概率:
P(正常∣"免費?中獎")∝0.4×0.5×0.14≈0.028P(正常|\text{"免費 中獎"})\propto 0.4 \times 0.5 \times 0.14 \approx \mathbf{0.028}P(正常∣"免費?中獎")∝0.4×0.5×0.14≈0.028
此時垃圾郵件概率(0.198)仍大于正常郵件概率(0.028),依然判定為垃圾郵件。
關鍵點總結
- P(類別):類別的初始概率(如垃圾郵件占60%)。
- P(單詞|類別):某類郵件中某個單詞出現的概率。
- 連乘:假設所有詞獨立,概率相乘得到聯合概率。
- 平滑處理:避免未出現的詞導致概率歸零。
這樣計算后,選擇概率更大的類別作為預測結果!
2.用樸素貝葉斯解釋下面的問題
假設有一種病叫做“貝葉死”,它的發病率是萬分之一,即10000 人中會有1個人得病。現有一種測試可以檢驗一個人是否得病的準確率是99.9%,誤報率(假陽)是0.1% 那么,如果一個人被查出來患有“葉貝死”,實際上患有的可能性有多大?
問題重述(“貝葉死”檢測問題)
-
發病率(先驗概率):
P(病)=110000=0.0001P(\text{病}) = \frac{1}{10000} = 0.0001P(病)=100001?=0.0001
P(健康)=1?P(病)=0.9999P(\text{健康}) = 1 - P(\text{病}) = 0.9999P(健康)=1?P(病)=0.9999 -
檢測準確率:
- 真陽性(True Positive):已知患病時,檢測為陽性的概率:99.9% → P(陽性∣病)=0.999P(\text{陽性}|\text{病}) = 0.999P(陽性∣病)=0.999
- 假陽性(False Positive):已知健康時,檢測為陽性的概率:0.1% → P(陽性∣健康)=0.001P(\text{陽性}|\text{健康}) = 0.001P(陽性∣健康)=0.001
-
問題:
如果一個人檢測結果為陽性,實際患病的概率是多少?即求 P(病∣陽性)P(\text{病}|\text{陽性})P(病∣陽性)。
用樸素貝葉斯推導
根據貝葉斯定理:
P(病∣陽性)=P(陽性∣病)?P(病)P(陽性)
P(\text{病}|\text{陽性}) = \frac{P(\text{陽性}|\text{病}) \cdot P(\text{病})}{P(\text{陽性})}
P(病∣陽性)=P(陽性)P(陽性∣病)?P(病)?
其中,P(陽性)P(\text{陽性})P(陽性)是檢測為陽性的總概率,包括真陽性和假陽性:
P(陽性)=P(陽性∣病)?P(病)+P(陽性∣健康)?P(健康)
P(\text{陽性}) = P(\text{陽性}|\text{病}) \cdot P(\text{病}) + P(\text{陽性}|\text{健康}) \cdot P(\text{健康})
P(陽性)=P(陽性∣病)?P(病)+P(陽性∣健康)?P(健康)
具體計算
-
計算分子(真陽性部分):
P(陽性∣病)?P(病)=0.999×0.0001=0.0000999 P(\text{陽性}|\text{病}) \cdot P(\text{病}) = 0.999 \times 0.0001 = 0.0000999 P(陽性∣病)?P(病)=0.999×0.0001=0.0000999 -
計算分母(所有陽性情況):
P(陽性)=0.999×0.0001+0.001×0.9999=0.0000999+0.0009999=0.0010998 P(\text{陽性}) = 0.999 \times 0.0001 + 0.001 \times 0.9999 = 0.0000999 + 0.0009999 = 0.0010998 P(陽性)=0.999×0.0001+0.001×0.9999=0.0000999+0.0009999=0.0010998 -
最終概率:
P(病∣陽性)=0.00009990.0010998≈0.0908(約9.08%) P(\text{病}|\text{陽性}) = \frac{0.0000999}{0.0010998} \approx 0.0908 \quad \text{(約9.08\%)} P(病∣陽性)=0.00109980.0000999?≈0.0908(約9.08%)
直觀解釋
-
在10000人中:
- 1人患病,且檢測為陽性的概率:1×0.999≈11 \times 0.999 \approx 11×0.999≈1 人(真陽性)。
- 9999人健康,但檢測為陽性的概率:9999×0.001≈109999 \times 0.001 \approx 109999×0.001≈10 人(假陽性)。
-
所有陽性結果:共 1+10=111 + 10 = 111+10=11 人。
-
其中真正患病:僅1人。
因此,檢測為陽性時,實際患病的概率是:
111≈9.09%(與公式結果一致)
\frac{1}{11} \approx 9.09\% \quad \text{(與公式結果一致)}
111?≈9.09%(與公式結果一致)
結論
即使檢測準確率高達99.9%,由于發病率極低(萬分之一),假陽性人數遠多于真陽性。
最終:
P(病∣陽性)≈9.1%
P(\text{病}|\text{陽性}) \approx \mathbf{9.1\%}
P(病∣陽性)≈9.1%
這意味著,檢測為陽性的人中,超過90%是誤診!
背后的貝葉斯思想
- 先驗概率很重要:發病率低時,即使檢測準確率高,誤診仍可能主導結果。
- 不要忽略基礎比率(Base Rate Neglect):人們常忽視先驗概率,只關注檢測的“準確性”。
- 實際應用:對罕見病的篩查,需結合多次檢測或更高特異性的方法降低誤診率。
這就是貝葉斯定理的經典案例——“陽性結果≠患病”!
3.樸素貝葉斯公式總結
1. 公式分解
貝葉斯定理的完整形式是:
P(y∣X)=P(y)∏P(xi∣y)P(X)
P(y|X) = \frac{P(y) \prod P(x_i|y)}{P(X)}
P(y∣X)=P(X)P(y)∏P(xi?∣y)?
但 $ P(X) $ 對所有類別 $ y $ 都相同,因此比較時只需計算分子:
P(y∣X)∝P(y)∏P(xi∣y)
P(y|X) \propto P(y) \prod P(x_i|y)
P(y∣X)∝P(y)∏P(xi?∣y)
- P(y∣X)P(y|X)P(y∣X):在已知特征 X=(x1,x2,...,xn)X = (x_1, x_2, ..., x_n)X=(x1?,x2?,...,xn?) 的情況下,樣本屬于類別 yyy 的概率(后驗概率)。
- P(y)P(y)P(y):類別 yyy 的先驗概率(即數據中類別 yyy 出現的概率)。
- P(xi∣y)P(x_i|y)P(xi?∣y):在類別 yyy 下,特征 xix_ixi? 出現的概率(似然概率)。
- ∝\propto∝:表示“正比于”,即我們可以忽略分母 P(X)P(X)P(X)(因為對所有類別 yyy 都一樣,不影響比較)。
2. 直觀理解
假設我們要判斷一封郵件是不是垃圾郵件(y=垃圾郵件y = \text{垃圾郵件}y=垃圾郵件 或 y=正常郵件y = \text{正常郵件}y=正常郵件),郵件的特征 XXX 是其中的單詞(如“免費”“中獎”等)。
樸素貝葉斯的計算邏輯是:
- 先看數據中垃圾郵件的比例(P(y)P(y)P(y))。
- 再看垃圾郵件中每個單詞出現的概率(P(xi∣y)P(x_i|y)P(xi?∣y))。
- 假設所有單詞相互獨立(“樸素”假設),計算它們的聯合概率(即乘積)。
- 比較不同類別的概率,選擇概率最大的作為預測結果。
3. 具體例子
數據示例
郵件內容 | 類別(垃圾/正常) |
---|---|
“免費 贏取 大獎” | 垃圾 |
“免費 參加會議” | 正常 |
“中獎 點擊 鏈接” | 垃圾 |
“明天 開會” | 正常 |
“贏取 免費 禮品” | 垃圾 |
計算概率
-
先驗概率:
- P(垃圾)=35=0.6P(\text{垃圾}) = \frac{3}{5} = 0.6P(垃圾)=53?=0.6
- P(正常)=25=0.4P(\text{正常}) = \frac{2}{5} = 0.4P(正常)=52?=0.4
-
條件概率(單詞在垃圾郵件中的概率):
- P(免費∣垃圾)=33=1.0P(\text{免費}|\text{垃圾}) = \frac{3}{3} = 1.0P(免費∣垃圾)=33?=1.0
- P(中獎∣垃圾)=13≈0.33P(\text{中獎}|\text{垃圾}) = \frac{1}{3} \approx 0.33P(中獎∣垃圾)=31?≈0.33
- P(贏取∣垃圾)=23≈0.67P(\text{贏取}|\text{垃圾}) = \frac{2}{3} \approx 0.67P(贏取∣垃圾)=32?≈0.67
預測新郵件
假設新郵件內容是 “免費 中獎”,判斷它是垃圾郵件還是正常郵件。
垃圾郵件的概率
P(垃圾∣免費,?中獎)∝P(垃圾)×P(免費∣垃圾)×P(中獎∣垃圾)=0.6×1.0×0.33≈0.198 P(\text{垃圾}|\text{免費, 中獎}) \propto P(\text{垃圾}) \times P(\text{免費}|\text{垃圾}) \times P(\text{中獎}|\text{垃圾}) \\ = 0.6 \times 1.0 \times 0.33 \approx 0.198 P(垃圾∣免費,?中獎)∝P(垃圾)×P(免費∣垃圾)×P(中獎∣垃圾)=0.6×1.0×0.33≈0.198
正常郵件的概率
P(正常∣免費,?中獎)∝P(正常)×P(免費∣正常)×P(中獎∣正常)=0.4×0.5×0.0=0.0(需拉普拉斯平滑調整) P(\text{正常}|\text{免費, 中獎}) \propto P(\text{正常}) \times P(\text{免費}|\text{正常}) \times P(\text{中獎}|\text{正常}) \\ = 0.4 \times 0.5 \times 0.0 = 0.0 \quad \text{(需拉普拉斯平滑調整)} P(正常∣免費,?中獎)∝P(正常)×P(免費∣正常)×P(中獎∣正常)=0.4×0.5×0.0=0.0(需拉普拉斯平滑調整)
結論
垃圾郵件的概率(0.198) > 正常郵件的概率(0.0),因此判定為垃圾郵件。
4. 關鍵點總結
- 樸素貝葉斯假設:所有特征 xix_ixi? 相互獨立(“樸素”)。
- 計算方式:
- 先計算類別的先驗概率 P(y)P(y)P(y)。
- 再計算每個特征在類別下的條件概率 P(xi∣y)P(x_i|y)P(xi?∣y)。
- 聯合概率 = 先驗概率 × 所有特征的條件概率。
- 預測:選擇使 P(y∣X)P(y|X)P(y∣X) 最大的類別 yyy。
5. 應用場景
- 文本分類(垃圾郵件、情感分析)
- 醫學診斷(疾病預測)
- 推薦系統(用戶興趣分類)
這個公式雖然簡單,但在實際應用中非常強大! 🚀
4.樸素貝葉斯分類器
-
常用于文本分類,文本過濾、情感預測、推薦系統等,尤其是對于英文等語言來說,分類效果很好
-
準備階段,需要確定特征屬性,屬性值以及label => 訓練集
-
訓練階段,輸入是特征屬性和訓練樣本,輸出是分類器,主要工作是計算每個類別在訓練樣本中的出現頻率及每個特征屬性劃分對每個類別的條件概率
-
應用階段,使用分類器對新數據進行分類