樸素貝葉斯三大概率模型學習總結與手寫數字識別實踐

一、樸素貝葉斯模型分類與核心原理

樸素貝葉斯算法的核心是基于 “特征條件獨立性假設”,通過貝葉斯公式計算后驗概率實現分類。根據特征數據類型的差異,衍生出三大經典模型,分別適用于不同場景,其核心區別在于對 “特征條件概率” 的計算方式不同。

1.1 多項式樸素貝葉斯(MultinomialNB)

適用場景
  • 特征為離散型數據,尤其是文本分類(如統計單詞出現次數、TF-IDF 值)、物品計數等場景。
  • 典型案例:垃圾郵件分類(統計 “優惠”“中獎” 等關鍵詞的出現頻次)、新聞主題分類。
核心原理
  • 假設特征服從多項式分布,即特征值代表 “事件發生的次數”(如單詞在文本中出現的次數)。
  • 計算條件概率時,需引入拉普拉斯平滑(通過alpha參數控制),避免因某些特征未出現導致概率為 0 的問題。
關鍵參數(sklearn 實現)
參數類型默認值功能說明
alpha浮點型1.0拉普拉斯平滑系數:alpha=0表示不平滑,alpha>0時,值越大平滑效果越強
fit_prior布爾型True是否使用先驗概率:True 時基于數據計算先驗,False 時假設所有類別先驗概率相等
class_prior數組型None自定義類別先驗概率:若指定,則忽略fit_prior的設置

1.2 高斯樸素貝葉斯(GaussianNB)

適用場景
  • 特征為連續型數據(如身高、體重、溫度等數值型特征),無法通過 “計數” 描述的場景。
  • 典型案例:鳶尾花品種分類(花瓣長度、寬度為連續值)、房價區間預測(面積、樓層為連續值)。
核心原理
  • 假設特征服從正態分布(高斯分布),通過計算樣本中每個類別下特征的均值和標準差,構建正態分布概率密度函數,進而求解條件概率。
  • 無需手動設置平滑參數,模型會自動通過極大似然法估計正態分布的參數(均值、方差)。
關鍵參數(sklearn 實現)
參數類型默認值功能說明
priors數組型None自定義類別先驗概率:若為 None,模型通過樣本數據自動計算(極大似然法)

1.3 伯努利樸素貝葉斯(BernoulliNB)

適用場景
  • 特征為二值離散型數據(僅取值 0 或 1),即 “特征是否存在” 而非 “特征出現次數” 的場景。
  • 典型案例:文本分類(單詞是否在文本中出現,1 = 出現,0 = 未出現)、用戶行為分析(是否點擊某按鈕,1 = 點擊,0 = 未點擊)。
核心原理
  • 假設特征服從伯努利分布(0-1 分布),僅關注特征 “是否發生”,不關注發生次數。
  • 需通過binarize參數將非二值特征轉換為二值(若特征已二值化,可設為 None),同時支持拉普拉斯平滑(alpha參數)。
關鍵參數(sklearn 實現)
參數類型默認值功能說明
alpha浮點型1.0拉普拉斯平滑系數,作用同 MultinomialNB
binarize浮點型 / None0特征二值化閾值:若為x,則特征值 > x 設為 1,否則設為 0;None 表示特征已二值化
fit_prior布爾型True是否使用先驗概率,作用同 MultinomialNB
class_prior數組型None自定義類別先驗概率,作用同 MultinomialNB

1.4 三大模型對比與選擇指南

模型適用特征類型核心假設關鍵參數典型場景
多項式樸素貝葉斯離散型(計數數據)特征服從多項式分布alphafit_prior文本分類(單詞頻次)、商品銷量分類
高斯樸素貝葉斯連續型數據特征服從正態分布priors數值型特征分類(鳶尾花、房價)
伯努利樸素貝葉斯二值離散型(0/1)特征服從伯努利分布alphabinarize文本分類(單詞存在性)、用戶行為分析

二、樸素貝葉斯模型通用 API(sklearn)

sklearn 中三種樸素貝葉斯模型的接口完全一致,核心方法如下,便于快速切換模型進行實驗:

