深度解析基于貝葉斯的垃圾郵件分類

貝葉斯垃圾郵件分類的核心邏輯是基于貝葉斯定理,利用郵件中的特征(通常是單詞)來計算該郵件屬于“垃圾郵件”或“非垃圾郵件”的概率,并根據概率大小進行分類。它是一種樸素貝葉斯分類器,因其假設特征(單詞)之間相互獨立而得名(雖然這在現實中不完全成立,但效果通常很好)。

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術!

  1. 核心思想:貝葉斯定理
    • 我們想知道:給定一封郵件的內容(D),它是垃圾郵件(S)的概率有多大? 即求 P(S|D)
    • 貝葉斯定理告訴我們:
      P(S|D) = [P(D|S) * P(S)] / P(D)
    • 其中:
      • P(S|D)后驗概率。這是我們最終需要的 - 在觀察到郵件內容 D 后,郵件是垃圾郵件的概率。
      • P(D|S)似然度。已知郵件是垃圾郵件時,觀察到內容 D 的概率。
      • P(S)先驗概率。在沒有任何內容信息的情況下,任意一封郵件是垃圾郵件的概率(通常通過統計訓練集中垃圾郵件的比例得到)。
      • P(D)證據。觀察到內容 D 的概率(無論郵件是垃圾還是正常)。這個值對所有類別(垃圾/非垃圾)都一樣,在實際計算比較中通常可以忽略或通過歸一化處理。

