貝氏定理
- P(A∣B) = P(B∣A)⋅P(A)/P(B)
- P(A∣B):表示在事件B發生的條件下,事件A發生的機率,稱為後驗機率。
- P(B∣A):表示在事件A發生的條件下,事件B發生的機率。
- P(A):表示事件A的先驗機率,即在不考慮其他信息的情況下,事件A發生的機率。
- P(B):表示事件B的先驗機率,即在不考慮其他信息的情況下,事件B發生的機率。
樸素/簡單貝氏分類器 & 高斯 & 多項式 & 白努利
樸素貝氏分類器 (Naive Bayes Classifier)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
corpus = ["這是一封非垃圾郵件", "這是一封垃圾郵件", "垃圾郵件真煩人", "非垃圾郵件很重要"]
# 將文本轉換為特徵向量
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
y = [0, 1, 1, 0] # 0表示非垃圾郵件,1表示垃圾郵件
# 創建樸素貝氏分類器
clf = MultinomialNB()
clf.fit(X, y)
# 預測新的文本消息
new_message = ["這是一封重要的郵件"]
X_new = vectorizer.transform(new_message)
prediction = clf.predict(X_new)
if prediction[0] == 0:
print("這是一封非垃圾郵件")
else:
print("這是一封垃圾郵件")
高斯貝氏分類器 (Gaussian Naive Bayes)
多項式貝氏分類器 (Multinomial Naive Bayes)
- 多項式貝氏分類器通常用於處理離散數據,例如文本數據中的單詞計數。
伯努利貝氏分類器 (Bernoulli Naive Bayes)
- 伯努利貝氏分類器通常用於處理二進制數據,例如文本數據中的單詞是否存在。
from sklearn.naive_bayes import GaussianNB # 高斯貝氏分類器 GaussianNB
from sklearn.naive_bayes import MultinomialNB # 多項式貝氏分類器 MultinomialNB
from sklearn.naive_bayes import BernoulliNB # 伯努力貝氏分類器 Bernoulli NB
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
X=iris.data
Y=iris.target
# 拆分成訓練集與測試集
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
model=GaussianNB() # 這裡使用高斯貝氏分類器
model.fit(X_train,y_train)
print("GaussianNB")
print(model.predict(X_test)) # 印出測試的預測結果
print(y_test) # 印出測試答案
print(model.score(X_test,y_test)) # 印出預測準度
# ---------------------------------------------------------------------
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
model=MultinomialNB () # 這裡使用多項氏貝氏分類器
model.fit(X_train,y_train)
print("MultinomialNB")
print(model.predict(X_test)) # 印出測試的預測結果
print(y_test) # 印出測試答案
print(model.score(X_test,y_test)) # 印出預測準度
# ---------------------------------------------------------------------
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
model=BernoulliNB () # 這裡使用白努力貝氏分類器
model.fit(X_train,y_train)
print("BernoulliNB")
print(model.predict(X_test)) # 印出測試的預測結果
print(y_test) # 印出測試答案
print(model.score(X_test,y_test)) # 印出預測準度
'''
GaussianNB:
預測結果:[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]
測試答案:[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]
預測準確度:1.0
MultinomialNB:
預測結果:[2 2 0 2 0 2 0 2 2 2 2 2 2 2 2 0 2 2 0 0 2 2 0 0 2 0 0 2 2 0 2 2 0 2 2 2 0 2 2 2 2 0 2 0 0]
測試答案:[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]
預測準確度:0.6
BernoulliNB:
預測結果:[2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
測試答案:[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0 1 1 1 2 0 2 0 0]
預測準確度:0.24444444444444444
'''