当前位置: 首页 > news >正文

机器学习--朴素贝叶斯

目录

一、先搞懂贝叶斯:从 “正向” 到 “逆向” 的概率思维

二、朴素贝叶斯:加个 “朴素假设”,解决复杂问题

例子 1:拼写纠正 —— 猜你到底想打哪个词

例子 2:垃圾邮件分类 —— 判断一封邮件是不是垃圾

三、三种常用的朴素贝叶斯模型:对应不同数据类型

1. 多项式朴素贝叶斯(MultinomialNB)

2. 高斯朴素贝叶斯(GaussianNB)

3. 伯努利朴素贝叶斯(BernoulliNB)

四、总结:朴素贝叶斯的 “简单” 与 “实用


从摸球到垃圾邮件分类:我用朴素贝叶斯搞定了机器学习里的 "概率推理"

      今天跟着课程入门了机器学习里的朴素贝叶斯算法,本来以为概率相关的内容会很枯燥,结果跟着例子一步步算下来,发现这算法居然能解决好多生活里的实际问题 —— 从猜穿长裤的是男生还是女生,到帮朋友纠正打错的单词,甚至还能自动识别垃圾邮件。全程没绕复杂公式,全靠 “逆向思考” 把问题想明白,所以想把今天的收获整理下来,也给刚入门的朋友搭个理解的梯子。

一、先搞懂贝叶斯:从 “正向” 到 “逆向” 的概率思维

      一开始老师先介绍了贝叶斯这个人,说是 18 世纪的英国数学家,生前写了篇关于 “逆概” 的文章没被重视,死后才被大家发现价值 —— 现在整个贝叶斯方法的基础,居然是他当年解决一个 “猜球” 问题的思路。

      这个 “猜球” 问题特别好懂,分两种情况:

~正向概率:比如袋子里有 6 个白球、4 个黑球,伸手摸一个,算摸出黑球的概率。这是我们学过的基础概率,直接用 “黑球数量 / 总球数” 就能算,一点不绕。

~逆向概率:但如果我们不知道袋子里黑白球的比例,只知道摸了 3 次,摸出 2 个白球 1 个黑球,怎么推测袋子里可能的黑白球比例?这就是贝叶斯要解决的 “逆问题”—— 从结果反推原因的概率。

      为了让我们更直观,老师还举了个学校里 “穿长裤猜性别” 的例子。假设学校里 60% 是男生,40% 是女生;男生全穿长裤,女生一半穿长裤、一半穿裙子。
先算正向概率:随机找个学生,穿长裤的概率是多少?其实就是 “男生穿长裤的概率 + 女生穿长裤的概率”,也就是 60%×100% + 40%×50% = 80%。
但更实用的是逆向概率:迎面走来个穿长裤的学生,ta 是女生的概率有多大?这时候就不能直接用 40% 算了,得结合 “穿长裤” 这个条件来调整。

      老师带着我们一步步推:假设学校总人数是 U,穿长裤的女生数量就是 U×40%×50%,穿长裤的总人数是 U×60%×100% + U×40%×50%。把这两个数相除,U 会被约掉,最后算出概率是(40%×50%)/(60%×100% + 40%×50%) = 25%。
也就是穿长裤的人里,只有 25% 是女生 —— 这个结果比直接看女生占比 40% 更准确,因为结合了 “穿长裤” 这个观测到的信息。

      而这背后的逻辑,就是贝叶斯公式的核心:P (类别 | 观测数据) = [P (类别)×P (观测数据 | 类别)] / P (观测数据)。简单说,就是用 “先验概率”(比如女生占 40%)和 “似然概率”(比如女生穿长裤的概率 50%),结合观测到的信息(穿长裤),算出更精准的 “后验概率”(穿长裤的是女生的概率 25%)。

二、朴素贝叶斯:加个 “朴素假设”,解决复杂问题

      理解了贝叶斯公式,接下来就是 “朴素贝叶斯”。老师说 “朴素” 两个字是关键 —— 它假设所有特征之间是独立的,互不影响。这个假设看起来有点 “简单粗暴”,但能大大简化计算,还能解决很多实际问题。

例子 1:拼写纠正 —— 猜你到底想打哪个词

      比如我们输入 “tlp”,字典里没有这个词,算法怎么猜我们想打 “top” 还是 “tip”?
这里的 “观测数据 D” 就是 “tlp”,“猜测 h” 就是可能的正确单词(top、tip 等)。根据贝叶斯公式,P (h|D) = [P (h)×P (D|h)] / P (D)。
因为不管猜哪个 h,P (D)(也就是输入 “tlp” 的概率)都是一样的,所以比较的时候可以忽略,只需要算 P (h)×P (D|h)。

      P (h) 是 “先验概率”:比如 “top” 在日常文本中出现的频率比 “tip” 高,所以 P (top) > P (tip)。

      P (D|h) 是 “似然概率”:比如 “top” 错写成 “tlp”,只需要改一个字母(o→l);“tip” 错写成 “tlp”,也需要改一个字母(i→l),所以两者的 P (D|h) 差不多。

      这时候 “先验概率” 就起了关键作用 —— 因为 “top” 出现频率更高,所以算法会优先猜我们想打 “top”。

