机器学习中的朴素贝叶斯(Naive Bayes)模型

1. 用实例来理解朴素贝叶斯

下面用具体的数据来演示垃圾邮件 vs 正常邮件的概率计算


假设我们有一个小型邮件数据集

邮件内容 类别(垃圾/正常)
“免费 赢取 大奖” 垃圾
“免费 参加会议” 正常
“中奖 点击 链接” 垃圾
“明天 开会” 正常
“赢取 免费 礼品” 垃圾

Step 1: 统计基础概率

  • 总邮件数:5 封
    • 垃圾邮件:3 封 → P(垃圾) = 3/5 = 0.6
    • 正常邮件:2 封 → P(正常) = 2/5 = 0.4

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.330.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.140.028
此时垃圾邮件概率(0.198)仍大于正常邮件概率(0.028),依然判定为垃圾邮件。


关键点总结

  1. P(类别):类别的初始概率(如垃圾邮件占60%)。
  2. P(单词|类别):某类邮件中某个单词出现的概率。
  3. 连乘:假设所有词独立,概率相乘得到联合概率。
  4. 平滑处理:避免未出现的词导致概率归零。

这样计算后,选择概率更大的类别作为预测结果!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alpha xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值