樸素貝葉斯算法學習總結

一、貝葉斯理論基礎
1. 貝葉斯思想的核心
貝葉斯算法由 18 世紀英國數學家托馬斯?貝葉斯提出,其核心是解決 “逆概” 問題 —— 區別于 “正向概率” 已知條件求結果概率的思路,逆概是通過觀測到的結果,反推導致該結果的原因概率。

比如在日常生活中,“正向概率” 類似 “已知袋子里有 10 個白球和 5 個黑球,摸出黑球的概率是多少”;而 “逆概” 則是 “閉著眼睛摸出 3 個黑球和 2 個白球,推測袋子里黑白球的比例大概是多少”,這也是貝葉斯方法的核心應用場景。
2. 貝葉斯公式的邏輯理解
貝葉斯公式是算法的數學核心,雖然不用公式表達,但可以通過邏輯拆解理解:我們想知道 “在觀測到結果 B 的情況下,原因 A 發生的概率”,這個概率取決于三個關鍵部分 —— 原因 A 本身發生的概率(先驗概率)、在原因 A 發生時結果 B 出現的概率(條件概率),以及結果 B 整體發生的總概率(證據概率)。

在實際對比不同原因的可能性時,結果 B 的總概率往往是固定的,所以可以忽略這部分,只通過 “先驗概率 × 條件概率” 的大小來判斷哪個原因更可能。
3. 經典實例加深理解
(1)學生性別與穿著的推斷
假設某學校男生占 60%、女生占 40%,且男生全部穿長褲,女生一半穿長褲、一半穿裙子。當看到一個穿長褲的學生時,如何推斷其是女生的概率?

首先,計算 “穿長褲” 這個結果的總可能性:既包括男生穿長褲的情況,也包括女生穿長褲的情況。男生穿長褲的比例是 60%×100%=60%,女生穿長褲的比例是 40%×50%=20%,所以穿長褲的總比例是 60%+20%=80%。

而 “穿長褲的女生” 占比是 20%,因此 “穿長褲的學生是女生” 的概率就是 20%÷80%=25%,這就是通過貝葉斯邏輯計算出的逆概結果。
(2)拼寫糾正的應用
當用戶輸入一個不在字典里的錯誤單詞(比如 “tlp”),需要推測其真實想輸入的單詞時,貝葉斯邏輯同樣適用。

我們把用戶輸入的錯誤單詞當作 “觀測結果”,把可能的正確單詞(比如 “top”“tip”)當作 “可能的原因”。判斷哪個原因更合理,需要考慮兩點:一是正確單詞本身在日常使用中出現的頻率(先驗概率),比如 “top” 比 “tip” 更常用,所以 “top” 的先驗概率更高;二是錯誤單詞與正確單詞的相似程度(條件概率),“tlp” 和 “top” 只相差一個字母,比和 “tip” 的差異更小,所以 “tlp 由 top 錯誤生成” 的條件概率更高。

綜合這兩點,就能推斷出用戶更可能想輸入 “top”。
(3)垃圾郵件分類的邏輯
面對一封未知郵件,判斷它是否為垃圾郵件,也可以用貝葉斯思路解決。

首先,“先驗概率” 可以通過郵件庫計算:比如收集 1000 封郵件,其中 300 封是垃圾郵件,那么 “郵件是垃圾郵件” 的先驗概率就是 30%,“是正常郵件” 的先驗概率是 70%。

接著,處理郵件內容這個 “觀測結果”:郵件由多個單詞組成,我們需要計算 “在垃圾郵件中出現這些單詞的概率”(條件概率)。由于樸素貝葉斯假設 “單詞之間相互獨立”,所以不需要考慮單詞的順序,只需分別統計每個單詞在垃圾郵件中出現的頻率,再將這些頻率相乘,就能得到整體的條件概率。

