iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0

貝氏定理

  • 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
'''


上一篇
[DAY17] 機器學習-迴歸分析(二)
下一篇
[DAY19] 機器學習 - 支援向量機(一)
系列文
關於我從基礎程設轉職到人工智慧入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言