朴素贝叶斯(Naive Bayes)详解
朴素贝叶斯是一种基于概率进行分类的机器学习算法。它的核心思想是:根据已经观察到的信息,计算一个样本属于不同类别的概率,然后选择概率最大的类别。
它经常用于:
- 垃圾邮件识别:判断一封邮件是不是垃圾邮件。
- 文本分类:判断一篇文章属于科技、体育还是财经。
- 情感分析:判断一条评论是正面还是负面。
- 初步故障分类:根据告警特征,判断设备可能属于哪种故障类型。
你可以先记住一句话:朴素贝叶斯就是利用已有数据统计概率,再用概率判断新数据属于哪一类。
一、先理解贝叶斯定理
假设你收到一封邮件,里面出现了"免费""中奖""领取"等词语。你想判断这封邮件是不是垃圾邮件。
我们需要考虑:
- 原本收到垃圾邮件的概率是多少?
- 垃圾邮件中出现"中奖"这个词的概率是多少?
- 正常邮件中出现"中奖"这个词的概率是多少?
贝叶斯定理就是把这些信息结合起来,更新我们对邮件类别的判断。

它的数学公式是:

各个符号的含义如下:
| 符号 | 含义 | 邮件案例 |
|---|---|---|
| (P(A)) | 先验概率 | 邮件是垃圾邮件的原始概率 |
| (P(B\mid A)) | 条件概率 | 垃圾邮件中出现"中奖"的概率 |
| (P(B)) | 证据概率 | 所有邮件中出现"中奖"的概率 |
| (P(A\mid B)) | 后验概率 | 已知出现"中奖"后,邮件是垃圾邮件的概率 |
最重要的是最后一项:(P(A | B))。
它回答的问题是:已经知道某个特征出现了,那么样本属于某个类别的概率是多少?
注意,(P(A | B)) 和 (P(B | A)) 不是同一个概率。
二、为什么叫"朴素"贝叶斯?
"朴素"不是说算法简单到没有用,而是因为它做了一个比较强的假设:
给定类别之后,各个特征之间相互独立。
例如,判断一封邮件是不是垃圾邮件,我们关注三个词:
- 免费
- 中奖
- 领取
现实中,这些词可能经常一起出现,并不完全独立。但朴素贝叶斯为了简化计算,假设在已知邮件类别的情况下,这些词的出现可以分别计算概率,再将概率相乘。
假设一封邮件包含这三个词,那么:

这就是朴素贝叶斯的关键简化。
三、通过一个完整例子理解它如何分类
假设我们已经收集了 100 封邮件:
- 40 封垃圾邮件
- 60 封正常邮件
通过统计历史数据,我们得到下面的概率。这里的数值是为了演示而设定的。
| 统计项目 | 垃圾邮件 | 正常邮件 |
|---|---|---|
| 邮件总占比 | 40% | 60% |
| 出现"免费"的概率 | 80% | 10% |
| 出现"中奖"的概率 | 50% | 5% |
现在收到一封新邮件,里面同时出现了"免费"和"中奖"。
我们来计算它属于哪一类的概率分数。

如果进一步把两个分数归一化为概率:

这个例子说明,邮件原本是垃圾邮件的概率只有 40%,但观察到"免费"和"中奖"之后,判断结果发生了变化。
注意:这个 98.16% 是在上述概率估计和独立性假设成立的条件下得到的,并不代表现实系统一定有这么高的准确率。
四、朴素贝叶斯是怎么训练的?
与需要反复调整大量参数的一些模型不同,朴素贝叶斯的基础训练过程比较直接。

实际使用文本数据时,通常还需要把文本转成模型能处理的特征,例如词频或词是否出现。
另外,实际训练中经常使用拉普拉斯平滑,避免某个词从未在某一类中出现、导致整类概率被乘成零的情况。
五、朴素贝叶斯有哪些常见类型?
| 类型 | 适用场景 | 特点 |
|---|---|---|
| 高斯朴素贝叶斯 | 温度、压力、尺寸等连续数值 | 假设每个类别下的特征近似服从高斯分布 |
| 多项式朴素贝叶斯 | 文本分类、词频统计 | 适合统计各个词出现的次数 |
| 伯努利朴素贝叶斯 | 文本分类、二值特征 | 主要考虑特征出现或未出现 |
例如,如果你处理的是一批设备的温度、振动幅度和压力数据,可以了解高斯朴素贝叶斯;如果是分析文本日志中的告警关键词,可以优先了解多项式或伯努利朴素贝叶斯。
六、朴素贝叶斯的优点和缺点
优点
- 训练速度快,计算成本低。
- 数据量不大时也可能有不错的效果。
- 适合高维文本特征。
- 结果相对容易解释,可以查看不同特征的概率。
缺点
- 特征独立假设往往不完全符合现实。
- 特征之间的复杂关系难以充分表达。
- 概率估计不一定准确,尤其是在特征相关性很强时。
- 对连续特征的分布假设不合适时,效果可能下降。
七、和其他机器学习算法有什么区别?
| 对比项 | 朴素贝叶斯 | 决策树 | 逻辑回归 |
|---|---|---|---|
| 核心思路 | 统计概率 | 学习条件分支 | 学习类别概率与特征的关系 |
| 训练速度 | 通常很快 | 通常较快 | 通常较快 |
| 特征独立假设 | 有 | 没有强制要求 | 没有强制要求 |
| 文本分类 | 很适合做基线模型 | 可以使用 | 通常也很适合 |
| 复杂特征关系 | 表达能力有限 | 可以学习部分非线性关系 | 标准形式主要学习线性关系 |
八、最后用一句话记住它
朴素贝叶斯 = 贝叶斯概率计算 + 特征条件独立假设 + 选择概率分数最高的类别。
如果你正在学习机器学习,建议下一步动手实现一个简单的垃圾邮件分类器。用 Python 的 scikit-learn 就能完成,能直观理解从训练数据、概率统计到预测结果的整个过程。