最后,對比 “垃圾郵件先驗概率 × 垃圾郵件條件概率” 和 “正常郵件先驗概率 × 正常郵件條件概率” 的大小,哪個結果更大,就將郵件歸為哪一類。
二、三種核心樸素貝葉斯模型
樸素貝葉斯根據特征數據的類型不同,分為三種常用模型,每種模型的適用場景、參數特點和使用邏輯都有明顯區別:
1. 多項式樸素貝葉斯(MultinomialNB)
這種模型主要適用于離散型數據,尤其是像文本這樣需要統計 “特征出現次數” 的場景。比如在文本分類中,統計每篇文章里每個單詞出現的次數,這些 “次數” 就是離散型特征,適合用多項式模型處理。

它的關鍵參數有三個:一是 “alpha”,作用是添加拉普拉斯平滑 —— 如果某個單詞在某類文本中從未出現,直接計算會出現 “零概率”,導致結果偏差,alpha 設為 1.0(默認值)時會自動修正這種情況,設為 0 則不添加平滑;二是 “fit_prior”,默認是 True,表示計算時會考慮先驗概率,如果設為 False,會假設所有類別的先驗概率相同;三是 “class_prior”,可以手動設置每個類別的先驗概率,默認是 None,此時模型會根據樣本數據自動計算。

在 sklearn 中,只需通過 “from sklearn.naive_bayes import MultinomialNB” 就能導入模型,再用 “MultinomialNB ()” 初始化即可。
2. 高斯樸素貝葉斯(GaussianNB)
當特征是連續型數據(比如身高、體重、溫度等具體數值)時,適合用高斯模型。因為連續型數據無法像離散數據那樣統計 “出現次數”,高斯模型會假設特征服從正態分布(也就是常見的 “鐘形曲線” 分布),通過計算數據在分布中的概率密度,來得到條件概率。

它的核心參數是 “priors”,作用是手動設置每個類別的先驗概率,默認是 None,此時模型會用 “極大似然法”—— 也就是根據樣本中各類別的占比,自動計算先驗概率。

導入方式是 “from sklearn.naive_bayes import GaussianNB”,初始化時直接調用 “GaussianNB ()” 即可,參數設置相對簡單。
3. 伯努利樸素貝葉斯(BernoulliNB)
這種模型針對的是二值離散型數據,也就是特征的取值只有 0 和 1 兩種情況(比如 “某個單詞在文章中是否出現”—— 出現記為 1,不出現記為 0)。它關注的是 “特征是否存在”,而不是 “特征出現多少次”,這是它和多項式模型的核心區別。

它的參數除了和多項式模型類似的 “alpha”“fit_prior”“class_prior” 外,還有一個關鍵參數 “binarize”:如果輸入的特征不是二值數據,這個參數可以設定一個閾值,將特征轉換為 0 和 1(比如設為 0,那么小于 0 的數記為 0,大于等于 0 的數記為 1);如果特征已經是二值化的數據,把 “binarize” 設為 None 即可,默認值是 0。

導入和初始化方式為 “from sklearn.naive_bayes import BernoulliNB” 和 “BernoulliNB ()”。
三、樸素貝葉斯的核心 API(基于 sklearn)
不管是哪種樸素貝葉斯模型,在 sklearn 中都有一套通用的 API,用于完成模型訓練、預測和評估,具體功能如下:

