演算法金 | AI 基石,無處不在的樸素貝葉斯演算法

算法金「全网同名」發表於2024-06-10


大俠幸會,在下全網同名「演算法金」 0 基礎轉 AI 上岸,多個演算法賽 Top 「日更萬日,讓更多人享受智慧樂趣」

歷史上,許多傑出人才在他們有生之年默默無聞,

卻在逝世後被人們廣泛追憶和崇拜。

18世紀的數學家托馬斯·貝葉斯(Thomas Bayes)便是這樣一位人物

貝葉斯的研究,初看似平凡,其人亦未顯赫。

其論文,逝後一年,方由友手於1763年公諸於世。

如梵高之畫,生前默默無聞,逝後價值倍增。

貝葉斯定理,兩百年沉埋,因違舊學,被疑“非科學”。

但在 20 世紀,這一理論被重新發現並廣泛應用於各個領域,如機器學習、醫學診斷和金融分析等

它是隱藏在 AI 背後的智慧基石。

1. 貝葉斯定理

1.1 基本概念

1.2 數學公式

為了更好地理解貝葉斯定理,我們可以用一個例子來說明。假設我們有一組關於江湖門派的武林高手的資訊:

2. 樸素貝葉斯分類器

2.1 概述

樸素貝葉斯分類器是一種基於貝葉斯定理的簡單但強大的分類演算法。它假設特徵之間是獨立的,即某一特徵的出現與其他特徵的出現沒有關係。儘管這一假設在實際中很少成立,但樸素貝葉斯分類器在許多實際問題中表現非常出色。簡直是神奇絕絕子~

2.2 數學公式

樸素貝葉斯分類器的核心公式如下:

新增圖片註釋,不超過 140 字(可選)

2.3 應用領域

樸素貝葉斯分類器廣泛應用於文字分類、垃圾郵件檢測、情感分析等領域。例如,它可以用來根據電子郵件的內容判斷一封郵件是否為垃圾郵件。

3. 貝葉斯網路

3.1 概述

貝葉斯網路是一種表示變數之間條件依賴關係的有向無環圖。它不僅可以用於機率推斷,還能用於決策分析、因果推理等領域。貝葉斯網路的節點表示隨機變數,邊表示變數之間的條件依賴關係。

3.2 結構與組成

貝葉斯網路由節點和有向邊組成。每個節點對應一個隨機變數,而有向邊表示兩個變數之間的條件依賴關係。貝葉斯網路的結構和條件機率分佈可以透過觀察資料和領域知識來構建。

例如,我們可以構建一個簡單的貝葉斯網路來描述武俠門派之間的關係:

  • 節點 A:門派(少林、武當、峨眉、華山、丐幫)
  • 節點 B:內力水平
  • 節點 C:是否為武林高手

節點 A 和 B 之間有一條有向邊,表示門派影響內力水平;節點 B 和 C 之間有一條有向邊,表示內力水平影響是否為武林高手。

3.3 應用領域

貝葉斯網路廣泛應用於醫學診斷、風險管理、故障檢測等領域。例如,在醫學診斷中,貝葉斯網路可以用來推斷患者的疾病型別及其可能的病因。

更多應用,見演算法金 往期微*公*號 文章: 最經典的一個演算法 - 貝葉斯演算法,附 Python 程式碼

4. 貝葉斯推理

4.1 概述

貝葉斯推理是一種基於貝葉斯定理的推理方法,用於更新對某一事件的信念。它在統計推斷、機器學習、人工智慧等領域具有廣泛應用。貝葉斯推理可以根據新證據不斷調整對事件的機率估計,使其更符合實際情況。

4.2 貝葉斯更新

貝葉斯更新是貝葉斯推理的核心過程。當新的證據出現時,我們可以使用貝葉斯定理來更新事件的機率。例如,假設我們已經知道某人來自少林派,現在我們得到新的證據,該人具有很高的內力。我們可以使用貝葉斯定理來更新該人是武林高手的機率。

4.3 實際應用

為了使大俠更好地理解貝葉斯推理的實際應用,我們用一個包含武俠元素的資料集來演示貝葉斯推理的過程。

4.4 程式碼示範

下面,我們使用貝葉斯更新來進行推理,假設我們有一個包含武俠元素的資料集,並使用 scipy 庫進行推理。

