機器學習 - 樸素貝葉斯演算法



樸素貝葉斯演算法是一種基於貝葉斯定理的分類演算法。該演算法假設特徵之間相互獨立,因此被稱為“樸素”。它根據特徵的機率計算樣本屬於特定類別的機率。例如,如果一部手機具有觸控式螢幕、網際網路功能、良好的攝像頭等,則可以將其視為智慧手機。即使所有這些特徵相互依賴,但所有這些特徵都獨立地影響著手機是智慧手機的機率。

在貝葉斯分類中,主要目的是找到後驗機率,即給定一些觀察到的特徵的標籤機率,P(𝐿L | 特徵)。藉助貝葉斯定理,我們可以用定量形式表達如下:

$$P\left ( L| 特徵\right )=\frac{P\left ( L \right )P\left (特徵| L\right )}{P\left (特徵\right )}$$

這裡,

  • $P\left ( L| 特徵\right )$ 是類的後驗機率。

  • $P\left ( L \right )$ 是類的先驗機率。

  • $P\left (特徵| L\right )$ 是似然度,即給定類的預測變數的機率。

  • $P\left (特徵\right )$ 是預測變數的先驗機率。

在樸素貝葉斯演算法中,我們使用貝葉斯定理來計算樣本屬於特定類別的機率。我們計算給定類別下樣本每個特徵的機率,並將它們相乘以獲得樣本屬於該類別的似然度。然後,我們將似然度乘以該類別的先驗機率,以獲得樣本屬於該類別的後驗機率。我們對每個類別重複此過程,並選擇機率最高的類別作為樣本的類別。

樸素貝葉斯演算法的型別

樸素貝葉斯演算法有三種類型:

  • 高斯樸素貝葉斯 - 當特徵是服從正態分佈的連續變數時,使用此演算法。它假設每個特徵的機率分佈是高斯分佈,這意味著它是一個鐘形曲線。

  • 多項式樸素貝葉斯 - 當特徵是離散變數時,使用此演算法。它通常用於文字分類任務,其中特徵是文件中單詞的頻率。

  • 伯努利樸素貝葉斯 - 當特徵是二元變數時,使用此演算法。它也常用於文字分類任務,其中特徵是文件中是否存在某個單詞。

Python 實現

在這裡,我們將使用 Python 實現高斯樸素貝葉斯演算法。我們將使用鳶尾花資料集,這是一個用於分類任務的流行資料集。它包含 150 個鳶尾花的樣本,每個樣本具有四個特徵:萼片長度、萼片寬度、花瓣長度和花瓣寬度。這些花屬於三個類別:山鳶尾、雜色鳶尾和維吉尼亞鳶尾。

首先,我們將匯入必要的庫並載入資料集:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# load the iris dataset
iris = load_iris()

# split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=0)

然後,我們建立高斯樸素貝葉斯分類器的例項,並在訓練集上對其進行訓練:

# Create a Gaussian Naive Bayes classifier
gnb = GaussianNB()

#fit the classifier to the training data:
gnb.fit(X_train, y_train)

現在,我們可以使用訓練好的分類器對測試集進行預測:

#make predictions on the testing data
y_pred = gnb.predict(X_test)

我們可以透過計算其準確率來評估分類器的效能:

#Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test) print("Accuracy:", accuracy)

完整實現示例

下面是使用鳶尾花資料集在 python 中實現樸素貝葉斯分類演算法的完整實現示例:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# load the iris dataset
iris = load_iris()

# split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=0)

# Create a Gaussian Naive Bayes classifier
gnb = GaussianNB()

#fit the classifier to the training data:
gnb.fit(X_train, y_train)

#make predictions on the testing data
y_pred = gnb.predict(X_test)

#Calculate the accuracy of the classifier
accuracy = np.sum(y_pred == y_test) / len(y_test)
print("Accuracy:", accuracy)

輸出

執行此程式時,將生成以下輸出:

Accuracy: 0.9622641509433962
廣告