方法功能描述
fit(X, y)用訓練集(X:特征矩陣,y:標簽)擬合模型,學習概率參數
predict(X)對測試集 X 進行分類預測,返回每個樣本的類別標簽
predict_proba(X)返回測試集 X 屬于每個類別的概率(概率和為 1)
predict_log_proba(X)返回predict_proba(X)的對數形式(避免概率過小導致的數值下溢)
score(X, y)計算模型在數據集(X,y)上的準確率(正確預測數 / 總樣本數)

三、課后練習:樸素貝葉斯實現手寫數字識別

3.1 任務背景

手寫數字數據集(load_digits)包含 8×8 像素的灰度圖像(共 1797 個樣本),每個樣本的特征是 64 個連續值(0-16,代表像素灰度),標簽是 0-9 的數字。需選擇合適的樸素貝葉斯模型實現分類,并評估性能。

3.2 模型選擇依據

  • 特征類型:64 個像素值為連續型數據(0-16 的整數,本質是連續區間內的離散化表示)。
  • 模型匹配:連續型特征適合使用高斯樸素貝葉斯(GaussianNB),無需手動處理特征分布,直接通過正態分布擬合像素值概率。

3.3 完整代碼實現

python

運行

# 1. 導入必要庫
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.naive_bayes import GaussianNB  # 選擇高斯樸素貝葉斯
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix# 2. 加載并探索數據集
digits = load_digits()
print("數據集基本信息:")
print(f"樣本數量:{digits.data.shape[0]}, 特征數量(像素數):{digits.data.shape[1]}")
print(f"類別數量(數字0-9):{len(digits.target_names)}")
print(f"像素值范圍:{digits.data.min()} ~ {digits.data.max()}")# 可視化前4個樣本(驗證數據格式)
plt.figure(figsize=(8, 4))
for i in range(4):plt.subplot(1, 4, i+1)# 將64維特征重塑為8×8圖像plt.imshow(digits.images[i], cmap=plt.cm.gray_r)plt.title(f"Label: {digits.target[i]}")plt.axis("off")
plt.show()# 3. 數據預處理:劃分訓練集與測試集
# 隨機劃分,測試集占比30%,固定隨機種子確保結果可復現
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.3, random_state=42
)
print(f"\n訓練集大小:{X_train.shape}, 測試集大小:{X_test.shape}")# 4. 初始化并訓練高斯樸素貝葉斯模型
model = GaussianNB()
model.fit(X_train, y_train)  # 擬合模型,學習每個類別下特征的正態分布參數# 5. 模型預測與性能評估
# 5.1 測試集預測
y_pred = model.predict(X_test)  # 類別預測
y_pred_proba = model.predict_proba(X_test)  # 類別概率預測(可選)# 5.2 核心指標:準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n模型在測試集上的準確率:{accuracy:.4f}")# 5.3 詳細評估:分類報告(精確率、召回率、F1分數)
print("\n分類報告(精確率/召回率/F1分數):")
print(classification_report(y_test, y_pred, target_names=[str(i) for i in digits.target_names]
))# 5.4 混淆矩陣:分析各類別預測錯誤情況
conf_matrix = confusion_matrix(y_test, y_pred)
print("\n混淆矩陣(行:真實標簽,列:預測標簽):")
print(conf_matrix)# 6. 錯誤案例分析(可選):查看前3個預測錯誤的樣本
error_indices = np.where(y_pred != y_test)[0][:3]  # 前3個錯誤樣本的索引
plt.figure(figsize=(8, 3))
for i, idx in enumerate(error_indices):plt.subplot(1, 3, i+1)plt.imshow(X_test[idx].reshape(8, 8), cmap=plt.cm.gray_r)plt.title(f"True: {y_test[idx]}, Pred: {y_pred[idx]}")plt.axis("off")
plt.show()

3.4 結果分析

1. 基礎性能
  • 模型在測試集上的準確率約為0.83-0.85(因隨機劃分可能略有波動,固定random_state=42后準確率為 0.8426)。
  • 從分類報告可見:數字 “0”“1”“6” 的 F1 分數接近 1.0,分類效果極佳;數字 “8”“9” 的 F1 分數較低(約 0.75),因這兩個數字的像素分布更相似,易混淆。
2. 混淆矩陣解讀
  • 對角線元素表示 “正確預測數”,非對角線元素表示 “錯誤預測數”。
  • 例如:混淆矩陣中conf_matrix[8,9](真實為 8,預測為 9)的值較大,說明模型易將 “8” 誤判為 “9”,需后續優化(如增加特征工程、換用其他模型)。