import scipy.stats as stats

# 生成武俠資料集
np.random.seed(42)
data = {
    '門派': np.random.choice(['少林', '武當', '峨眉', '華山', '丐幫'], 100),
    '內力': np.random.randint(50, 150, 100),
    '是否高手': np.random.choice([1, 0], 100, p=[0.3, 0.7])
}
df = pd.DataFrame(data)

# 先驗機率 P(高手|少林)
prior_prob = df[df['門派'] == '少林']['是否高手'].mean()

# 似然函式 P(高內力|高手) 和 P(高內力|少林)
likelihood_high_power_given_master = stats.norm(loc=120, scale=10).pdf(140)  # 高手的高內力分佈
likelihood_high_power_given_shaolin = df[df['門派'] == '少林']['內力'].mean()

# 證據 P(高內力)
evidence = df['內力'].mean()

# 貝葉斯更新
posterior_prob = (likelihood_high_power_given_master * prior_prob) / likelihood_high_power_given_shaolin

print(f'更新後的機率: {posterior_prob:.2f}')

# 視覺化貝葉斯更新過程
labels = ['Prior', 'Likelihood', 'Posterior']
values = [prior_prob, likelihood_high_power_given_master, posterior_prob]

plt.figure(figsize=(10, 6))
plt.bar(labels, values, color=['skyblue', 'lightgreen', 'salmon'])
plt.xlabel('階段')
plt.ylabel('機率')
plt.title('貝葉斯更新過程')
plt.show()

執行後輸出:更新後的機率: 0.73

  1. 先驗(Prior):
  • 先驗機率表示在沒有新證據的情況下,我們對某個事件的初始信念。在這個例子中,先驗機率是某人是少林派的情況下,他是武林高手的機率。
  • 在圖中,先驗機率的條形顯示了我們在新證據(內力水平)出現之前對某人是武林高手的初始信念。
  • 似然(Likelihood):
  • 似然函式表示在給定條件下某個事件發生的可能性。在這個例子中,似然函式是某人是武林高手的情況下,他具有高內力的機率。
  • 圖中顯示的似然機率條形代表瞭如果某人是武林高手,他具有高內力的可能性。
  • 後驗(Posterior):
  • 後驗機率是結合新證據後更新的信念。在這個例子中,後驗機率是某人具有高內力的情況下,他是少林派的武林高手的機率。
  • 圖中後驗機率的條形顯示了在考慮新證據(高內力)後,我們對某人是武林高手的更新後的信念。

具體解釋

  • 先驗機率:大約0.5,表示在沒有額外資訊的情況下,有50%的可能性某人是少林派的武林高手。
  • 似然機率:大約0.024,表示如果某人是武林高手,他具有140內力的可能性較低。
  • 後驗機率:0.73,表示結合新證據(高內力)後,我們更新後的信念,即某人是少林派的武林高手的機率顯著提高。

透過這個視覺化圖表,我們可以清晰地看到貝葉斯更新過程如何結合先驗資訊和新證據來調整對某個事件的機率估計,從而提供更加合理的決策依據。

5. 貝葉斯演算法的優缺點

5.1 優點

大俠,貝葉斯演算法有許多優點,使其在各種應用中廣受歡迎:

  1. 處理不確定性:貝葉斯演算法可以很好地處理不確定性,更新機率以反映新資訊。
  2. 靈活性:適用於多種資料型別和應用場景,無論是分類、迴歸還是決策分析。
  3. 直觀性:貝葉斯定理提供了一個清晰的數學框架,使推理過程直觀且易於解釋。

5.2 缺點

然而,貝葉斯演算法也有其侷限性:

  1. 計算複雜性:當涉及多個變數時,計算量可能會迅速增加,尤其是在大資料集上。
  2. 先驗選擇:先驗機率的選擇對結果有較大影響,且在缺乏領域知識時可能難以確定。
  3. 獨立假設:樸素貝葉斯假設特徵獨立,這在實際中很少成立,可能導致效能下降。

5.3 適用場景

貝葉斯演算法適用於以下場景:

  1. 小資料集:貝葉斯演算法在小資料集上通常表現良好,因為它能有效結合先驗知識。
  2. 不確定性高:在需要處理高不確定性的資料時,貝葉斯演算法表現出色。
  3. 解釋性要求高:當需要解釋模型決策過程時,貝葉斯演算法提供了清晰的框架。

