【資料分析】簡單高效的機器學習模型 Naive Bayes

【資料分析】簡單高效的機器學習模型 Naive Bayes

更新於 發佈於 閱讀時間約 11 分鐘
raw-image

Naive Bayes(中譯為樸素貝葉斯、簡單貝葉斯或是簡單貝氏模型等)是一種基於貝葉斯定理的機器學習分類演算法,廣泛應用於文本分類、垃圾郵件檢測、情感分析等任務。它被稱為「Naive」(樸素),因為它假設所有特徵之間是相互獨立的,這在現實情況下很少成立,但這種簡化使模型計算更高效,並且在實踐中往往效果良好。

Naive Bayes 可以同時接受離散型變數和連續型變數。透過計算,我們可以知道在已知的資料下哪個目標的發生機率最大,由此去做分類。


# 可使用目錄功能快速確認要閱覽的主題


Naive Bayes 的優勢與劣勢


Naive Bayes 的優勢

  1. 計算高效
  • Naive Bayes 的核心是基於貝葉斯定理和特徵條件獨立性假設。
  • 在訓練過程中,只需計算每個特徵與標籤的條件概率,這大大降低了計算複雜度。
  • 即使在高維度數據下(例如文本分類中的詞頻矩陣),Naive Bayes 也能快速完成訓練和預測。
  1. 小數據集也能穩定運作
  • 許多機器學習模型在數據不足時會過度擬合或無法有效訓練。
  • Naive Bayes 由於其簡單的概率計算,即使在小樣本下,也能獲得穩定的結果。
  1. 適合高維度特徵空間
  • 在文本分類等場景中,數據特徵(如詞彙量)可能非常高維,但 Naive Bayes 能很好地處理這種情況,因為每個特徵被獨立考慮。
  1. 易於實現與解釋
  • 演算法簡單,易於實現。
  • 結果可以被清晰解釋,尤其在概率輸出上直觀易懂。


Naive Bayes 的劣勢


1. 特徵條件獨立性假設

  • Naive Bayes 假設所有特徵在給定標籤的條件下都是相互獨立的。
  • 在現實數據中,特徵往往存在相關性(例如:在信用卡欺詐檢測中,「交易金額」與「交易頻率」可能密切相關)。
  • 當特徵之間存在高度相關性時,Naive Bayes 的預測結果可能會偏差,導致準確性下降。


2. 無法捕捉複雜的非線性關係

  • Naive Bayes 模型是基於簡單的概率計算,無法捕捉特徵與標籤之間的非線性關係。
  • 例如,在複雜的圖片分類或語音識別任務中,Naive Bayes 的表現遠不如深度學習模型。
  1. 機率估計不準確
  • 當某些類別或特徵組合在訓練數據中很少出現時,Naive Bayes 可能無法給出準確的概率估計(稱為零概率問題,可以使用拉普拉斯平滑來解決)。


4. 特徵數據類型限制

  • Naive Bayes 在處理數值型特徵時,通常需要將它們轉換為離散化或假設它們符合某種分佈(如高斯分佈)。
  • 如果數據不符合這些分佈假設,預測效果將會降低。


Naive Bayes vs 其它模型快速比較

raw-image



Naive Bayes 的核心運作邏輯

1. 核心理論基礎:貝葉斯定理

貝葉斯定理描述了給定某些證據下,一個事件發生的條件機率,公式如下:

raw-image
  • P(Y|X):在已知證據 X 下,事件 Y 發生的機率(後驗機率)
  • P(X|Y):在 Y 發生的情況下,證據 X 出現的機率(似然機率)
  • P(Y):事件 Y 發生的先驗機率
  • P(X):證據 X 出現的機率(標準化常數)


2. 條件獨立性假設

Naive Bayes 的「Naive」(天真)指的是它假設所有特徵是條件獨立的,即在給定標籤 Y 的條件下,各個特徵 X1 , X2 , ... , Xn 之間互相獨立:

raw-image

這個假設簡化了計算,使得模型在處理高維度數據時能夠保持高效。


3. 計算後驗機率並分類

目標是計算每個類別 Y 的後驗機率 P(Y|X),並選擇機率最大的類別作為預測結果:

raw-image
  • 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. 範例

假設我們要根據天氣和溫度預測是否適合外出。

raw-image

步驟:

  1. 計算先驗機率:
  • P(適合外出 = 是) = 2/3
  • P(適合外出 = 否) = 1/3


  1. 計算條件機率:
  • P(天氣 = 晴天|適合外出 = 是) = 1
  • P(天氣 = 雨天|適合外出 = 是) = 0
  • P(溫度 = 熱|適合外出 = 是) = 0.5


  1. 使用貝葉斯定理預測新數據(例如:天氣 = 晴天,溫度 = 冷)
  • P(適合外出 = 是|天氣 = 晴天,溫度 = 冷) = P(晴天|是) • P(冷|是) • P(是)

