
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 入門
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 必備技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 侷限性
- ML - 真實案例
- ML - 資料結構
- ML - 數學
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習 vs. 無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- 機器學習中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- 機器學習中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- 機器學習中的聚類演算法
- ML - 聚類演算法
- ML - 基於質心的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚層次聚類
- 機器學習中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 後退消除法
- ML - 前向特徵構造
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精確率和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 輪次
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 資訊熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的盈利模式
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試問題
- ML - 有用資源
- ML - 討論
機器學習 - 樸素貝葉斯演算法
樸素貝葉斯演算法是一種基於貝葉斯定理的分類演算法。該演算法假設特徵之間相互獨立,因此被稱為“樸素”。它根據特徵的機率計算樣本屬於特定類別的機率。例如,如果一部手機具有觸控式螢幕、網際網路功能、良好的攝像頭等,則可以將其視為智慧手機。即使所有這些特徵相互依賴,但所有這些特徵都獨立地影響著手機是智慧手機的機率。
在貝葉斯分類中,主要目的是找到後驗機率,即給定一些觀察到的特徵的標籤機率,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