例子 2:垃圾邮件分类 —— 判断一封邮件是不是垃圾

      再比如判断邮件是不是垃圾邮件。这里 “观测数据 D” 是邮件里的所有单词,“类别 h” 分两种:h+(垃圾邮件)、h-(正常邮件)。
      首先算 “先验概率”:如果邮件库中有 30% 是垃圾邮件,那 P (h+) = 30%,P (h-) = 70%。
      然后算 “似然概率” P (D|h+):也就是 “垃圾邮件中出现这些单词的概率”。因为邮件里有很多单词(d1、d2、d3...),如果考虑单词之间的关联,计算会特别复杂 —— 这时候 “朴素假设” 就派上用场了:假设每个单词出现是独立的,所以 P (d1,d2...|h+) = P (d1|h+)×P (d2|h+)×...×P (dn|h+)。
比如 “免费”“中奖” 这两个词,在垃圾邮件中出现的频率很高,所以 P (免费 | h+) 和 P (中奖 | h+) 都很大,两者相乘后,整个似然概率就会很高。
      最后比较 P (h+|D) 和 P (h-|D),哪个大就归为哪类 —— 这样就能自动识别垃圾邮件了。

三、三种常用的朴素贝叶斯模型:对应不同数据类型

      除了理论,今天还学了怎么用代码实现朴素贝叶斯,而且不同数据类型要选不同的模型,这点特别重要:

1. 多项式朴素贝叶斯(MultinomialNB)

      适合离散型数据,比如文本分类里的 “单词出现次数”。比如统计一篇文章里 “免费”“中奖” 出现了多少次,就用这个模型。
      代码里要从 sklearn 调用 MultinomialNB,还有个关键参数 “alpha”—— 用来加 “拉普拉斯平滑”,避免某些单词没出现过导致概率为 0 的情况(alpha=1 是默认值,设为 0 就是不加平滑)。

2. 高斯朴素贝叶斯(GaussianNB)

      适合连续型数据,比如身高、体重这种具体的数字。老师说如果用多项式模型处理连续数据,误差会很大,而高斯模型会假设数据服从 “正态分布”,通过计算均值和方差来算概率。
调用的时候用 GaussianNB,参数 “priors” 可以自己设定先验概率,如果不设,模型会根据数据自动算。

3. 伯努利朴素贝叶斯(BernoulliNB)

      适合二值化数据(只有 0 和 1),比如文本分类里 “某个单词是否出现”(出现为 1,不出现为 0)。
      参数里除了 alpha,还有个 “binarize”—— 用来设定二值化的阈值,比如设为 0.5,大于 0.5 的数变成 1,小于的变成 0;如果数据已经是 0 和 1 了,就设为 None。

      最后老师还留了个课堂练习:用朴素贝叶斯做手写数字识别,数据从 sklearn 的 load_digits 里调。虽然还没完全做完,但已经能感觉到朴素贝叶斯的优势 —— 计算快、对数据量要求不高,还能解决很多实际问题。

四、总结:朴素贝叶斯的 “简单” 与 “实用”

      今天学下来最大的感受是,朴素贝叶斯没有复杂的数学推导,核心就是 “贝叶斯公式 + 朴素假设”。虽然 “特征独立” 的假设不完全符合现实,但它胜在简单、高效,而且在文本分类、拼写纠正、垃圾识别这些场景里表现特别好。

      对于刚入门机器学习的我来说,这种 “从实际问题出发,用简单假设解决复杂问题” 的思路,比死记公式更有启发。接下来打算把手写数字识别的练习做完,再试试用它给朋友的邮件做个简单的垃圾过滤 —— 毕竟能把学到的东西用起来,才是真的学会了~

http://www.dtcms.com/a/349449.html

相关文章:

  • 零基础-动手学深度学习-13.1. 图像增广
  • 使用烛线图展示二进制01离散量趋势图
  • 嵌入式GPIO外设深度技术解析:从基础原理到高级应用
  • 开源 C++ QT Widget 开发(六)通讯--TCP调试
  • 微软恶意软件删除工具:官方免费的系统安全防护利器
  • CentOS安装Jenkins全流程指南
  • 3-1.Python 函数 - 函数基础(函数概述、函数的定义与调用、函数文档)
  • 8.25 朴素贝叶斯
  • [AI] Firebase Studio :AI+云端 IDE
  • C++深度优先搜素
  • 说明哈夫曼树查询过程的例子
  • 基于MATLAB的遥感图像变化检测
  • 嵌入式系统学习Day22(进程)
  • 【React】案例:B站评论
  • C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
  • Coze用户账号设置修改用户头像-后端源码
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 容器学习day02
  • [React]Antd Cascader组件地区选择
  • SpringBoot整合Elasticsearch
  • SQL语法指南
  • Docker基本使用方法和常用命令
  • Spring文件上传核心技术解析
  • Java 编辑器与 IDE:开发者手中的利剑与盾牌
  • 彻底解决PyCharm中Matplotlib无法显示图形及中文乱码问题
  • Nginx + Certbot配置 HTTPS / SSL 证书
  • 无人机航拍数据集|第21期 无人机四种动物目标检测YOLO数据集2857张yolov11/yolov8/yolov5可训练
  • 数据分析编程第三步:分组统计
  • 无人机航拍数据集|第17期 无人机油棕树目标检测YOLO数据集1803张yolov11/yolov8/yolov5可训练
  • 读《精益数据分析》:A/B测试与多变量测试