fit(X, Y):這是模型訓練的核心方法,需要傳入兩個參數 ——X 是特征數據(比如文本的單詞次數矩陣、連續型的數值特征),Y 是對應的類別標簽(比如文本的 “正面 / 負面”、郵件的 “垃圾 / 正常”)。調用這個方法后,模型會根據數據學習到特征和類別的關聯規律。
predict(X):用于對新的特征數據 X 進行類別預測,輸出的是每個樣本對應的類別標簽。比如訓練好垃圾郵件分類模型后,傳入一封新郵件的特征,調用這個方法就能得到 “垃圾郵件” 或 “正常郵件” 的預測結果。
predict_proba(X):和 predict 類似,但輸出的不是具體類別,而是每個樣本屬于各個類別的概率值。比如預測某封郵件時,可能輸出 “屬于垃圾郵件的概率是 85%,屬于正常郵件的概率是 15%”,概率值的總和為 1,能更直觀地看到模型的判斷依據。
predict_log_proba(X):功能和 predict_proba 類似,但輸出的是概率的對數值。因為當多個概率相乘時,數值可能會非常小,容易出現 “計算下溢”(數值過小無法準確存儲),取對數后可以避免這個問題,同時不影響不同類別概率的相對大小。
score(X, Y):用于評估模型的性能,需要傳入測試集的特征 X 和對應的真實標簽 Y,輸出的是模型在測試集上的準確率(正確預測的樣本數占總樣本數的比例)。比如測試集有 100 個樣本,模型預測對了 92 個,score 方法就會返回 0.92,表示準確率為 92%。
四、實踐應用:手寫數字識別(課堂練習)
基于 sklearn 提供的手寫數字數據集,我們可以用樸素貝葉斯實現數字識別任務,具體步驟如下:
1. 導入所需工具和數據集
首先需要導入相關的庫:高斯樸素貝葉斯模型(因為手寫數字的特征是像素值,屬于連續型數據)、手寫數字數據集加載工具、數據集劃分工具,以及準確率評估工具。

手寫數字數據集(load_digits)包含了很多手寫數字的圖像數據,每個圖像的像素值被整理成了特征,類別標簽是 0-9 的數字,我們需要先加載這個數據集,把特征和標簽分別提取出來 ——X 表示特征矩陣(每個樣本對應一行像素值),Y 表示每個樣本的真實數字標簽。
2. 劃分訓練集和測試集
為了驗證模型的泛化能力(對新數據的預測效果),需要將數據集分成兩部分:訓練集用于訓練模型,測試集用于評估模型。通常會按照 “8:2” 或 “7:3” 的比例劃分,這里以 8:2 為例,用 train_test_split 工具將 X 和 Y 分別拆分為訓練集(X_train、Y_train)和測試集(X_test、Y_test),同時設置 random_state 保證每次劃分的結果一致,方便復現。
3. 模型訓練與預測
初始化高斯樸素貝葉斯模型,然后調用 fit 方法,傳入訓練集的 X_train 和 Y_train,讓模型學習像素值和數字標簽之間的關聯。訓練完成后,調用 predict 方法,傳入測試集的 X_test,得到模型對測試集的預測標簽 Y_pred。
4. 模型評估
最后用 accuracy_score 工具,將測試集的真實標簽 Y_test 和預測標簽 Y_pred 傳入,計算模型的準確率。通過這個準確率,我們可以判斷模型的識別效果 —— 比如準確率達到 90% 以上,說明模型在手寫數字識別任務上表現較好。
五、學習收獲與總結
通過本次學習,我不僅掌握了樸素貝葉斯的理論邏輯,還能通過實際代碼實現具體任務,主要有以下幾點收獲:

算法優勢明確:樸素貝葉斯的 “特征獨立假設” 雖然簡化了現實情況,但大大降低了計算復雜度,尤其是在數據量不大或特征維度較高(如文本)的場景中,效率很高,而且對小樣本數據的適應性較好,不需要大量數據就能訓練出有一定效果的模型。
模型選擇有章可循:核心是根據特征數據的類型匹配模型 —— 如果是離散型的計數數據(如單詞出現次數),選多項式樸素貝葉斯;如果是連續型數據(如像素值、溫度),選高斯樸素貝葉斯;如果是二值化數據(如特征是否存在),選伯努利樸素貝葉斯,不用再盲目嘗試不同模型。
參數設置需注意細節:拉普拉斯平滑(alpha 參數)是避免 “零概率” 問題的關鍵,實際應用中很少會設為 0,默認的 1.0 是比較安全的選擇;先驗概率的設置也會影響模型效果,如果有領域知識可以手動設置 class_prior,沒有的話讓模型自動計算(默認 None)即可。

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

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