3. 錯誤案例可視化
  • 錯誤樣本的圖像顯示:“8” 與 “9” 的區別僅在于底部是否有缺口,像素差異小,導致高斯樸素貝葉斯的正態分布假設難以區分,這是模型性能瓶頸的主要原因。

四、學習總結與拓展思考

4.1 核心收獲

  1. 模型選型邏輯:根據特征類型選擇樸素貝葉斯模型是關鍵 —— 離散計數用多項式、連續值用高斯、二值特征用伯努利,避免 “錯配” 導致的性能損失。
  2. 高斯模型特點:無需手動處理連續特征的分布,實現簡單、速度快,但對 “特征獨立” 假設敏感(如手寫數字中相鄰像素存在相關性,會影響模型精度)。
  3. 評估維度:除準確率外,需通過混淆矩陣、分類報告分析 “類別級” 性能,定位易混淆類別,為優化提供方向。

4.2 優化方向

  1. 特征工程:對像素特征進行預處理(如二值化、邊緣檢測),增強數字間的區分度,可嘗試用伯努利樸素貝葉斯重新實驗。
  2. 模型改進:若需更高精度,可換用非樸素貝葉斯模型(如 SVM、隨機森林),或通過 “貝葉斯網絡” 放松 “特征獨立” 假設。
  3. 超參數調優:對高斯樸素貝葉斯的priors參數進行自定義(如根據訓練集中各類別樣本占比調整先驗概率),可能提升少數類別的召回率。

通過本次實踐,不僅掌握了三種樸素貝葉斯模型的應用場景與代碼實現,更理解了 “模型假設與數據特性匹配” 的重要性 —— 樸素貝葉斯的 “樸素” 既是其優勢(計算快),也是其局限(依賴獨立假設),需在實際任務中靈活權衡。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94547.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習Java26天(線程方法和線程安全)(synchronized)

170/199線程安全問題同步代碼塊同步方法以及lock鎖同步方法Lock鎖finally不管上面是否異常都會執行

網絡協議---TCP

一、UDP協議1. 核心特點數據傳輸方式:面向數據包傳輸。連接特性:無需建立連接即可通信。可靠性:盡最大努力交付,存在數據丟包、亂序等問題,安全性和可靠性較低。傳輸范圍:支持一對一、一對多的傳輸模式。資…

構建AI智能體:十三、大數據下的“搭積木”:N-Gram 如何實現更智能的語義搜索

一、什么是 N-gram核心定義:N-gram 是來自給定文本或語音序列的 N 個連續項(如單詞、字符) 的序列。它是一種通過查看一個項目的前后文來建模序列的概率模型。N: 代表連續項的數量。項(Item): 通…

嵌入式系統學習Day22(進程)

無人機運行程序,時間貼合阻塞態:程序運行到scanf或gets時的狀態linux是搶占式操作系統,優先級高的調度高,優先級相同在同樣時間內調度相同ip為指針,指向目前已讀到進程的位置,回寫到磁盤,進行下…

【51單片機】【protues仿真】基于51單片機冰箱系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、LCD1602液晶顯示冷藏冷凍溫度值 2、按鍵設置溫度閾值? 3、冷藏或冷凍溫度高于閾值啟動制冷片 4、限位器開關檢測門狀態,開門過長蜂鳴器警報 5、狀態指示燈&#xf…

征程 6X 常用工具介紹

一、采集/設置系統信息的工具集 獲取開發板 SOM 狀態工具 [LINUX] hrut_somstatus 是用來獲取當前開發板SOM狀態的工具,包含溫度、 cpu頻率、bpu狀態。 用法: hrut_somstatus [-n count] [-d second]獲取開發板boardid工具 [LINUX] hrut_boardid 是用來獲…

數字隔離器:新能源系統的安全與效能革命

在新能源技術高速發展的浪潮中,高壓、高頻、高可靠性的需求對系統設計提出全新挑戰。傳統隔離器件受限于響應速度、抗干擾能力及體積限制,逐漸難以滿足光伏發電、電動汽車、儲能系統等場景的嚴苛要求。數字隔離器以創新的半導體技術為核心,通…

算法訓練營day58 圖論⑧ 拓撲排序精講、dijkstra(樸素版)精講

