Naive Bayes(中譯為樸素貝葉斯、簡單貝葉斯或是簡單貝氏模型等)是一種基於貝葉斯定理的機器學習分類演算法,廣泛應用於文本分類、垃圾郵件檢測、情感分析等任務。它被稱為「Naive」(樸素),因為它假設所有特徵之間是相互獨立的,這在現實情況下很少成立,但這種簡化使模型計算更高效,並且在實踐中往往效果良好。
Naive Bayes 可以同時接受離散型變數和連續型變數。透過計算,我們可以知道在已知的資料下哪個目標的發生機率最大,由此去做分類。
# 可使用目錄功能快速確認要閱覽的主題
1. 特徵條件獨立性假設
2. 無法捕捉複雜的非線性關係
4. 特徵數據類型限制
貝葉斯定理描述了給定某些證據下,一個事件發生的條件機率,公式如下:
Naive Bayes 的「Naive」(天真)指的是它假設所有特徵是條件獨立的,即在給定標籤 Y 的條件下,各個特徵 X1 , X2 , ... , Xn 之間互相獨立:
這個假設簡化了計算,使得模型在處理高維度數據時能夠保持高效。
目標是計算每個類別 Y 的後驗機率 P(Y|X),並選擇機率最大的類別作為預測結果:
最終步驟:選擇後驗機率最高的類別作為預測結果。
4-1 Gaussian Naive Bayes(高斯 Naive Bayes)
4-2 Multinomial Naive Bayes(多項式 Naive Bayes)
4-3 Bernoulli Naive Bayes(伯努利 Naive Bayes)
假設我們要根據天氣和溫度預測是否適合外出。
步驟:
比較不同類別的後驗機率,選擇最大者作為預測結果。
目標:使用 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))
解釋:
目標:使用 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))
解釋: