
Naive Bayes(中譯為樸素貝葉斯、簡單貝葉斯或是簡單貝氏模型等)是一種基於貝葉斯定理的機器學習分類演算法,廣泛應用於文本分類、垃圾郵件檢測、情感分析等任務。它被稱為「Naive」(樸素),因為它假設所有特徵之間是相互獨立的,這在現實情況下很少成立,但這種簡化使模型計算更高效,並且在實踐中往往效果良好。
Naive Bayes 可以同時接受離散型變數和連續型變數。透過計算,我們可以知道在已知的資料下哪個目標的發生機率最大,由此去做分類。# 可使用目錄功能快速確認要閱覽的主題
Naive Bayes 的優勢與劣勢
Naive Bayes 的優勢
- 計算高效
- Naive Bayes 的核心是基於貝葉斯定理和特徵條件獨立性假設。
- 在訓練過程中,只需計算每個特徵與標籤的條件概率,這大大降低了計算複雜度。
- 即使在高維度數據下(例如文本分類中的詞頻矩陣),Naive Bayes 也能快速完成訓練和預測。
- 小數據集也能穩定運作
- 許多機器學習模型在數據不足時會過度擬合或無法有效訓練。
- Naive Bayes 由於其簡單的概率計算,即使在小樣本下,也能獲得穩定的結果。
- 適合高維度特徵空間
- 在文本分類等場景中,數據特徵(如詞彙量)可能非常高維,但 Naive Bayes 能很好地處理這種情況,因為每個特徵被獨立考慮。
- 易於實現與解釋
- 演算法簡單,易於實現。
- 結果可以被清晰解釋,尤其在概率輸出上直觀易懂。
Naive Bayes 的劣勢
1. 特徵條件獨立性假設
- Naive Bayes 假設所有特徵在給定標籤的條件下都是相互獨立的。
- 在現實數據中,特徵往往存在相關性(例如:在信用卡欺詐檢測中,「交易金額」與「交易頻率」可能密切相關)。
- 當特徵之間存在高度相關性時,Naive Bayes 的預測結果可能會偏差,導致準確性下降。
2. 無法捕捉複雜的非線性關係
- Naive Bayes 模型是基於簡單的概率計算,無法捕捉特徵與標籤之間的非線性關係。
- 例如,在複雜的圖片分類或語音識別任務中,Naive Bayes 的表現遠不如深度學習模型。
- 機率估計不準確
- 當某些類別或特徵組合在訓練數據中很少出現時,Naive Bayes 可能無法給出準確的概率估計(稱為零概率問題,可以使用拉普拉斯平滑來解決)。
4. 特徵數據類型限制
- Naive Bayes 在處理數值型特徵時,通常需要將它們轉換為離散化或假設它們符合某種分佈(如高斯分佈)。
- 如果數據不符合這些分佈假設,預測效果將會降低。
Naive Bayes vs 其它模型快速比較

Naive Bayes 的核心運作邏輯
1. 核心理論基礎:貝葉斯定理
貝葉斯定理描述了給定某些證據下,一個事件發生的條件機率,公式如下:

- P(Y|X):在已知證據 X 下,事件 Y 發生的機率(後驗機率)
- P(X|Y):在 Y 發生的情況下,證據 X 出現的機率(似然機率)
- P(Y):事件 Y 發生的先驗機率
- P(X):證據 X 出現的機率(標準化常數)
2. 條件獨立性假設
Naive Bayes 的「Naive」(天真)指的是它假設所有特徵是條件獨立的,即在給定標籤 Y 的條件下,各個特徵 X1 , X2 , ... , Xn 之間互相獨立:

這個假設簡化了計算,使得模型在處理高維度數據時能夠保持高效。
3. 計算後驗機率並分類
目標是計算每個類別 Y 的後驗機率 P(Y|X),並選擇機率最大的類別作為預測結果:

- P(Y):每個類別的先驗機率,可以從訓練數據中計算。
- P(X_i | Y):在每個類別 Y 下,每個特徵 Xi 的條件機率。
最終步驟:選擇後驗機率最高的類別作為預測結果。
4. 三種常見 Naive Bayes 模型
4-1 Gaussian Naive Bayes(高斯 Naive Bayes)
- 適合連續數值特徵,假設特徵符合高斯分佈。
4-2 Multinomial Naive Bayes(多項式 Naive Bayes)
- 適合文本分類,例如垃圾郵件檢測。
4-3 Bernoulli Naive Bayes(伯努利 Naive Bayes)
- 適合二元特徵,例如詞語是否出現(0/1 表示)。
5. 範例
假設我們要根據天氣和溫度預測是否適合外出。

步驟:
- 計算先驗機率:
- P(適合外出 = 是) = 2/3
- P(適合外出 = 否) = 1/3
- 計算條件機率:
- P(天氣 = 晴天|適合外出 = 是) = 1
- P(天氣 = 雨天|適合外出 = 是) = 0
- P(溫度 = 熱|適合外出 = 是) = 0.5
- 使用貝葉斯定理預測新數據(例如:天氣 = 晴天,溫度 = 冷)
- P(適合外出 = 是|天氣 = 晴天,溫度 = 冷) = P(晴天|是) • P(冷|是) • P(是)
比較不同類別的後驗機率,選擇最大者作為預測結果。
Naive Bayes 的實際應用範例
範例一:垃圾郵件分類(文本分類問題)
目標:使用 Naive Bayes 分類器區分垃圾郵件和正常郵件。
步驟:
- 導入必要的函式庫
- 加載範例數據
- 特徵提取(CountVectorizer / TfidfVectorizer)
- 使用 Naive Bayes 訓練模型
- 評估模型性能
程式碼:
# 1. 導入所需函式庫
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
# 2. 範例數據集
emails = [
'Win a free iPhone now', # 垃圾郵件
'Limited offer! Claim your prize', # 垃圾郵件
'Meeting scheduled for tomorrow', # 正常郵件
'Project deadline is next week', # 正常郵件
'Congratulations! You won a lottery' # 垃圾郵件
]
labels = [1, 1, 0, 0, 1] # 1: 垃圾郵件, 0: 正常郵件
# 3. 特徵提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
y = labels
# 4. 切分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 5. 訓練 Naive Bayes 模型
model = MultinomialNB()
model.fit(X_train, y_train)
# 6. 預測
y_pred = model.predict(X_test)
# 7. 評估模型
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Classification Report:\n", classification_report(y_test, y_pred))
解釋:
- CountVectorizer:將文本轉換為詞頻矩陣。
- MultinomialNB:適合用於文本分類問題。
- 評估結果:透過準確率和分類報告檢查模型表現。
範例二:鳶尾花分類(Iris Dataset - 數值型特徵)
目標:使用 Gaussian Naive Bayes 將鳶尾花分類為三種不同的花種。
步驟:
- 導入資料集
- 數據切分
- 模型訓練
- 模型預測與評估
程式碼:
# 1. 導入所需函式庫
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score, confusion_matrix
# 2. 載入鳶尾花資料集
data = load_iris()
X = data.data
y = data.target
# 3. 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 4. 訓練 Gaussian Naive Bayes 模型
model = GaussianNB()
model.fit(X_train, y_train)
# 5. 預測
y_pred = model.predict(X_test)
# 6. 評估
print("Accuracy:", accuracy_score(y_test, y_pred))
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
解釋:
- GaussianNB:適用於連續數據,假設特徵符合高斯分佈。
- 準確率 (Accuracy):衡量模型預測的準確性。
- 混淆矩陣 (Confusion Matrix):檢查分類結果的錯誤類型。