樸素貝葉斯:用 “概率思維” 解決分類問題的經典算法

一、貝葉斯:從 “逆概” 問題走來的數學家

要理解樸素貝葉斯,得先回到它的 “源頭”—— 貝葉斯公式,以及它要解決的核心問題:逆概問題

1. 貝葉斯的 “生不逢時”

托馬斯?貝葉斯(Thomas Bayes,約 1701-1761)是英國數學家,他生前為解決 “逆概” 問題寫了一篇文章,卻在死后才被世人認可。正是這篇文章,奠定了 “貝葉斯方法” 的基礎,成為如今機器學習、統計學、人工智能領域的核心思想之一。

2. 正向概率 vs 逆向概率:貝葉斯要解決的核心

我們先從兩個簡單的例子,理解 “正向” 與 “逆向” 的區別 —— 這是貝葉斯思想的關鍵。

  • 正向概率:已知 “因”,求 “果” 的概率。 比如:袋子里有 N 個白球、M 個黑球(已知 “因”:黑白球比例),伸手摸一個,問摸出黑球的概率(求 “果”:事件概率)。 這是我們從小學習的概率問題,直接用 “符合條件的數量 / 總數量” 就能計算。

  • 逆向概率:已知 “果”,求 “因” 的概率。 比如:事先不知道袋子里黑白球的比例(未知 “因”),但閉著眼摸出了 1 個黑球、2 個白球(已知 “果”:觀測結果),問袋子里黑白球可能的比例是多少? 這就是貝葉斯要解決的 “逆概” 問題 —— 通過觀測到的結果,反推背后 “原因” 的概率。

二、貝葉斯公式:用一個 “穿長褲” 的例子看懂推導

光說概念太抽象,我們用 PPT 里的 “校園男女生長褲 / 裙子” 例子,一步步推導出貝葉斯公式。這個例子特別直觀,新手也能跟上。

已知條件

  • 校園里男生占 60%(P (Boy)=0.6),女生占 40%(P (Girl)=0.4);
  • 男生全部穿長褲(P (長褲 | Boy)=1.0,“|” 表示 “在… 條件下”);
  • 女生一半穿長褲、一半穿裙子(P (長褲 | Girl)=0.5)。

問題:迎面走來一個穿長褲的學生,他是女生的概率是多少?

也就是求?P (Girl | 長褲)—— 已知 “穿長褲” 這個 “果”,反推 “是女生” 這個 “因” 的概率。

step 1:計算 “穿長褲的男生” 和 “穿長褲的女生” 數量

假設校園總人數為 U,那么:

  • 穿長褲的男生數量 = U × P (Boy) × P (長褲 | Boy) = U × 0.6 × 1.0 = 0.6U;
  • 穿長褲的女生數量 = U × P (Girl) × P (長褲 | Girl) = U × 0.4 × 0.5 = 0.2U。

step 2:計算 “穿長褲的總人數”

穿長褲的總人數 = 穿長褲的男生 + 穿長褲的女生 = 0.6U + 0.2U = 0.8U。

step 3:推導 “穿長褲的人是女生” 的概率

“穿長褲的人是女生” 的概率 = 穿長褲的女生數量 / 穿長褲的總人數,代入上面的結果:
\(P(Girl|長褲) = \frac{U \times P(Girl) \times P(長褲|Girl)}{U \times P(Boy) \times P(長褲|Boy) + U \times P(Girl) \times P(長褲|Girl)}\)

這里發現一個關鍵:總人數 U 可以消掉!因為 U 是常數,不影響概率比例。于是公式簡化為:
\(P(Girl|長褲) = \frac{P(Girl) \times P(長褲|Girl)}{P(Boy) \times P(長褲|Boy) + P(Girl) \times P(長褲|Girl)}\)

step 4:提煉出通用的貝葉斯公式

觀察上面的簡化公式,分母其實是 “穿長褲” 這個事件的總概率 P (長褲)(即所有可能 “原因” 導致 “穿長褲” 的概率之和)。 由此推廣到通用場景:對于任意 “原因 H” 和 “結果 D”,貝葉斯公式為:
\(P(H|D) = \frac{P(H) \times P(D|H)}{P(D)}\)

