---
title: "拉普拉斯平滑（Laplace Smoothing）"
slug: laplace-smoothing
language: zh-TW
source: https://aiterms.tw/learning/what-is-laplace-smoothing
updated_at: 2026-06-22
tags: [統計方法, 機器學習, 自然語言處理, 模型訓練]
ipas_term: false
type: deep-dive
---

# 拉普拉斯平滑 是什麼？

> 拉普拉斯平滑（Laplace Smoothing）又稱加一平滑，是貝氏統計中避免零機率問題的技術，在計算類別條件機率時，將每個類別的計數加上常數 α（通常為 1），防止訓練集未見過的詞彙或特徵使整個機

## 核心概念

拉普拉斯平滑（Laplace Smoothing）源自貝葉斯統計，由法國數學家 Pierre-Simon Laplace 在「日出問題」中提出：基於 n 天的觀測（每天都日出），明天日出的機率是 n/(n+1) 而非 n/n = 1，因為沒有任何有限觀測能保證未來必然發生的事件。

在機器學習中，最常見的應用場景是文字分類的樸素貝氏模型。設想訓練一個垃圾郵件過濾器：若詞彙「隱形飛機」從未出現在訓練集的任何垃圾郵件中，計算 P(「隱形飛機」| 垃圾郵件) = 0/N = 0，使整個郵件的後驗機率歸零，無論其他詞彙有多可疑。拉普拉斯平滑就是為了解決這個問題。

## 運作原理

未平滑的條件機率估計：