相關文章

【Protues仿真】基于AT89C52單片機的舵機和直流電機控制

目錄 1 PWM信號 1.1 三個最基本的量 1.1.1 周期 T(Period) 1.1.2脈沖寬度 Th(High Time) 1.1.3占空比 D(Duty Cycle) 1.2 為什么要用 PWM 1.3 關鍵參數對照表 1.4單片機里產生 PWM 的四種套路 1.4…

vue家教預約平臺設計與實現(代碼+數據庫+LW)

摘要 隨著互聯網技術的不斷發展,在線家教平臺逐漸成為家長和學生選擇教育服務的重要途徑。尤其在現代社會中,個性化教育需求日益增多,傳統的線下家教形式已無法完全滿足廣大家長和學生的需求。在線家教平臺不僅能為學生提供更多選擇&#xf…

AI系列 - Claude 與 Qwen 模型自動補全對比:誰更勝一籌?

Claude 與 Qwen 模型自動補全對比:誰更勝一籌? 導讀:隨著大語言模型的快速發展,自動補全功能在代碼編寫、文本生成等領域變得越來越重要。本文將對比 Anthropic 的 Claude 系列模型與 Alibaba 的 Qwen 系列模型在自動補全任務中的…

【ARM】MDK在debug模式下斷點的類型

1、 文檔目標本文旨在深入探討嵌入式開發環境中(以MDK為例)調試模式下的斷點類型,幫助開發者全面了解不同斷點的工作原理及其應用場景。通過掌握這些知識,開發者可以更高效地進行代碼調試,快速定位和解決問題。2、 問題…

CF2133C 下界(The Nether)

CF2133C 下界(The Nether) 洛谷題目傳送門 題目描述 這是一道交互題。 最近發現下界(The Nether)后,Steve 在他的世界中建造了一個由 nnn 個下界傳送門組成的網絡,每個傳送門位于不同的位置。 每個傳送…

無線USB轉換器TOS-WLink網盤更新--TOS-WLink使用幫助V1.0.pdf

1,編寫原因 隨著當前視頻越來越多,對于首次接觸到WLink的朋友、首次開箱使用的朋友不夠友好,常常感覺無從下手,為此編寫了TOS-WLink使用幫助V1.0.pdf;按照文檔進行一步一步驅動安裝,配網;文檔中…

Redis面試精講 Day 29:Redis安全防護與最佳實踐

【Redis面試精講 Day 29】Redis安全防護與最佳實踐 在“Redis面試精講”系列的第29天,我們聚焦于一個在生產環境中至關重要、卻常被開發者忽視的核心主題——Redis的安全防護與最佳實踐。隨著Redis廣泛應用于高并發、分布式系統中,其暴露在公網或內網中…

【數據結構】LeetCode160.相交鏈表 138.隨即鏈表復制 牛客——鏈表回文問題

文章目錄一、相交鏈表問題問題描述解題思路分析思路一:暴力遍歷法思路二:雙指針對齊法(最優解)二、鏈表的回文結構問題描述解題思路完整代碼三、 隨即鏈表的復制問題描述解題思路復雜度分析一、相交鏈表問題 問題描述 給定兩個單…

Mysql InnoDB 底層架構設計、功能、原理、源碼系列合集【四、事務引擎核心 - MVCC與鎖機制】

Mysql InnoDB 底層架構設計、功能、原理、源碼系列合集 一、InnoDB 架構先導。【模塊劃分,各模塊功能、源碼位置、關鍵結構體/函數】 二、內存結構核心 - 緩沖池與性能加速器 三、日志系統 - 事務持久化的基石 四、事務引擎核心 - MVCC與鎖機制 五、InnoDB 高階…

[ pytorch ] 基于CLIP的zero-shot圖像分類

論文:Learning Transferable Visual Models From Natural Language Supervision 地址:Learning Transferable Visual Models From Natural Language Supervision 一、關于CLIP 基于圖文匹配的特征學習:該論文證明了預測哪個標題與哪個圖像…

