由两道题理解贝叶斯的先验,后验定律

1.想起曾经的一道笔试题,现有甲,乙两个箱子,甲箱中有70个红球,30个白球;乙箱中有40个红球,60个白球。选取甲乙两箱的几率相等都为50%。

1.求随机选取一球为红球的概率。

2.若选取的为红球,求来自甲乙两箱的概率。

解:

1.这是用的贝叶斯的先验定律,通俗来说,就是知道由条件求结果,顺序求解,分别求甲乙两箱的红球概率最后相加。

A:甲箱

a:乙箱

B:红球

p(B)=p(B|A)*p(A)+p(B|a)*p(a)=0.7*0.5+0.4*0.5=55%

2.这就要用后验定律,通俗来说,由结果求可能的原因,逆向求解:

正常先贝叶斯公式推导:p(A|B)=p(AB)/p(B)

                                     p(B|A)=p(AB)/p(A)

                                     p(A|B)*p(B)=p(B|A)*p(A)=p(AB)

                                     p(A|B)=p(B|A)*p(A)/p(B)

同样假设:A:甲箱 a:乙箱  B:红球

p(A|B)=p(B|A)*p(A)/p(B)

p(B)由第一问求得:p(B)=p(B|A)*p(A)+p(B|a)*p(a)=55%

来自甲箱的概率为:

p(A|B)=p(B|A)*p(A)/(p(B|A)*p(A)+p(B|a)*p(a))=0.7*0.5/0.55=7/11

来自乙箱的概率为:

p(a|B)=p(B|a)*p(a)/(p(B|a)*p(a)+p(B|A)*p(A))=0.4*0.5/0.55=4/11

2. 办公室新来了一个雇员小王,小王是好人还是坏人大家都在猜测。按人们主观意识,一个人是好人或坏人的概率均为0.5。坏人总是要做坏事,好人总是做好事,偶尔也会做一件坏事,一般好人做好事的概率为0.9,坏人做好事的概率为0.2,一天,小王做了一件好事,小王是好人的概率有多大,你现在把小王判为何种人。

解:A:小王是个好人

    a:小王做好事

B:小王是个坏人

b:小王做坏事


0.82>0.18 所以小王是个好人、






### 朴素贝叶斯算法计算示例 #### 目背景 假设有一个数据集用于判断一封电子邮件是否为垃圾邮件。该数据集中有三个属性:`含有免费` (`Free`)、`含有一等奖` (`Prize`) 和 `来自特定发件人` (`Sender`),以及标签 `是否为垃圾邮件` (`Spam`)。 | Free | Prize | Sender | Spam | |------|-------|--------|------| | 是 | 否 | 是 | 是 | | 否 | 是 | 否 | 是 | | 否 | 否 | 是 | 否 | | 是 | 是 | 否 | 是 | | 否 | 否 | 否 | 否 | 现在收到一封新邮件,其特征为 `{Free=否, Prize=是, Sender=否}`,试用朴素贝叶斯分类器来预测这封邮件是否为垃圾邮件。 #### 数据准备与预处理 为了简化问,假定所有变量都是离散型,并且已知先验概率 P(Spam) 及条件概率表如下: - **P(Spam)** = (数量为 "是" 的记录数 / 总记录数) = 3/5 - **P(Not Spam)** = (数量为 "否" 的记录数 / 总记录数) = 2/5 对于每个属性 A_i,在给定类别 C 下的概率可以通过频率统计得到: \[ P(A_i \mid C)=\frac{\text { 属性 } A_{i}=\alpha \text { 并且属于类别 } C}{\text { 类别 } C \text { 中的总样本数 }} \] #### 条件概率计算 根据上述表格可以得出以下条件概率值: - \( P(\mathrm{Free}=N o \mid S p a m)\approx0.67 \)[^1] - \( P(P r i z e=Y e s \mid S p a m)\approx0.67 \) - \( P(S e n d e r=N o \mid S p a m)\approx0.67 \) 同样地,也可以获得非垃圾邮件对应的条件概率: - \( P(Free=No \mid Not Spam)≈1.0 \) - \( P(Prize=Yes \mid Not Spam)≈0.0 \) - \( P(Sender=No \mid Not Spam)≈0.67 \) 注意这出现了零概率的情况 (\(P(Prize=Yes \mid Not Spam)\)) ,实际应用中通常会采用拉普拉斯平滑或其他技术避免这种情况发生。 #### 应用贝叶斯公式求解后概率 利用贝叶斯定理可得两个类别的后概率分别为: \[ P(Spam \mid X )=\frac{P(X \mid Spam)*P(Spam)}{P(X)} \] 其中, \(X\) 表示观测到的数据向量 `(Free=No, Prize=Yes, Sender=No)`; 而分母 \(P(X)\),即边缘似然度,则可通过全概率定律由各个可能原因加权平均而来,但在比较不同类别时可以直接忽略这个常数因子不影响最终结果判定。 因此只需要关注分子部分即可做出决策: \[ P(Spam \mid X ) ∝ P(X \mid Spam)*P(Spam) \] 代入具体的数值进行运算: \[ P(Spam \mid X ) ∝ 0.67 * 0.67 * 0.67 * 0.6 ≈ 0.189 \] 同理, \[ P(Not Spam \mid X ) ∝ 1.0 * 0.0 * 0.67 * 0.4 ≈ 0.0 \] 显然,前者远大于后者,所以应该将此条消息标记为垃圾邮件。 ```python def naive_bayes_classifier(features, spam_probabilities, not_spam_probabilities): # Calculate the product of probabilities for each class given features. prob_spam_given_features = ( spam_probabilities['free_no'] * spam_probabilities['prize_yes'] * spam_probabilities['sender_no'] * spam_probabilities['prior'] ) prob_not_spam_given_features = ( not_spam_probabilities['free_no'] * not_spam_probabilities['prize_yes'] * not_spam_probabilities['sender_no'] * not_spam_probabilities['prior'] ) return 'Spam' if prob_spam_given_features > prob_not_spam_given_features else 'Not Spam' spam_probs = {'free_no': 0.67, 'prize_yes': 0.67, 'sender_no': 0.67, 'prior': 0.6} not_spam_probs = {'free_no': 1.0, 'prize_yes': 0.0, 'sender_no': 0.67, 'prior': 0.4} features_to_classify = ['no', 'yes', 'no'] result = naive_bayes_classifier(features_to_classify, spam_probs, not_spam_probs) print(f"The email is classified as: {result}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值