公式中各個部分的含義:

  • P (H|D):后驗概率(Posterior)—— 已知結果 D,反推原因 H 的概率(這是我們最終想求的);
  • P (H):先驗概率(Prior)—— 在沒有觀測到結果 D 時,原因 H 本身發生的概率(比如 “女生占 40%”);
  • P (D|H):似然概率(Likelihood)—— 在原因 H 成立的條件下,出現結果 D 的概率(比如 “女生穿長褲的概率 50%”);
  • P (D):證據概率(Evidence)—— 結果 D 發生的總概率(所有原因導致 D 的概率之和,計算時可忽略,因為比較不同 H 時它是常數)。

三、樸素貝葉斯:“樸素” 在哪?

貝葉斯公式解決了 “逆概” 問題,但如果要處理多特征的分類任務(比如判斷一封郵件是否為垃圾郵件,郵件包含多個單詞),直接用貝葉斯公式會很復雜 —— 因為要計算 “多個特征同時出現” 的聯合概率。

這時候,樸素貝葉斯的 “樸素” 假設就派上用場了: 假設所有特征之間相互獨立,互不影響

正是這個 “樸素” 的假設,把復雜的聯合概率簡化成了 “單個特征概率的乘積”,讓計算量大幅降低。比如判斷郵件是否為垃圾郵件時,“郵件包含‘中獎’” 和 “郵件包含‘轉賬’” 這兩個特征,被假設為獨立事件。

四、實例 1:拼寫糾正 —— 幫用戶 “猜” 對單詞

我們每天用輸入法時,偶爾會輸錯單詞(比如把 “top” 輸成 “tlp”),輸入法怎么知道我們真正想輸什么?樸素貝葉斯就是背后的 “猜詞邏輯” 之一。

問題定義

已知用戶輸入了一個不在字典中的單詞 D(比如 “tlp”),求 “用戶真正想輸入的單詞 h” 的概率,即 P (h|D)。我們需要找出概率最大的 h 作為糾正結果。

用樸素貝葉斯計算

根據貝葉斯公式:
\(P(h|D) = \frac{P(h) \times P(D|h)}{P(D)}\)

由于 P (D)(用戶輸入 D 的總概率)對所有候選 h 都是常數,比較不同 h 的概率時可忽略,因此只需計算:
\(P(h|D) \propto P(h) \times P(D|h)\)

其中:

  1. P (h):先驗概率—— 單詞 h 在日常使用中出現的頻率。比如 “top” 比 “tip” 更常用,所以 P (top) > P (tip);
  2. P (D|h):似然概率—— 想輸入 h,卻輸成 D 的概率(比如 “top” 輸成 “tlp” 的概率,取決于兩個單詞的字符差異,差異越小概率越大)。

舉個例子:用戶輸入 “tlp”,該糾正為 “top” 還是 “tip”?

  • 先看 P (D|h):“tlp” 和 “top” 差 1 個字符(l→o),和 “tip” 也差 1 個字符(l→i),所以 P (D|top) ≈ P (D|tip);
  • 再看 P (h):“top” 在語料中出現的頻率遠高于 “tip”,即 P (top) > P (tip);
  • 因此,P (top)×P (D|top) > P (tip)×P (D|tip),最終糾正為 “top”。

五、實例 2:垃圾郵件分類 —— 給郵件 “貼標簽”

垃圾郵件分類是樸素貝葉斯最經典的應用之一。我們的目標是:給定一封郵件 D,判斷它是垃圾郵件(h+)還是正常郵件(h-)。

問題定義

需比較兩個后驗概率:P (h+|D)(郵件是垃圾郵件的概率)和 P (h-|D)(郵件是正常郵件的概率),哪個大就歸為哪一類。

step 1:拆解郵件特征

郵件 D 由多個單詞組成(比如 D 包含 “中獎”“轉賬”“領取” 三個單詞,記為 d1=“中獎”,d2=“轉賬”,d3=“領取”)。根據樸素貝葉斯的 “特征獨立” 假設:
\(P(D|h+) = P(d1|h+) \times P(d2|h+) \times P(d3|h+)\)

(即 “垃圾郵件中同時出現 d1、d2、d3” 的概率,等于 “垃圾郵件中出現 d1”“垃圾郵件中出現 d2”“垃圾郵件中出現 d3” 的概率乘積)。

