一、簡介
多項式樸素貝葉斯(Multinomial Naive Bayes)是一種基於貝葉斯定理的分類演算法。它假設每個特徵的概率分布都是多項式分布,因此被稱為多項式樸素貝葉斯。該演算法具有簡單、快速、準確等特點,常應用於文本分類、垃圾郵件過濾和情感分析等領域。
二、貝葉斯定理
首先讓我們了解一下貝葉斯定理,它是概率論的重要理論基礎之一。貝葉斯定理表明,當已知某個假設和一些證據時,可以利用貝葉斯定理計算該假設在給定證據的條件下的後驗概率。其中,P(A|B) 表示在 B 發生的條件下 A 發生的概率,P(B|A) 表示在 A 發生的條件下 B 發生的概率,P(A) 和 P(B) 分別表示 A、B 發生的先驗概率。
P(A|B) = P(B|A) * P(A) / P(B)
三、多項式樸素貝葉斯演算法
在文本分類問題中,通常將文本表示成詞袋模型,即將每個文本看作一個由詞語構成的集合,忽略詞語的順序和語法。設一個文本包含 n 個詞,表示為 w1, w2, …, wn,其所屬類別為 C。則由貝葉斯定理可以得到:
P(C|w1,w2,...,wn) = P(C) * P(w1,w2,...,wn|C) / P(w1,w2,...,wn)
其中,P(C) 為文本屬於 C 類的先驗概率,P(w1,w2,…,wn|C) 表示在 C 類下,文本所包含的詞語的聯合概率,可以近似地表示為每個詞語在 C 類中出現的概率的乘積,即:
P(w1,w2,...,wn|C) ≈ P(w1|C) * P(w2|C) * ... * P(wn|C)
由此可得:
P(C|w1,w2,...,wn) ≈ P(C) * P(w1|C) * P(w2|C) * ... * P(wn|C) / P(w1,w2,...,wn)
為了簡化計算,通常對分母 P(w1,w2,…,wn) 進行省略,因為它對所有類別的條件概率密度函數都是相同的。因此,最終可得:
P(C|w1,w2,...,wn) ≈ P(C) * Π P(wi|C)
四、擬合模型
對於擬合文本分類模型,需要進行以下步驟:
1. 準備數據集
首先,需要準備一個文本分類的數據集。可以從網上下載,例如以新聞內容為例的新聞數據集。
2. 構建詞袋模型
對於文本中出現的每個詞,統計它們出現的次數並進行編號。然後將每個文本表示成一個向量,長度為詞典大小,其中每個元素表示對應詞出現的次數。
import numpy as np from sklearn.feature_extraction.text import CountVectorizer text = ["This is a good product.", "This is a bad product."] vectorizer = CountVectorizer() X = vectorizer.fit_transform(text) print(vectorizer.get_feature_names(), X.toarray()) # Output: ['bad', 'good', 'is', 'product', 'this'] [[1 1 1 1 1] [1 0 1 1 1]]
3. 計算類別的先驗概率
統計訓練集中每個類別所佔的比例。
y_train = np.array([0, 1]) # 0表示好評,1表示差評 prior = np.bincount(y_train) / len(y_train) print("prior probability:", prior) # Output: [0.5 0.5]
4. 計算每個類別下每個詞出現的概率
統計訓練集中每個類別下每個詞出現的次數,然後計算每個詞在每個類別下的概率。
X_train = X.toarray() cond_prob = np.zeros((2, X_train.shape[1])) # 2表示有兩個類別,shape[1]表示詞典大小 for i in range(2): cond_prob[i] = X_train[y_train==i].sum(axis=0) / X_train[y_train==i].sum() print("conditional probability:", cond_prob) # Output: [[0. 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667] [0.14285714 0.14285714 0.14285714 0.14285714 0.21428571 0.14285714 0.07142857]]
5. 預測結果
對於一個新的文本,將它表示成一個向量,然後根據貝葉斯定理計算它屬於每個類別的後驗概率,最終選擇後驗概率最大的類別。
X_test = vectorizer.transform(["This is a very good product."]).toarray() posterior = np.zeros(2) for i in range(2): posterior[i] = prior[i] * np.prod(X_test ** cond_prob[i] * (1 - X_test) ** (1-cond_prob[i])) pred = np.argmax(posterior) print("predicted class:", pred) # Output: predicted class: 0 (即好評)
五、總結
多項式樸素貝葉斯演算法是一種簡單、快速、準確的分類演算法,可應用於文本分類、垃圾郵件過濾和情感分析等領域。該演算法的核心思想是基於貝葉斯定理和樸素貝葉斯假設,通過統計訓練集中每個類別下每個詞出現的概率來計算後驗概率,從而實現分類。通過構建詞袋模型、計算先驗概率和條件概率,可以訓練出一個文本分類模型。預測時,將測試集表示成一個向量,根據模型計算後驗概率後選擇後驗概率最大的類別。如果是多分類問題,可以採用一對多的方法來處理。
原創文章,作者:QCBEA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/368632.html