1. 用实例来理解朴素贝叶斯
下面用具体的数据来演示垃圾邮件 vs 正常邮件的概率计算
假设我们有一个小型邮件数据集
邮件内容 | 类别(垃圾/正常) |
---|---|
“免费 赢取 大奖” | 垃圾 |
“免费 参加会议” | 正常 |
“中奖 点击 链接” | 垃圾 |
“明天 开会” | 正常 |
“赢取 免费 礼品” | 垃圾 |
Step 1: 统计基础概率
- 总邮件数:5 封
- 垃圾邮件:3 封 →
P(垃圾) = 3/5 = 0.6
- 正常邮件:2 封 →
P(正常) = 2/5 = 0.4
- 垃圾邮件:3 封 →
Step 2: 统计每个词的条件概率
计算每个词在垃圾邮件和正常邮件中出现的概率:
(例如:P("免费"|垃圾)
= 垃圾邮件中出现“免费”的概率)
单词 | 在垃圾邮件中出现的次数 | P(单词|垃圾) | 在正常邮件中出现的次数 | P(单词|正常) |
---|---|---|---|---|
免费 | 3 封(所有垃圾邮件) | 3/3 = 1.0 | 1 封(“免费 参加会议”) | 1/2 = 0.5 |
中奖 | 1 封 | 1/3 ≈ 0.33 | 0 封 | 0/2 = 0.0 |
赢取 | 2 封 | 2/3 ≈ 0.67 | 0 封 | 0/2 = 0.0 |
会议 | 0 封 | 0/3 = 0.0 | 1 封 | 1/2 = 0.5 |
明天 | 0 封 | 0/3 = 0.0 | 1 封 | 1/2 = 0.5 |
注:如果某个词在某一类中未出现(概率=0),会导致整个乘积为0。实际中会使用拉普拉斯平滑(+1)避免此问题,这里暂不展开。
Step 3: 对新邮件进行分类
假设新邮件内容是:“免费 中奖”,判断它是垃圾还是正常邮件。
计算垃圾邮件概率
P(垃圾∣"免费 中奖")∝P(垃圾)×P("免费"∣垃圾)×P("中奖"∣垃圾)=0.6×1.0×0.33≈0.198 P(垃圾|\text{"免费 中奖"}) \propto P(垃圾) \times P(\text{"免费"}|垃圾) \times P(\text{"中奖"}|垃圾) \\ = 0.6 \times 1.0 \times 0.33 \approx \mathbf{0.198} P(垃圾∣"免费 中奖")∝P(垃圾)×P("免费"∣垃圾)×P("中奖"∣垃圾)=0.6×1.0×0.33≈0.198
计算正常邮件概率
P(正常∣"免费 中奖")∝P(正常)×P("免费"∣正常)×P("中奖"∣正常)=0.4×0.5×0.0=0.0 P(正常|\text{"免费 中奖"}) \propto P(正常) \times P(\text{"免费"}|正常) \times P(\text{"中奖"}|正常) \\ = 0.4 \times 0.5 \times 0.0 = \mathbf{0.0} P(正常∣"免费 中奖")∝P(正常)×P("免费"∣正常)×P("中奖"∣正常)=0.4×0.5×0.0=0.0
问题:正常邮件概率=0,因为“中奖”从未在正常邮件中出现过。实际中会调整概率(见后文修正)。
结论
- 垃圾邮件概率:0.198
- 正常邮件概率:0.0
→ 判定为垃圾邮件。
修正:拉普拉斯平滑(避免概率=0)
对未出现的词,给所有计数+1(避免零概率):
- 修正后
P("中奖"|正常) = (0+1)/(2+总唯一词数)
(假设总唯一词数=5,则P("中奖"|正常) = 1/7 ≈ 0.14
)
修正后的正常邮件概率:
P(正常∣"免费 中奖")∝0.4×0.5×0.14≈0.028P(正常|\text{"免费 中奖"})\propto 0.4 \times 0.5 \times 0.14 \approx \mathbf{0.028}P(正常∣"免费 中奖")∝0.4×0.5×0.14≈0.028
此时垃圾邮件概率(0.198)仍大于正常邮件概率(0.028),依然判定为垃圾邮件。
关键点总结
- P(类别):类别的初始概率(如垃圾邮件占60%)。
- P(单词|类别):某类邮件中某个单词出现的概率。
- 连乘:假设所有词独立,概率相乘得到联合概率。
- 平滑处理:避免未出现的词导致概率归零。
这样计算后,选择概率更大的类别作为预测结果!
2.用朴素贝叶斯解释下面的问题
假设有一种病叫做“贝叶死”,它的发病率是万分之一,即10000 人中会有1个人得病。现有一种测试可以检验一个人是否得病的准确率是99.9%,误报率(假阳)是0.1% 那么,如果一个人被查出来患有“叶贝死”,实际上患有的可能性有多大?
问题重述(“贝叶死”检测问题)
-
发病率(先验概率):
P(病)=110000=0.0001P(\text{病}) = \frac{1}{10000} = 0.0001P(病)=100001=0.0001
P(健康)=1−P(病)=0.9999P(\text{健康}) = 1 - P(\text{病}) = 0.9999P(健康)=1−