step 2:計算關鍵概率

  1. 先驗概率 P (h+) 和 P (h-): 假設我們有一個郵件庫,里面有 1000 封郵件,其中 300 封是垃圾郵件,700 封是正常郵件。那么: P(h+) = 300/1000 = 0.3,P(h-) = 700/1000 = 0.7。

  2. 似然概率 P (d|h+) 和 P (d|h-): 統計單詞 d 在垃圾郵件 / 正常郵件中出現的頻率。比如:

    • 垃圾郵件中 “中獎” 出現了 150 次,垃圾郵件總單詞數為 10000,所以 P (“中獎”|h+) = 150/10000 = 0.015;
    • 正常郵件中 “中獎” 出現了 10 次,正常郵件總單詞數為 50000,所以 P (“中獎”|h-) = 10/50000 = 0.0002。
  3. 計算 P (D|h+) 和 P (D|h-): 假設郵件 D 包含 “中獎”“轉賬”,且 P (“轉賬”|h+) = 0.02,P (“轉賬”|h-) = 0.0005。那么: P(D|h+) = 0.015 × 0.02 = 0.0003; P(D|h-) = 0.0002 × 0.0005 = 0.0000001。

step 3:比較后驗概率

根據貝葉斯公式,忽略 P (D) 后: P(h+|D) ∝ P(h+) × P(D|h+) = 0.3 × 0.0003 = 0.00009; P(h-|D) ∝ P(h-) × P(D|h-) = 0.7 × 0.0000001 = 0.00000007。

顯然,P (h+|D) > P (h-|D),因此這封郵件被判定為垃圾郵件

六、實戰演練:從訓練數據學樸素貝葉斯分類器

PPT 中給出了一個經典的訓練數據案例,我們來簡化理解如何用它學習分類器。

已知訓練數據

樣本序號特征 X1(取值 {1,2,3})特征 X2(取值 {S,M,L})類別 Y({1,-1})
11S-1
21M-1
31M1
41S1
51S-1
62S-1
72M-1
82M1
92L1
102L1
113L1
123M1
133M1
143L1
153L-1

任務:確定 x=(2, S) 的類別 Y

即求 P (Y=1|X1=2,X2=S) 和 P (Y=-1|X1=2,X2=S),哪個大歸哪類。

step 1:計算先驗概率 P (Y=1) 和 P (Y=-1)
  • 總樣本數 15,Y=1 的樣本有 9 個,所以 P (Y=1)=9/15=0.6;
  • Y=-1 的樣本有 6 個,所以 P (Y=-1)=6/15=0.4。
step 2:計算條件概率(似然)

根據樸素假設,P (X1=2,X2=S|Y=k) = P (X1=2|Y=k) × P (X2=S|Y=k)(k=1 或 - 1)。

  • 對 Y=1: Y=1 的樣本中,X1=2 的有 3 個(樣本 8、9、10),所以 P (X1=2|Y=1)=3/9=1/3; Y=1 的樣本中,X2=S 的有 0 個,所以 P (X2=S|Y=1)=0/9=0; 因此,P (X1=2,X2=S|Y=1)= (1/3) × 0 = 0。

  • 對 Y=-1: Y=-1 的樣本中,X1=2 的有 2 個(樣本 6、7),所以 P (X1=2|Y=-1)=2/6=1/3; Y=-1 的樣本中,X2=S 的有 3 個(樣本 1、5、6),所以 P (X2=S|Y=-1)=3/6=0.5; 因此,P (X1=2,X2=S|Y=-1)= (1/3) × 0.5 = 1/6 ≈ 0.1667。

step 3:比較后驗概率
  • P(Y=1|x) ∝ 0.6 × 0 = 0;
  • P(Y=-1|x) ∝ 0.4 × (1/6) ≈ 0.0667。

因此,x=(2, S) 的類別為Y=-1

七、課堂練習:動手驗證你的理解

試試用上面的訓練數據,解決 PPT 中的兩個問題:

  1. 當 X1=1,X2=L 時,屬于哪一類?
  2. 當 X1=3,X2=L 時,屬于哪一類?

(提示:步驟和上面一致,先算先驗概率,再算條件概率,最后比較后驗概率。答案可以在評論區交流哦~)

八、總結:樸素貝葉斯的 “簡單與強大”

樸素貝葉斯之所以能成為經典算法,核心在于它的 “平衡”—— 簡單卻有效:

