📬

朴素贝叶斯分类器

你收到一封邮件,一眼扫过去就知道它是不是垃圾邮件——
机器是怎么学会这件事的?答案就藏在"数数"里面。

核心思路:朴素贝叶斯的做法非常直觉——翻一翻过去的邮件,数一数垃圾邮件里这些词出现过几次,正常邮件里又出现过几次,哪边的可能性更大,就归为哪一类。接下来我们一步步来看。

1 训练数据:过去的邮件记录

假设我们手里有 10 封已经标记好的邮件。我们从每封邮件中提取了 4 个关键词,看它们是否出现:

邮件内容 免费 中奖 会议 同学 分类
💡 试试看:把鼠标移到表格上,感受一下数据的分布。你能看出哪些词更"像"垃圾邮件吗?

2 先验概率:不看内容,先数比例

在 10 封邮件中,垃圾邮件和正常邮件各占多少?这就是先验概率——在不看邮件内容的情况下,一封新邮件是垃圾的"基础概率"。

5 / 10 = 50%
🚫 P(垃圾邮件)
5 / 10 = 50%
✅ P(正常邮件)
通俗理解:就像抛硬币之前,正反各 50%。这是我们的"起始判断"。接下来看邮件内容,就会不断调整这个判断。

3 条件概率:每个词的"嫌疑"有多大?

现在我们来数:在垃圾邮件中,每个关键词出现过几次?在正常邮件中呢?

比如:5 封垃圾邮件中有 3 封包含"免费"→ P("免费" | 垃圾) = 3/5

在垃圾邮件中出现的概率 在正常邮件中出现的概率
💡 观察:"免费"在垃圾和正常邮件中都出现过(3/5 vs 1/5),所以它不是"一定是垃圾",只是垃圾的可能性更高。 而"会议"只在正常邮件中出现过,是一个很强的"正常"信号。

4 相乘得结果:把线索合并起来

现在来了一封新邮件:"免费中奖啦!",包含"免费"和"中奖",不包含"会议"和"同学"。

我们的任务:算出这封邮件是垃圾/正常的概率各是多少,方法就是把所有线索乘起来

🚫 算"是垃圾"的可能性

先验: P(垃圾) = 1/2
含"免费": P(免费 ✓ | 垃圾) = 3/5
含"中奖": P(中奖 ✓ | 垃圾) = 3/5
不含"会议": P(会议 ✗ | 垃圾) = 5/5 = 1
不含"同学": P(同学 ✗ | 垃圾) = 5/5 = 1
全部相乘: 1/2 × 3/5 × 3/5 × 1 × 1 = 9/50 = 0.18

✅ 算"是正常"的可能性

先验: P(正常) = 1/2
含"免费": P(免费 ✓ | 正常) = 1/5
含"中奖": P(中奖 ✓ | 正常) = 1/5
不含"会议": P(会议 ✗ | 正常) = 2/5
不含"同学": P(同学 ✗ | 正常) = 3/5
全部相乘: 1/2 × 1/5 × 1/5 × 2/5 × 3/5 = 6/1250 ≈ 0.0048

5 为什么叫"朴素"?

你注意到了吗?在第 4 步的计算中,我们直接把每个词的概率在了一起:

P(免费) × P(中奖) × P(会议) × P(同学)

这背后有一个大胆的假设:每个词的出现是相互独立的,互不影响。

⚠️ 真实情况:"免费"和"中奖"在垃圾邮件中经常一起出现,它们并不是完全独立的。但朴素贝叶斯"天真地"假设它们独立,所以叫"朴素"(Naive)

你可能会问:这个假设明明不对,为什么还能用?

💡 关键洞察:虽然独立假设不完美,但朴素贝叶斯只需要比较两个乘积的大小,不需要精确值。 即使每个概率有点偏差,只要"谁大谁小"的排序没变,分类结果就是对的。这就是朴素贝叶斯"简单但好用"的秘密。

6 一个小问题:零概率陷阱

仔细看我们的数据:"会议"这个词在 5 封垃圾邮件中一次都没出现过。如果新邮件里有"会议"呢?

❌ 不做处理
P(会议 ✓ | 垃圾) = 0/5
= 0
任何数 × 0 = 0
整个乘积直接变成 0!
✅ 拉普拉斯平滑
P(会议 ✓ | 垃圾) = (0+1) / (5+2)
= 1/7 ≈ 0.14
分子 +1,分母 +2
小概率但不是零!
通俗理解:拉普拉斯平滑就像给每种情况预留了一张"底牌"——就算从没见过,也不能完全说"不可能"。这样就避免了"一票否决"的问题。

具体做法:分子加 1(假设每种情况至少出现 1 次),分母加 2(因为每个特征有"出现"和"不出现"两种取值)。

7 自己试试!交互式分类器

选择新邮件中包含哪些关键词,右侧会实时展示完整的计算过程

📝 这封邮件包含:

🚫 垃圾邮件 ✅ 正常邮件
50%
50%
请选择关键词,查看分类结果 →

📐 计算过程

🎓 小结

朴素贝叶斯三步走:

数比例 — 垃圾邮件和正常邮件各占多少?(先验概率)

数词频 — 每个词在两类邮件中出现了几次?(条件概率)

全部乘 — 把先验和每个词的概率乘起来,比大小(朴素假设 + 贝叶斯定理)


就这么简单——本质上就是数数和乘法。 "朴素"的假设让计算变得高效,而实践证明这个方法在文本分类中效果很好。