贝叶斯定理

本文通过贝叶斯定理实例解析,探讨了如何在已知香草曲奇饼被取出的情况下,计算从碗A获取它的概率。通过先验概率、后验概率和贝叶斯公式,一步步演示了计算过程,并用Python代码展示了如何在Bayes类中实现相关概率计算。
摘要由CSDN通过智能技术生成

贝叶斯定理-贝叶斯定理

假设有两碗曲奇饼,碗A包含30个香草曲奇饼和10个巧克力曲奇饼,碗B这两种曲奇饼各20个。
现在假设你在不看的情况下随机地挑一个碗拿一块饼,得到了一块香草曲奇饼。
问题:从碗A取到香草曲奇饼的概率是多少?

贝叶斯定理

联合概率可交换,即 P(A and B)=P(B and A)
对于任意事件A、B都独立,因此联合概率P(A and B)=P(B)P(A|B)
两步骤执行交换,即P(B and A)=P(A)P(B|A)
因为步骤1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)
最后等式两端除以P(B),得到P(A|B)=P(A)P(B|A)/P(B)

本题数学的计算过程

P(碗A|香草饼)= P(碗A)*P(香草饼|碗A)/P(香草饼)
P(碗A)=1/2
P(香草饼|碗A)=3/4
P(香草饼)=50/(50+30)=5/8
所以最后经过计算
P(碗A|香草饼)=3/5=0.6

先验概率、后验概率、似然度、标准化常量
我觉得在python实现代码前最好大家能够记住先验概率、后验概率这些概念(如果能理解更好)。 对上述贝叶斯定理的理解,还有一种解释思路,叫做“历时诠释”。“历时”意味着某些事情随着时间而发生,即假设的概率随着看到新数据而发生变化。
在考虑H(Hypothsis)和D(Data)情况下,贝叶斯定理的表达式可以写成:

P(H|D)=P(H)P(D|H)/P(D)

在考虑H和D的情况下,每项意义如下:

P(H)称为先验概率,即在得到新数据前某一假设的概率。如没有得到掷硬币结果前,我们先假设正反面概率各位50%。
P(H|D)称为后验概率,即看到新数据后,我们要计算的该假设的概率。
P(D|H)是该假设下得到这一数据的概率,称为似然度。
P(D)是任何假设下得到这一数据的概率,称为标准化常量。

本题目Python的实现分析

了解了前面的铺垫,现在好办了。希望大家没有看晕,都能坚持到现在。

首先定义Bayes类,初始化创建一个dict类型的容器container。该容器是为了储存贝叶斯各项信息。key键存储假设,value值存储概率

Set方法是给容器添加先验假设及先验概率 Mult方法:根据key查找到先验概率,并更新概率。

Normalize方法:归一化(建议大家等会运行代码时候看下有无Normalize的区别,就能理解归一化这一含义)

Prob方法:返回某一事件的概率

# -*- coding: utf-8 -*-
"""
Created on Tue Mar 23 14:38:48 2021

@author: Administrator
"""
class Bayes(object):
    def __init__(self):
        self._container = dict()

    def Set(self,hypothis,prob):
        self._container[hypothis]=prob

    def Mult(self,hypothis,prob):
        old_prob = self._container[hypothis]
        self._container[hypothis] = old_prob*prob

    def Normalize(self):
        count = 0
        for hypothis in self._container.values():
            count=count+hypothis
        for hypothis,prob in self._container.items():
            self._container[hypothis]=self._container[hypothis]/count

    def Prob(self,hypothis):
        Prob = self._container[hypothis]
        return Prob
        
#实例化Bayes类
bayes = Bayes()

#先验概率
bayes.Set('Bow_A',0.5)  #P(碗A)=1/2
bayes.Set('Bow_B',0.5)  #P(碗B)=1/2

#后验概率
bayes.Mult('Bow_A',0.75)  #P(香草饼|碗A)=3/4
bayes.Mult('Bow_B',0.5)   #P(香草饼|碗B)=1/2

bayes.Normalize()
prob = bayes.Prob('Bow_A') #P(碗A|香草饼)
print("从碗A渠道香草曲奇饼的概率:{}".format(prob))

运行结果:

从碗A渠道香草曲奇饼的概率:0.6
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值