往期文章推薦:

  • 20.條件概率:不確定性決策的基石
  • 19.深度解讀概率與證據權重 -Probability and the Weighing of Evidence
  • 18.WOE值:風險建模中的“證據權重”量化術——從似然比理論到FICO評分卡實踐
  • 17.KS值:風控模型的“風險照妖鏡”
  • 16.如何量化違約風險?信用評分卡的開發全流程拆解
  • 15.CatBoost:征服類別型特征的梯度提升王者
  • 14.XGBoost:梯度提升的終極進化——統治Kaggle的算法之王
  • 13.LightGBM:極速梯度提升機——結構化數據建模的終極武器
  • 12.PAC 學習框架:機器學習的可靠性工程
  • 11.Boosting:從理論到實踐——集成學習中的偏差征服者
  • 10.GBDT:梯度提升決策樹——集成學習中的預測利器
  • 9.集成學習基礎:Bagging 原理與應用
  • 8.隨機森林詳解:原理、優勢與應用實踐
  • 7.經濟學神圖:洛倫茲曲線
  • 6.雙生“基尼”:跨越世紀的術語撞車與學科分野
  • 5.CART算法全解析:分類回歸雙修的決策樹之王
  • 4.C4.5算法深度解析:決策樹進化的里程碑
  • 3.決策樹:化繁為簡的智能決策利器
  • 2.深入解析ID3算法:信息熵驅動的決策樹構建基石
  • 1.類圖:軟件世界的“建筑藍圖”
  1. “樸素”假設:特征(單詞)獨立性

    • 郵件內容 D 是由一系列單詞 W1, W2, ..., Wn 組成的。
    • 計算 P(D|S) 非常困難,因為需要考慮所有單詞的組合及其順序。樸素貝葉斯做了一個關鍵且大膽的簡化假設:郵件中的每個單詞的出現是相互獨立的(這就是“樸素”的由來)。
    • 在這個假設下:
      P(D|S) ≈ P(W1|S) * P(W2|S) * ... * P(Wn|S)
    • 即:垃圾郵件中出現內容 D 的概率 ≈ 垃圾郵件中出現單詞 W1 的概率 × 垃圾郵件中出現單詞 W2 的概率 × … × 垃圾郵件中出現單詞 Wn 的概率。
    • 同樣地,對于非垃圾郵件(H):
      P(D|H) ≈ P(W1|H) * P(W2|H) * ... * P(Wn|H)
  2. 關鍵步驟:訓練模型(計算概率)
    分類器需要先在一個標記好的數據集(包含大量已知是垃圾郵件和非垃圾郵件的郵件)上進行訓練:

    • 計算先驗概率:
      • P(S) = (垃圾郵件總數) / (總郵件數)
      • P(H) = (正常郵件總數) / (總郵件數) = 1 - P(S)
    • 計算每個單詞的似然度:
      • 對于詞匯表中的每一個單詞 Wi
        • P(Wi|S) = (Wi 在所有垃圾郵件中出現的總次數 + α) / (垃圾郵件中所有單詞的總出現次數 + α * |Vocabulary|)
        • P(Wi|H) = (Wi 在所有正常郵件中出現的總次數 + α) / (正常郵件中所有單詞的總出現次數 + α * |Vocabulary|)
      • 拉普拉斯平滑(α):非常重要!用于處理訓練集中從未出現過的單詞(否則概率為0會導致整個乘積為0)。通常 α 取 1。分母中的 α * |Vocabulary| 是為了保證概率總和為1。|Vocabulary| 是詞匯表的大小(唯一單詞的數量)。
  3. 分類新郵件
    當有一封新郵件(內容為單詞序列 W1, W2, ..., Wn)需要分類時:

    • 計算垃圾郵件概率:
      P(S|D) ∝ P(S) * [P(W1|S) * P(W2|S) * ... * P(Wn|S)] (忽略分母 P(D))
    • 計算正常郵件概率:
      P(H|D) ∝ P(H) * [P(W1|H) * P(W2|H) * ... * P(Wn|H)]
    • 比較并決策:
      • 計算實際的概率(可選,但比較比值更直觀):
        P(S|D) = 垃圾郵件部分 / (垃圾郵件部分 + 正常郵件部分)
        P(H|D) = 正常郵件部分 / (垃圾郵件部分 + 正常郵件部分)
      • 分類規則:
        • 如果 P(S|D) > P(H|D),則判定為垃圾郵件。
        • 更常見的是設定一個閾值(例如 0.5, 0.8, 0.9),如果 P(S|D) > 閾值,則判定為垃圾郵件。閾值的調整可以平衡精確率和召回率。
    • 數值計算技巧(對數轉換):
      • 由于多個小概率(0到1之間)相乘可能導致結果非常接近于0(下溢),實際計算中通常對公式取對數:
        log(P(S|D)) ∝ log(P(S)) + log(P(W1|S)) + log(P(W2|S)) + ... + log(P(Wn|S))
        log(P(H|D)) ∝ log(P(H)) + log(P(W1|H)) + log(P(W2|H)) + ... + log(P(Wn|H))
      • 比較 log(P(S|D))log(P(H|D)) 的大小即可(或者比較它們的差值是否大于 log(閾值/(1-閾值)))。取對數將乘法變為加法,避免了數值下溢問題,且計算更快。
  4. 特征工程(重要優化)

    • 停用詞過濾: 去除“的”、“是”、“在”等非常常見但無判別意義的詞。
    • 詞干提取/詞形還原: 將不同形式的單詞還原為基本形式(如 “running”, “runs”, “ran” -> “run”),減少特征維度,增強泛化能力。
    • 特征選擇: 選擇信息量大的詞(如通過卡方檢驗、信息增益等方法),去除非常低頻或高頻的詞。
    • N-Gram: 不僅考慮單個詞(Unigram),有時也考慮連續的兩個詞(Bigram)或三個詞(Trigram)作為特征,可以捕捉一些短語信息(部分緩解獨立性假設的不足),但會增加特征空間。
    • 處理大寫: 通常將所有文本轉換為小寫。

總結邏輯流程:

  1. 訓練階段:
    • 收集標記好的郵件數據集(垃圾/正常)。
    • 統計垃圾郵件和正常郵件的總數,計算 P(S)P(H)
    • 構建詞匯表。
    • 對于詞匯表中的每個單詞,計算它在垃圾郵件中出現的條件概率 P(Wi|S) 和在正常郵件中出現的條件概率 P(Wi|H)應用拉普拉斯平滑
  2. 分類階段:
    • 接收一封新郵件。
    • 進行文本預處理(分詞、去停用詞、詞干提取/詞形還原、小寫化等)。
    • 提取郵件中的特征詞(單詞)。
    • 對于每個特征詞 Wi,從訓練好的模型中查找 P(Wi|S)P(Wi|H)(如果詞在訓練時未見過,使用平滑后的概率)。
    • 計算聯合概率(或其對數):
      • Score(S) = log(P(S)) + Σ log(P(Wi|S)) (對所有郵件中的特征詞 Wi 求和)
      • Score(H) = log(P(H)) + Σ log(P(Wi|H))
    • 比較分數:
      • 如果 Score(S) > Score(H) + Threshold(或者計算 P(S|D) = exp(Score(S)) / (exp(Score(S)) + exp(Score(H))) 并與閾值比較),則分類為垃圾郵件。
      • 否則,分類為正常郵件。

