📨 機率式分類器 · iPAS 常考
樸素貝氏:用機率判斷「最可能是哪一類」
它是垃圾郵件過濾的經典演算法。核心很單純:用貝氏定理算「看到這些特徵,最可能屬於哪一類」,選機率最高的那個。它「天真」地假設特徵彼此獨立,因此超快、又省資料,文字分類特別好用。
貝氏定理先驗×概似→後驗為何「樸素」零機率/平滑三種變體垃圾信過濾
🤔 一、它怎麼判斷一封信是不是垃圾?
先用最經典的例子,把「貝氏定理」的直覺建起來。
💡 白話定義
樸素貝氏(Naive Bayes)是一個機率式分類器:看到一筆資料的特徵,它去算「這筆資料屬於各個類別的機率」,然後選機率最大的那一類當答案。算機率的工具,就是貝氏定理。
📨 垃圾信例子
想判斷一封含「免費、中獎」的信是不是垃圾。貝氏定理說:
P(垃圾 | 出現「免費、中獎」) ∝ P(「免費、中獎」 | 垃圾) × P(垃圾)
模型從訓練信件學到:垃圾信裡「免費、中獎」很常見、正常信很少見。所以這封信算出來「是垃圾」的機率遠高於「正常」→ 判為垃圾。
三個關鍵名詞(一定要分清)
| 先驗 Prior | P(類別) | 還沒看資料前,這類本來的比例(例:垃圾信佔 20%)。 |
| 概似 Likelihood | P(特徵 | 類別) | 在某類裡,看到這些特徵的機率(垃圾信裡出現「免費」的機率)。 |
| 後驗 Posterior | P(類別 | 特徵) | 看到特徵後,屬於某類的機率——這就是我們要的答案。 |
一句話:後驗 ∝ 概似 × 先驗。比較各類的後驗,挑最大的。
😇 二、為什麼叫「樸素(Naive)」?
問題來了:要算 P(「免費」和「中獎」一起出現 | 垃圾) 很難。樸素貝氏用一個大膽的偷懶解決它。
🧩 天真假設:特徵彼此獨立
它天真地假設每個特徵互不相干,於是「一起出現的機率」就可以拆開、各算各的、再相乘:
P(免費, 中獎 | 垃圾) ≈ P(免費 | 垃圾) × P(中獎 | 垃圾)
這樣只要分別數「免費在垃圾信的機率」「中獎在垃圾信的機率」就好,計算超快、需要的資料也少。
⚠️ 這假設其實常常不成立
現實中特徵常相關(「免費」和「中獎」在垃圾信裡常一起出現;「身高」和「體重」也相關)。所以這假設很「天真」。但神奇的是——即使假設不完全對,樸素貝氏在很多任務(尤其文字)還是表現得意外地好,因為分類只要「哪類機率比較大」對就行,不需要機率算得完全精準。
⚙️ 三、運作三步驟
1
算先驗 P(類別)
數一下訓練資料中各類的比例。例如垃圾信 20%、正常信 80%。
2
算概似並相乘
對每個特徵算 P(特徵 | 類別),然後全部相乘(這裡就用到「樸素獨立」假設)。連續數值(如身高)則用高斯分布算機率——就是下面 demo 邊緣那條鐘形曲線。
3
比後驗,選最大
每類算出「概似 × 先驗」,哪一類大就判哪一類。(要變成百分比,再各除以總和正規化即可。)
🎮 四、動手玩:移動滑鼠看它怎麼算
這個 demo 用「連續數值」版(高斯樸素貝氏)。先看圖例,再把滑鼠移到圖上不同位置。
游標位置機率計算
類別 A(藍色)
P(x|A) [水平]: 0.00
P(y|A) [垂直]: 0.00
Score ~ P(x|A)×P(y|A): 0.00
類別 B(紅色)
P(x|B) [水平]: 0.00
P(y|B) [垂直]: 0.00
Score ~ P(x|B)×P(y|B): 0.00
最終後驗機率 (Posterior)
P(A | data) 50%
P(B | data) 50%
移動滑鼠以預測
0️⃣ 五、連乘的陷阱:零機率問題
這是樸素貝氏(尤其文字版)很常考、也很實務的一個坑。
💥 一個 0 就毀掉全部
因為概似是連乘,只要其中一項 P(特徵 | 類別) = 0,整串相乘就變 0。例如某個詞在「正常信」的訓練資料裡剛好從沒出現過,模型就會算出 P(該詞 | 正常)=0,於是不管其他證據多強,這封信都不可能被判成正常信——太武斷了。
✅ 解法:拉普拉斯平滑(加一平滑)
給每個詞的計數都先加 1(Laplace / add-one smoothing),讓「沒見過的詞」也有一點點小機率、不會是 0。這樣就不會因為一個沒見過的詞而整個歸零。這是樸素貝氏的標準配備。
🧬 六、三種常見變體
差別只在「概似 P(特徵|類別) 用什麼機率模型」。
高斯 NB(Gaussian)特徵是連續數值(身高、體重),假設高斯分布——本頁 demo 用的就是它。
多項式 NB(Multinomial)特徵是計數(每個詞出現幾次),文字分類最常用。
伯努利 NB(Bernoulli)特徵是二元(某詞有沒有出現),適合短文本。
⚖️ 七、優缺點與應用
✅ 快又省資料訓練/預測都很快,需要的資料不多,常拿來當強基準。
✅ 擅長高維文字對高維稀疏資料穩健 → 垃圾信過濾、情感分析。
⚠️ 獨立假設常不成立相關特徵會被「重複計算」,機率未必校準準。
⚠️ 只輸出相對大小可靠分類對就好;當「機率值」直接用要小心。
🔬 進階:數學式(高斯樸素貝氏,想深入再點)
貝氏定理:
$$ P(C \mid D) = \frac{P(D \mid C)\,P(C)}{P(D)} $$
樸素獨立假設:
$$ P(x, y \mid C) \approx P(x \mid C)\cdot P(y \mid C) $$
高斯機率密度(邊緣那條鐘形曲線):
$$ P(x \mid c) = \frac{1}{\sqrt{2\pi\sigma_c^2}}\exp\!\left(-\frac{(x-\mu_c)^2}{2\sigma_c^2}\right) $$
$\mu_c$ 是平均(中心)、$\sigma_c$ 是標準差(寬度)。分母 $P(D)$ 對各類都一樣,比大小時可省略。
🧪 八、觀念自我檢測
先想再點開。
Q1. 「樸素(naive)」是指什麼假設?
特徵在給定類別下互相獨立(條件獨立)。因為這個假設,聯合概似才能拆開成各特徵機率直接相乘,計算大幅簡化。
Q2. 為什麼樸素貝氏很適合文字分類?
文字特徵維度高、樸素貝氏訓練快、省資料、對高維稀疏資料穩健,所以垃圾信過濾、情感分析常用它。
Q3. 什麼是零機率問題?怎麼解?
某特徵在某類訓練資料從沒出現 → P(特徵|類)=0 → 連乘整個歸零。用拉普拉斯(加一)平滑,讓每個計數先加 1,避免 0。
Q4. 樸素貝氏和邏輯迴歸都做分類,差在哪?
樸素貝氏是生成式(學各類的特徵分布、再用貝氏定理回推);邏輯迴歸是判別式(直接學決策邊界)。NB 更快更省資料;LR 不假設獨立、通常分類更準。
✅ 九、30 秒重點整理
用貝氏定理選最大後驗後驗 ∝ 概似 × 先驗,挑機率最高的類。
「樸素」=特徵條件獨立所以概似可以直接相乘,超快。
假設常不成立卻很有效尤其文字分類,只要比大小對就行。
零機率 → 拉普拉斯平滑加一避免連乘歸零。
三變體高斯(連續)/ 多項式(詞頻)/ 伯努利(有無)。
主場垃圾信過濾、情感分析、快速基準模型。
📝 iPAS 考點提醒
樸素貝氏基於貝氏定理加特徵條件獨立假設,iPAS 中級科目三考點。重點:計算各類的後驗機率選最大者,簡單、快、適合高維(尤其文字分類、垃圾郵件)。易混點:樸素指假設特徵互相獨立(現實常不成立),但即使假設不完全成立實務上仍常出乎意料地有效;與邏輯迴歸都做分類但原理不同。情境:文字分類、即時、資料量大的場景。
想練情境題與詳解 → AI 學習與考證地圖
❓ 常見問題
樸素貝氏的原理是什麼?
以貝氏定理計算「在已知特徵下屬於某類」的後驗機率,選機率最大的類別;並樸素地假設各特徵在給定類別下彼此獨立以簡化計算。
「樸素(naive)」指的是什麼?
指那個強假設——特徵條件獨立。現實中特徵常相關,但即使假設不完全成立,模型在許多任務(尤其文字)仍表現得意外地好。
為什麼常用於文字分類?
文字特徵維度高、樸素貝氏訓練快、需要的資料不多、對高維稀疏資料穩健,故常用於垃圾郵件過濾、情感分類。
什麼是零機率問題、怎麼解決?
若某詞在訓練中沒和某類別共同出現,機率為 0 會讓整體連乘歸零;用拉普拉斯平滑(加一)等平滑法避免。
樸素貝氏的優缺點?
優點:快、省資料、可當強基準、能輸出機率。缺點:特徵獨立假設常不成立、相關特徵會被重複計算、機率校準未必準。