本篇應該是圖論的經典部分了,本篇的內容作為小白沒有了解過,但是至少會聽說過——拓撲排序精講、dijkstra(樸素版)精講。 拓撲排序精講 本題是拓撲排序的經典題目。一聊到 拓撲排序,一些錄友可能會想這是排序&#xf…

如何在日常開發中高效使用 Copilot

網羅開發(小紅書、快手、視頻號同名)大家好,我是 展菲,目前在上市企業從事人工智能項目研發管理工作,平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術,包括iOS、前端、Harmony OS、Java、Python等方…

使用Docker部署Coze Studio開源版

1、安裝Docker# 安裝Docker https://docs.docker.com/get-docker/# 安裝Docker Compose https://docs.docker.com/compose/install/# CentOS安裝Docker https://mp.weixin.qq.com/s/nHNPbCmdQs3E5x1QBP-ueA2、安裝Coze Studio詳見:https://github.com/coze-dev/coze…

深度剖析Spring AI源碼(九):構建企業知識庫,深入ETL與RAG實現

深度剖析Spring AI源碼(九):構建企業知識庫,深入ETL與RAG實現 “Data is the new oil, but like oil, it’s valuable only when refined.” —— 在AI時代,原始數據需要經過精心的ETL處理才能成為AI的"燃料"…

C# 簡單工廠模式:構建靈活與可擴展的面向對象程序

在面向對象編程(OOP)的世界中,簡單工廠模式(Simple Factory Pattern) 是一種非常常見且實用的設計模式。雖然它并不屬于GoF(Gang of Four)定義的23種經典設計模式之一,但它是理解更復…

全面解析JVM預熱:原理、價值與實踐指南

在Java應用的性能優化領域,“JVM預熱”是一個常被提及卻容易被忽視的關鍵環節。尤其是在高并發、低延遲的業務場景中,未經過充分預熱的JVM可能導致應用啟動初期出現響應延遲、吞吐量波動甚至服務不可用的問題。本文將從JVM預熱的核心原理出發,深入剖析其價值、常見實現方案及…

數學建模-灰色關聯分析(GRA)

目錄 1-AI帶你認識GRA 📘 一、灰色關聯分析(GRA)簡介 1. 什么是灰色關聯分析? 2. 核心思想(通俗理解): 3. 與熵權法的對比(快速類比): 🧩 二…

Shell腳本-expect

一、前言在 Linux 系統管理與自動化運維中,我們經常需要編寫 Shell 腳本來完成各種任務。但有些命令(如 ssh、scp、passwd、ftp 等)在執行時會等待用戶手動輸入密碼或確認信息,這就導致腳本無法完全自動化運行。為了解決這個問題&…

Conmi的正確答案——Ubuntu24.04禁用任何休眠

系統:Ubuntu 24.04步驟一、禁用系統休眠服務 # 禁用所有休眠/待機相關服務(立即生效) sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target # 驗證狀態(顯示 "masked" 即成功&am…

開源 C++ QT Widget 開發(二)基本控件應用

文章的目的為了記錄使用C 進行QT Widget 開發學習的經歷。臨時學習,完成app的開發。開發流程和要點有些記憶模糊,趕緊記錄,防止忘記。 相關鏈接: 開源 C QT Widget 開發(一)工程文件結構-CSDN博客 開源 C…

今日科技風向|從AI芯片定制到閱兵高科技展示——聚焦技術前沿洞察

今日科技風向|從AI芯片定制到閱兵高科技展示——聚焦技術前沿洞察 一、NVIDIA 開發“黑曜”子版 AI 芯片 B30A,瞄準中國市場 今日報道指出,NVIDIA 正在研發一款面向中國市場的定制芯片 B30A,基于其先進的 Blackwell 架構&#xff…

Elasticsearch官方文檔學習-未完待續

Elasticsearch官方文檔學習-未完待續說明快速開始基礎知識索引組成1. 文檔 (Documents)2. 元數據字段(Metadata fields)3. 映射和數據類型(Mappings and data types)文檔操作(Document)批量創建或者刪除文檔 (Bulk index or delete documents)樂觀并發控制 Optimistic concurre…

Redis資料

Redis是什么? Redis(Remote Dictionary Server)是一個開源的、基于內存的鍵值數據庫,支持多種數據結構,可用作數據庫、緩存和消息中間件。主要特點包括: 基于內存操作,讀寫性能極高支持持久化,可將內存數…