優點

  1. 計算快:無需迭代訓練,只需統計概率,適合大規模數據;
  2. 數據需求低:少量數據就能訓練,尤其適合樣本稀缺場景;
  3. 可解釋性強:基于概率公式,結果容易理解(比如 “因為包含‘中獎’,所以有 90% 概率是垃圾郵件”)。

缺點

  1. “樸素” 假設的局限性:現實中特征往往不獨立(比如 “中獎” 和 “轉賬” 常同時出現在垃圾郵件中),可能影響精度;
  2. 對高頻特征敏感:如果某個無關高頻詞(如 “的”“是”)未被過濾,可能干擾分類。

適用場景

  • 文本分類(垃圾郵件、情感分析、新聞分類);
  • 拼寫糾正、推薦系統;
  • 小規模數據的快速分類任務。

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

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

相關文章

Qt/C++開發監控GB28181系統/視頻點播主碼流子碼流/動態切換碼流/支持海康大華/全網唯一

一、前言說明 目前市面上的國標監控系統,沒有看到可以切換碼流的,都是默認主碼流,包括easynvr、livegbs、wvp等,很是奇怪為什么他們不做呢?難道沒有用戶反饋需要這個?我這就遇到過一些用戶需要能夠切換主碼…

【 MYSQL | 基礎篇 四大SQL語句 】資料位于文章末尾

摘要:本文先介紹數據庫 SQL 的核心概念,接著闡述 SQL 通用語法與 DDL、DML、DQL、DCL 四大分類,隨后詳細講解各類語句操作,包括 DDL 的數據庫與表操作及數據類型,DML 的數據增刪改,DQL 的查詢語法與功能&am…

Webrtc支持FFMPEG硬解碼之Intel

Intel QSV下載編譯git clone https://github.com/lu-zero/mfx_dispatch.git1.使用CMake生產VS工程編譯生成libmfx.lib文件 頭文件為mfx文件夾libmfx---include---mfx---lib---libmfx.libWebrtc中ffmpeg的修改因為Webrtc中的ffmpeg是使用gn進行編譯的,所以這里先找到…

【二叉樹(DFS) - LeetCode】437. 路徑總和 III

437. 路徑總和 III 題解:DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullp…

【Python】shutil.make_archive() 方法詳解

文章目錄功能概述函數簽名核心參數詳解1. base_name2. format3. root_dir4. base_dir使用示例將 /home/user/project/data 目錄打包為 data.tar.gz,并保存到 /home/user/backups/打包當前工作目錄下的 docs 文件夾為 zip 文件替代方案總結shutil.make_archive() 是 …

CAN總線(Controller Area Network Bus)控制器局域網總線(二)

6、錯誤幀 總線上所有設備都會監督總線的數據,一旦發現“位錯誤”或“填充錯誤”或“CRC錯誤”或“格式錯誤”或“應答錯誤” ,這些設備便會發出錯誤幀來破壞數據,同時終止當前的發送設備。7、過載幀 當接收方收到大量數據而無法處理時&#…

LeetCode 317 離建筑物最近的距離

LeetCode 317 題的詳細題目信息如下:題目名稱Shortest Distance from All Buildings(中文譯名:離建筑物最近的距離)題目描述給你一個由 0、1 和 2 組成的二維網格,其中:0 代表空地1 代表建筑物2 代表障礙物…

AI之CodeTool之Kode:Kode(claude_code風格)的簡介、安裝和使用方法、案例應用之詳細攻略

AI之CodeTool之Kode:Kode(claude_code風格)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 相關文章 LLMs之PE之SystemPrompt:analysis_claude_code的簡介、使用方法、案例應用之詳細攻略 AI之CodeTool之Kode:Kode(claude_code風格)的簡…

網絡請求優化:用 Retrofit 攔截器玩轉日志、重試與緩存,OkHttp 和 Volley 誰更香?

目錄 1. 攔截器:Retrofit 的“超級管理員” 攔截器的本質 為什么用攔截器? 2. 日志攔截器:讓請求和響應“現原形” 引入日志攔截器 實現日志攔截器 日志輸出示例 生產環境注意事項 3. 重試攔截器:網絡不穩定也能穩如狗 設計重試邏輯 集成到 Retrofit 優化重試策…

LeetCode - 283. 移動零

