深度解析基于贝叶斯的垃圾邮件分类

贝叶斯垃圾邮件分类的核心逻辑是基于贝叶斯定理,利用邮件中的特征(通常是单词)来计算该邮件属于“垃圾邮件”或“非垃圾邮件”的概率,并根据概率大小进行分类。它是一种朴素贝叶斯分类器,因其假设特征(单词)之间相互独立而得名(虽然这在现实中不完全成立,但效果通常很好)。

本文由「大千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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…