比較不同類別的後驗機率,選擇最大者作為預測結果。



Naive Bayes 的實際應用範例

範例一:垃圾郵件分類(文本分類問題)

目標:使用 Naive Bayes 分類器區分垃圾郵件和正常郵件。

步驟:

  1. 導入必要的函式庫
  2. 加載範例數據
  3. 特徵提取(CountVectorizer / TfidfVectorizer)
  4. 使用 Naive Bayes 訓練模型
  5. 評估模型性能

程式碼:

# 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. 導入資料集
  2. 數據切分
  3. 模型訓練
  4. 模型預測與評估


程式碼:

# 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):檢查分類結果的錯誤類型。
avatar-img
JayRay 的沙龍
11會員
23內容數
留言
avatar-img
留言分享你的想法!
JayRay 的沙龍 的其他內容
數據洩漏是在機器學習和數據分析中,因不當使用資料而造成的模型性能評估錯誤。這篇文章探討數據洩漏的常見形式及其對模型可靠性的影響,並提供防範措施,如嚴格劃分數據集、僅對訓練集進行預處理和使用交叉驗證。瞭解這些概念有助於構建更穩健的數據驅動模型。
本文探討四個關鍵的分類模型評估指標:準確率、精確率、召回率與 F1-Score。這些指標各自從不同角度反映模型的預測性能,理解它們的定義、計算方式和適用情境,能夠幫助您在數據分析和機器學習項目中做出更優的決策。
本文探討了聚類算法中常用的效果評估指標,包括內部和外部指標,並詳細介紹了輪廓係數、群集內距離平方和(WCSS)及Davies-Bouldin指數三種主要指標的計算方法、優缺點與應用場景。這些指標各有特點,適用於不同的聚類場景,有助於有效評估聚類質量,提升無監督學習的效能。
這篇文章深入探討了數據科學與機器學習中的主要聚類算法,包括 K-means、DBSCAN 和層次聚類。介紹了每種算法的工作原理、優缺點及其適用場景,幫助讀者理解何時選擇何種聚類技術。本文還提供了相關的程式碼範例,方便讀者進一步學習與實踐。
虛擬變數陷阱(Dummy Variable Trap)是指在進行One-Hot Encoding時,生成的虛擬變數之間存在完全多重共線性,影響回歸模型的準確性。透過具體的例子,本文探討瞭如何避免這個陷阱,以提升機器學習模型的效果與穩定性。
XGBoost(eXtreme Gradient Boosting)是一種基於梯度提升框架的機器學習算法,專注於高效的分類與迴歸問題。它廣泛應用於數據分析和競賽中,因其出色的模型訓練能力。本文探討 XGBoost 實際中的實作,適合希望掌握此技術的讀者,並對模型調參提供有價值的技巧與建議。
數據洩漏是在機器學習和數據分析中,因不當使用資料而造成的模型性能評估錯誤。這篇文章探討數據洩漏的常見形式及其對模型可靠性的影響,並提供防範措施,如嚴格劃分數據集、僅對訓練集進行預處理和使用交叉驗證。瞭解這些概念有助於構建更穩健的數據驅動模型。
本文探討四個關鍵的分類模型評估指標:準確率、精確率、召回率與 F1-Score。這些指標各自從不同角度反映模型的預測性能,理解它們的定義、計算方式和適用情境,能夠幫助您在數據分析和機器學習項目中做出更優的決策。
本文探討了聚類算法中常用的效果評估指標,包括內部和外部指標,並詳細介紹了輪廓係數、群集內距離平方和(WCSS)及Davies-Bouldin指數三種主要指標的計算方法、優缺點與應用場景。這些指標各有特點,適用於不同的聚類場景,有助於有效評估聚類質量,提升無監督學習的效能。
這篇文章深入探討了數據科學與機器學習中的主要聚類算法,包括 K-means、DBSCAN 和層次聚類。介紹了每種算法的工作原理、優缺點及其適用場景,幫助讀者理解何時選擇何種聚類技術。本文還提供了相關的程式碼範例,方便讀者進一步學習與實踐。
虛擬變數陷阱(Dummy Variable Trap)是指在進行One-Hot Encoding時,生成的虛擬變數之間存在完全多重共線性,影響回歸模型的準確性。透過具體的例子,本文探討瞭如何避免這個陷阱,以提升機器學習模型的效果與穩定性。
XGBoost(eXtreme Gradient Boosting)是一種基於梯度提升框架的機器學習算法,專注於高效的分類與迴歸問題。它廣泛應用於數據分析和競賽中,因其出色的模型訓練能力。本文探討 XGBoost 實際中的實作,適合希望掌握此技術的讀者,並對模型調參提供有價值的技巧與建議。