優點:

  • 原理簡單,易于理解和實現。
  • 訓練和預測速度快,計算效率高,尤其適合高維特征(文本)。
  • 對小規模數據集也能表現不錯。
  • 在實踐中,盡管有“樸素”的獨立性假設,但效果往往出乎意料地好,尤其是在垃圾郵件過濾這種任務上。

缺點:

  • 獨立性假設過強: 單詞之間顯然不是完全獨立的(例如“免費”后面出現“獲取”的概率很高),這會損失一些信息。
  • 對數據稀疏敏感: 如果測試郵件中出現訓練集中完全沒見過的詞(未平滑)或組合,會影響效果(拉普拉斯平滑緩解了這個問題)。
  • 先驗概率的影響: 如果訓練數據中垃圾郵件和正常郵件的比例與真實情況相差很大,會影響 P(S)P(H) 的估計,進而影響分類。有時需要根據實際應用場景調整先驗。

盡管有這些缺點,樸素貝葉斯分類器因其簡單高效,仍然是文本分類(尤其是垃圾郵件過濾)任務中一個非常流行和有效的基準方法。

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術!

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

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

相關文章

WPF 3D 開發全攻略:實現3D模型創建、旋轉、平移、縮放

🎮 WPF 3D 入門實戰:從零打造一個可交互的立方體模型 標題: 🚀《WPF 3D 開發全攻略:實現旋轉、平移、縮放與法線顯示》 💡 引言 在現代圖形應用中,3D 可視化已經成為不可或缺的一部分。WPF 提供…

Ruby 安裝使用教程

一、Ruby 簡介 Ruby 是一種簡單快捷的面向對象腳本語言,以優雅、簡潔、易讀著稱。它常被用于 Web 開發(如 Ruby on Rails 框架)、自動化腳本、DevOps、命令行工具等領域。 二、Ruby 安裝教程 2.1 支持平臺 Ruby 支持跨平臺運行&#xff0c…

python | numpy小記(五):理解 NumPy 中的 `np.arccos`:反余弦函數

python | numpy小記(五):理解 NumPy 中的 np.arccos:反余弦函數 一、函數簽名與核心參數二、數學定義與取值范圍三、基礎使用示例四、與 Python 內建 math.acos 的對比五、常見問題與注意事項六、典型應用場景1. 三維向量夾角計算…

華為云Flexus+DeepSeek征文 | 華為云ModelArts與Reor的完美結合:創建高效本地AI筆記環境

華為云FlexusDeepSeek征文 | 華為云ModelArts與Reor的完美結合:創建高效本地AI筆記環境 引言一、ModelArts Studio平臺介紹華為云ModelArts Studio簡介ModelArts Studio主要特點 二、Reor介紹Reor簡介Reor主要特點 三、安裝Reor工具下載Reor軟件安裝Reor工具 四、開…

【啟發式算法】Dynamic A*(D*)算法詳細介紹(Python)

📢本篇文章是博主人工智能(AI)領域學習時,用于個人學習、研究或者欣賞使用,并基于博主對相關等領域的一些理解而記錄的學習摘錄和筆記,若有不當和侵權之處,指出后將會立即改正,還望諒…

報告怎么寫

替代方案(按場景選擇) 崗前準備階段 ? "熟悉業務流程/系統操作" ? "掌握XX工具/平臺的核心功能" ? "完成上崗前技術對接" 知識轉化場景 ? "梳理產品知識體系" ? "轉化技術文檔為實操方案" ? &…

大模型——怎么讓 AI 寫出好看有設計感的網頁

大模型——怎么讓 AI 寫出好看有設計感的網頁 你讓 AI 給你寫的網頁大概都是這樣的: 或者這樣: 好點的時候能這樣: 但都不夠高級,尤其是那個像引用一樣的邊框,太 AI 了。 今天教大家一個小技巧,寫出下面這樣的網頁: 或者這樣的

【Torch】nn.Linear算法詳解

1. 定義 nn.Linear 是 PyTorch 中最基礎的全連接(fully‐connected)線性層,也稱仿射變換層(affine layer)。它對輸入張量做一次線性變換: output x W T b \text{output} x W^{T} b outputxWTb 其中&a…