6. 貝葉斯演算法在機器學習中的應用

6.1 自然語言處理

貝葉斯演算法在自然語言處理(NLP)中具有廣泛應用。樸素貝葉斯分類器常用於文字分類任務,如垃圾郵件檢測和情感分析。它透過計算詞語在不同類別中的條件機率來進行分類。

6.2 影像識別

在影像識別領域,貝葉斯演算法可用於處理不確定性。例如,在醫學影像分析中,貝葉斯網路可以結合多個影像特徵來推斷疾病的可能性,提供更準確的診斷。

6.3 其他應用領域

貝葉斯演算法還應用於金融風險管理、市場營銷分析和推薦系統等領域。它能夠處理複雜的機率關係,為決策提供強有力的支援。

程式碼示範

下面,我們將展示貝葉斯演算法在垃圾郵件檢測中的應用,並進行結果的視覺化。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
import random

# 生成武俠郵件資料集
emails = []
labels = []

# 垃圾郵件樣本
spam_phrases = [
    '免費的', '學會這幾招', '武功秘籍', '銀行賬戶有異常活動', '購買武器打折促銷',
    '今日特價', '限時優惠', '點選獲取', '立即下載', '尊敬的大俠'
]

# 正常郵件樣本
ham_phrases = [
    '天氣真好', '適合練功', '信用卡賬單已生成', '今晚有場比武大賽', '好友邀請你加入',
    '武術交流大會', '閉關修煉活動', '誠邀各位大俠', '本月活動', '成為一名弟子'
]

# 生成郵件
for _ in range(1000):
    if random.random() > 0.5:
        email = ','.join(random.sample(spam_phrases, 3))
        emails.append(email)
        labels.append('垃圾郵件')
    else:
        email = ','.join(random.sample(ham_phrases, 3))
        emails.append(email)
        labels.append('正常郵件')

# 特徵提取
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(emails)
y = np.array([1 if label == '垃圾郵件' else 0 for label in labels])

# 資料集劃分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)

# 訓練樸素貝葉斯分類器
nb_classifier = MultinomialNB()
nb_classifier.fit(X_train, y_train)

# 預測
y_pred = nb_classifier.predict(X_test)

# 評估
accuracy = accuracy_score(y_test, y_pred)
conf_matrix = confusion_matrix(y_test, y_pred)

print(f'準確率: {accuracy:.2f}')
print('混淆矩陣:')
print(conf_matrix)

# 視覺化結果
labels = ['正常郵件', '垃圾郵件']
fig, ax = plt.subplots(figsize=(8, 6))
cax = ax.matshow(conf_matrix, cmap=plt.cm.Blues)
plt.title('垃圾郵件檢測的混淆矩陣')
fig.colorbar(cax)
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.xlabel('預測標籤')
plt.ylabel('真實標籤')


[ 抱個拳,總個結 ]

貝葉斯演算法以其處理不確定性的獨特優勢,在統計推斷和機器學習中佔據了重要地位。透過結合先驗知識和新證據,貝葉斯方法能夠動態更新機率,使決策過程更加合理和精確。此外,貝葉斯演算法的直觀性和解釋性也使其在實際應用中非常受歡迎。

貝葉斯演算法的應用前景十分廣闊。它在自然語言處理、影像識別、醫學診斷、金融風險管理等領域已經展現出了巨大的潛力。例如,在自然語言處理中,樸素貝葉斯分類器能夠有效地進行文字分類和情感分析;在醫學影像分析中,貝葉斯網路能夠結合多種特徵進行精確的疾病診斷。

祝在武林的征途上,一帆風順,武運昌隆!

- 科研為國分憂,創新與民造福 -

日更時間緊任務急,難免有疏漏之處,還請大俠海涵 內容僅供學習交流之用,部分素材來自網路,侵聯刪

[ 演算法金,碎碎念 ]

節日安康呀,喵~

全網同名,日更萬日,讓更多人享受智慧樂趣

如果覺得內容有價值,煩請大俠多多 分享、在看、點贊,助力演算法金又猛又持久、很黃很 BL 的日更下去;

同時邀請大俠 關注、星標 演算法金,圍觀日更萬日,助你功力大增、笑傲江湖

相關文章