SP95N65CTO:一款高性能650V SiC MOSFET的全面解析

碳化硅(SiC)功率器件因其優異的性能,在高頻、高溫、高效率的應用中越來越受到重視。本文將以SP95N65CTO為例,詳細介紹這款650V SiC MOSFET的關鍵特性、電氣參數與應用場景。一、產品概述SP95N65CTO是一款采用TOLI(TO-2…

week4-[二維數組]平面上的點

week4-[二維數組]平面上的點 題目描述 有 NNN 個二維平面上的點,每個點的坐標都是整數且坐標范圍都在 0~9990\sim 9990~999 之間,求其中出現最頻繁的點的出現次數及其坐標。 輸入格式 第一行有一個整數 NNN,表示平面上點的個數。 接下來 NN…

領域專用AI模型訓練指南:醫療、法律、金融三大垂直領域微調效果對比

領域專用AI模型訓練指南:醫療、法律、金融三大垂直領域微調效果對比 🌟 Hello,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵&#xff0…

在自動駕駛中ESKF實現GINS時,是否將重力g作為變量考慮進去的目的是什么?

在自動駕駛的ESKF中,是否將重力 g 作為估計變量,可以從多個維度來比較這兩種方法的差異。對比維度不將重力 g 作為變量將重力 g 作為變量核心假設重力矢量 g 是已知且恒定的完美參考量。重力矢量 g 是需要被估計或校準的量,其值可能存在不確定…

Dify 從入門到精通(第 55/100 篇):Dify 的模型微調(進階篇)

Dify 從入門到精通(第 55/100 篇):Dify 的模型微調 Dify 入門到精通系列文章目錄 第一篇《Dify 究竟是什么?真能開啟低代碼 AI 應用開發的未來?》介紹了 Dify 的定位與優勢第二篇《Dify 的核心組件:從節點…

《Password Guessing Using Large Language Models》——論文閱讀

1.研究背景LLM在文本生成和理解方面表現出色,但直接用于密碼猜測存在以下問題:密碼與自然語言的差異(短、無語法、需精確匹配)生成效率低、重復率高倫理限制(如GPT-4拒絕生成大量密碼)2.本文研究提出PASSLL…

C# 使用OPCUA 與CODESYS進行標簽通訊

目錄 1.導出的標簽 識別標簽名稱 2.引用OPCUA的包 3.讀寫方法的封裝 4.完整的業務模塊封裝 1.導出的標簽 識別標簽名稱 從CODESYS導出使用標簽通訊的模塊文檔 大概是這樣子的 <?xml version"1.0" encoding"utf-8"?> <Symbolconfiguratio…

C++ 中 `std::map` 的 `insert` 函數

1. 函數的概念與用途 std::map::insert 是 C 標準模板庫&#xff08;STL&#xff09;中 map 容器的一個核心成員函數。它的核心任務很明確&#xff1a;向 map 中插入一個新的鍵值對&#xff08;key-value pair&#xff09;。 核心用途&#xff1a; 數據構建&#xff1a;初始化一…

【機器學習學習筆記】機器學習引言

前言本文章是撥珠自己的學習筆記&#xff0c;自用為主&#xff0c;學習請移步專門教程&#xff0c;若有錯誤請大佬輕噴&#xff0c;也歡迎同好交流學習。本文將闡述三個問題。什么是機器學習&#xff1f;監督學習、無監督學習到底在干什么&#xff1f;分類、回歸、聚類又是怎么…

程序設計---狀態機

在軟件工程、嵌入式開發、自動化控制等領域&#xff0c;狀態機&#xff08;State Machine&#xff09;是一種描述系統行為的強大工具。它通過抽象“狀態”“事件”“轉換”和“動作”四大核心要素&#xff0c;將復雜的邏輯流程轉化為可視化、可驗證的狀態流轉規則&#xff0c;廣…