P(詞語 w | 類別 c) = count(w, c) / Σ count(w', c)

當 count(w, c) = 0 時，機率為 0。

加法平滑後的條件機率：

P(詞語 w | 類別 c) = (count(w, c) + α) / (Σ count(w', c) + α × V)

其中：
- α：平滑參數（Laplace 平滑取 α = 1）
- V：詞彙表大小（所有可能的特徵值數量）
- 分母加上 α × V 是為了確保所有條件機率的總和仍為 1（機率守恆）

數值範例：

設訓練集包含 100 封垃圾郵件，詞彙表大小 V = 10,000：
- 「免費」出現 50 次：P = (50+1)/(100+10000) = 51/10100 ≈ 0.00505
- 「隱形飛機」出現 0 次：P = (0+1)/(100+10000) = 1/10100 ≈ 0.000099（有平滑前為 0）

超參數 α 的效果：

- α = 0：不平滑，零頻問題未解決
- α = 1：Laplace 平滑（加一平滑），最常用預設值
- α ∈ (0, 1)：Lidstone 平滑，對少見但非零的特徵有更精細的控制
- α > 1：過度平滑，使所有機率趨近均等分布

Scikit-learn 實作：

```python
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
X_train_vec = vectorizer.fit_transform(train_texts)

# alpha 即為 Laplace 平滑參數，預設 1.0
clf = MultinomialNB(alpha=1.0)
clf.fit(X_train_vec, y_train)

# 測試集可包含訓練集未見過的詞（未登錄詞由平滑機制處理）
X_test_vec = vectorizer.transform(test_texts)
predictions = clf.predict(X_test_vec)
```

注意：`CountVectorizer` 預設只保留訓練集中出現過的詞彙，測試集中的未登錄詞（OOV）會被靜默忽略，因此 `MultinomialNB` 中的平滑主要作用在訓練集中詞彙在某些類別中計數為零的情況。

## 實際應用

文字分類

拉普拉斯平滑是多項式樸素貝氏（Multinomial Naive Bayes）在文字任務中的標準配置，廣泛應用於垃圾郵件過濾、新聞類別分類、情感分析等。

語言模型中的 N-gram 平滑

在傳統統計語言模型（N-gram 模型）中，拉普拉斯平滑是最基礎的 N-gram 機率平滑方法。雖然現代神經語言模型已取代統計 N-gram 模型，但平滑概念在語言模型的機率估計中仍有重要意義。

貝葉斯網路中的先驗

α = 1 對應一個 Dirichlet 均勻先驗（每個類別一個假想樣本），這是貝葉斯觀點下「完全不確定時」的合理起點。更大的 α 代表更強的先驗信念，認為各詞彙出現的機率應接近均等。

## 常見誤區

誤區一：拉普拉斯平滑只適用於文字資料
任何使用頻率計數估計機率的離散特徵都可以使用拉普拉斯平滑，例如類別型特徵的條件機率估計、事件序列的轉移機率等。

誤區二：α = 1 永遠是最好的選擇
α 是一個超參數，應透過交叉驗證選擇最適值。對於詞彙表很大但訓練資料充足的場景，較小的 α（如 0.1）可能更準確；對於小型訓練集或高稀疏性，較大的 α 有更強的正則化效果。

誤區三：拉普拉斯平滑解決了樸素貝氏的所有問題
拉普拉斯平滑只解決了零頻問題，並不解決樸素貝氏的根本假設問題：特徵條件獨立假設（即各特徵在已知類別的條件下相互獨立）在真實文字資料中通常不成立（如「人工」和「智慧」往往共同出現）。這個假設的違反使樸素貝氏的後驗機率估計通常不準確，但其分類決策（取最高機率類別）在實務中仍然相當有效。

## 與相關技術的比較

| 平滑方法 | 核心思路 | 複雜度 | 適用場景 |
|---|---|---|---|
| 拉普拉斯（加一）平滑 | 每個計數加常數 α | 極低 | 文字分類基線 |
| Lidstone 平滑 | 每個計數加 α < 1 | 極低 | 需超參數調整 |
| Good-Turing 平滑 | 依照低頻字估計未見事件的機率 | 中 | 稀疏資料的 N-gram 模型 |
| Kneser-Ney 平滑 | 基於低階 N-gram 的補插 | 高 | 統計語言模型的最佳實踐 |

在深度學習語言模型普及之前，Kneser-Ney 平滑被公認為 N-gram 語言模型中效果最好的平滑方法。拉普拉斯平滑因其簡單直觀，至今仍是學習貝氏分類器最常見的入門技術。

## 常見問題

### 拉普拉斯平滑的 α 參數有什麼意義？應該怎麼選？

α 是平滑強度，貝葉斯解讀為「每個特徵類別組合的先驗假想觀測次數」。α = 1 意味著在計算前，假設每個特徵值與每個類別各有一次共現，是最常見的預設。較小的 α（如 0.1）平滑效果弱，更尊重實際觀測；較大的 α 使估計更趨向均等分布，提供更強的正則化。選擇 α 應透過交叉驗證，Scikit-learn 的 MultinomialNB 中 alpha 參數可以用 GridSearchCV 調整。訓練資料豐富時傾向較小的 α，稀疏場景（詞彙表大、訓練集小）傾向較大的 α。

### 拉普拉斯平滑和 L2 正則化有什麼相似之處？

兩者都是防止模型對訓練資料過度擬合的正則化手段，但作用機制不同。拉普拉斯平滑在貝氏框架下等價於給機率加上 Dirichlet 均勻先驗，防止任何特徵的條件機率估計為 0；L2 正則化（Ridge）在損失函數中加入參數的平方懲罰項，防止任何線性模型參數過大。兩者都是「縮向預設值」的策略：拉普拉斯平滑把機率縮向均等分布，L2 把參數縮向零。在邏輯斯迴歸中，C 參數（L2 強度的倒數）與樸素貝氏的 α 在概念上扮演類似的角色。

### 現代深度學習模型還需要拉普拉斯平滑嗎？

現代深度學習語言模型（如 Transformer、GPT 等）透過稠密詞嵌入（Dense Word Embeddings）處理詞彙表的稀疏性，神經網路的參數化方式使其天然能處理未見過的詞彙組合，不存在傳統 N-gram 模型的零頻問題，因此不需要拉普拉斯平滑。然而，在以下場景中拉普拉斯平滑仍有實際價值：使用多項式樸素貝氏做文字分類（快速基線）、傳統統計 N-gram 語言模型、以及任何基於頻率計數的離散機率估計任務。

---

深度解說頁：https://aiterms.tw/learning/what-is-laplace-smoothing
快查頁：https://aiterms.tw/terms/laplace-smoothing
最後更新：2026/06/22