ZGC收集器

ZGC收集器 歡迎來到我的博客:TWind的博客 我的CSDN::Thanwind-CSDN博客 我的掘金:Thanwinde 的個人主頁 0.前言 ZGC收集器完全可以說是Java收集器的一個跨時代的收集器,他真正意義上實現了停頓時間在10ms以內并且幾乎全時段都是…

隧道技術篇2frp代理nps代理shisel代理

FRP代理 1.實現湖北內網控制北京的內網C2上線 2.實現湖北內網探針北京內網 信息收集 (socks建立和端口映射) 1.連接47.98.210.85 7000端口服務端 2.嘗試將服務端的6666轉到127.0.0.1 5555采用tcp協議,備注名proxies serverAddr"47.98…

[Python 基礎課程]PyCharm 的安裝

Python 的編輯器目前主流的有 PyCharm 和 Vscode。 PyCharm 是 Python 目前最主流、最常用、最推薦的 Python 編輯器。 https://www.jetbrains.com/pycharm/ PyCharm 有社區版和專業版,可以根據自己的需要下載對應的版本。社區版是收費的,對于初學者或…

Spread Ribbon 工具欄控件:在WinForms中高效編輯Spread工作簿

引言 在數據密集型應用中,電子表格功能是提升用戶體驗的關鍵要素。GrapeCity Spread.NET V17 推出的獨立 Ribbon工具欄控件,為WinForms開發者提供了與Excel高度一致的UI交互體驗。通過集成此控件,用戶可直觀地進行數據編輯、格式調整等操作&…

leedcode:找到字符串中所有字母異位詞

問題:給定兩個字符串 s 和 p,找到 s 中所有 p 的 異位詞 的子串,返回這些子串的起始索引。不考慮答案輸出的順序。 package com.text;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;…

華為云Flexus+DeepSeek征文|基于華為云 Flexus Dify平臺開發AI Agent的詳細流程

目錄 一、Dify 應用開發平臺 1.1 什么是 Dify? 1.2 Dify 平臺優勢 二、構建 AI Agent 2.1 創建智能客服助手 2.2 配置 LLM組件 三、訪問智能應用 3.1 應用發布 3.2 智能對話 四、API 調用智能客服助手 4.1 配置 API 訪問接口 4.2 調用智能客服助手API …

【知識圖譜構建系列7】:結果評價(1)

文章目錄 前言前情提要三元組提取結果評價腳本代碼分析幾分鐘后前言 翻了一下記錄,發現咱的知識圖譜構建已經接近10天沒有搞了。時間也是過得真快啊。但這畢竟是咱未來產生論文的主要陣地,所以得趕緊把節奏給拾起來哈~ 前情提要 我們已經可以在mistral模型的基礎上,跑通提…

BT下載工具 qBittorrent v5.1.1.10,便攜無廣告,BT下載速度翻倍

[軟件名稱]: BT下載工具 qBittorrent v5.1.1.10 [軟件大小]: 15.9 MB [下載通道]: 夸克盤 | 迅雷盤 軟件介紹 🔥《qBittorrent增強版》v5.1.1.10便攜版|BT下載神器,速度與隱私兼得🌐 ? 核心優勢: ? 無視版權限制…

裂變與重構:2025年大模型生態全景透視及未來趨勢研判

1. 2025上半年:大模型生態的裂變時刻 1.1 技術范式革命:從生成到推理的跨越 2025年1月DeepSeek的橫空出世,標志著大模型正式進入"推理時代"。這款國產模型在發布首周即突破1億用戶量級,其核心突破在于將傳統生成能力升…

【docker】如何正確拉取langgraph-api

加這些配置都沒用 # 設置代理環境變量 export HTTP_PROXY=http://127.0.0.1:7890 export HTTPS_PROXY=http://127.0.0.1:7890 # 設置更長的超時時間 export DOCKER_CLIENT_TIMEOUT=

PIXHAWK(ardupilot4.52)上傳航點的bug

起因是查看飛控日志時發現地面站上傳的平行航線,在日志看到航線卻并不是平行的。 然后對比了一下地面站上傳的航點信息跟飛控讀取到的航點信息 發現經緯度只有前幾位能夠對應上,后幾位都對應不上,兩個點之間相差了50公分。地面站工程師認為地…

車載ECU刷寫文件格式匯總詳解

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從&#x…