題目 283. 移動零 - 力扣(LeetCode) 思路 我們使用左右兩個指針:左指針left指向已處理好的非零元素的末尾位置,右指針right用于遍歷數組。 算法步驟: 初始化left為-1(表示還沒有處理任何非零元素&…

Redis不同場景下的注意事項

Redis常見的 使用場景: 緩存系統(核心場景) 存儲熱點數據,減少數據庫訪問壓力。提升接口響應速度。技術點: 用String/Hash 存儲結構化數據結合過期時間(TTL)和緩存淘汰策略(如LRU)管理內存。解決緩存問題:穿…

【完整源碼+數據集+部署教程】高速公路施工區域物體檢測系統源碼和數據集:改進yolo11-RepNCSPELAN

背景意義 隨著城市化進程的加快,高速公路建設與維護工作日益頻繁,施工區域的安全管理成為亟待解決的重要問題。在高速公路施工區域,工人和設備的安全是首要考慮因素,而有效的物體檢測系統能夠顯著提高施工現場的安全性與工作效率。…

如何在FastAPI中玩轉全鏈路追蹤,讓分布式系統故障無處遁形?

url: /posts/30e1d2fbf1ad8123eaf0e1e0dbe7c675/ title: 全鏈路追蹤如何讓FastAPI微服務架構的每個請求都無所遁形? date: 2025-08-28T23:40:47+08:00 lastmod: 2025-08-28T23:40:47+08:00 author: cmdragon summary: 全鏈路追蹤是現代微服務架構中監控系統行為的核心技術,通…

Win11 壓縮實測:Win11 的壓縮軟件的最佳配置和使用方式

文章目錄測試環境機器配置被壓縮文件WinRAR7zipLinux子系統準備極限壓縮減小字典的極限壓縮7zipWin11準備極限壓縮7zip系統內置右鍵壓縮菜單極限壓縮總結:Win11 的壓縮軟件的最佳配置和使用方式測試環境 機器配置 Win11系統 16GB內存 8核CPU 被壓縮文件 文件夾內…

CMake構建學習筆記22-libxml2庫的構建

在上一篇文章《CMake構建學習筆記21-通用的CMake構建腳本》中,筆者封裝了一個通用的cmake構建腳本cmake-build.ps1,那么這里筆者就嘗試通過這個腳本來構建libxml2庫。 libxml2是GNOME項目下的XML庫,雖然比不上TinyXML-2輕量,但是…

虛擬私有網絡筆記

VPN應用場景 ——VPN概述 ? 利用公共網絡來構建的私人專用網絡稱為虛擬私有網絡(VPN, Virtual Private Network),用于構建VPN的公共網絡包括Internet 、幀中繼、ATM等。在公共網絡上組建的VPN象企業現有的私有網絡 一樣提供安全性…

Python 輕量級 HTML 解析器 - lxml入門教程

文章目錄初始化解析器路徑查找查找所有標簽查找指定 id 的標簽查找指定 class 的標簽查找包含指定 class 的標簽復雜路徑查找示例1示例2常見操作獲取所有標簽的鏈接獲取 div 標簽的文本內容, 其他標簽類似其他元素操作初始化解析器 from lxml import html from lxml.html impor…

(CVPR-2025)VideoMage:文本生成視頻擴散模型的多主體與動作定制化

VideoMage:文本生成視頻擴散模型的多主體與動作定制化 paper title:VideoMage: Multi-Subject and Motion Customization of Text-to-Video Diffusion Models paper是National Taiwan University發表在CVPR 2025的工作 Code:鏈接 圖1. 多主體與動作定制化…

OpenCV輪廓近似與Python命令行參數解析

在計算機視覺任務中,輪廓分析是目標檢測、形狀識別的核心步驟。而approxPolyDP函數作為輪廓簡化的關鍵工具,能有效減少輪廓頂點數量,降低計算復雜度;同時,argparse庫則能讓Python腳本更靈活、易用。本文將結合具體案例…

基于Springboot在線音樂推薦平臺

目錄 一、項目介紹 二、功能介紹 三、核心代碼 四、效果圖 源碼獲取 前言 在經濟繁榮的浪潮過去后,社會的焦點逐漸從物質追求轉向了文化和生活品質的提升[1]。文化生活的繁榮成為人們關注的焦點之一,而音樂,作為文化的一部分&#xff0…