贝叶斯算法

1、贝叶斯算法是统计学的一种分类方法,总体未知,通过摸出球的颜色来预测桶内不同颜色球的比例(通过已知球的信息,推出抽奖桶的信息)

2、一些常见的知识

先验概率:某个事件发生的概率

后验概率:事件A在另一个事件B已经发生的条件下发生的概率

后验概率=(先验概率✖️似然概率) / 常数(贝叶斯决策根据后验概率作出决策)

这里主要看(先验概率✖️似然概率)大小

3、贝叶斯是机器学习的核心方法之一,通常用于垃圾邮件过滤,中文分词,艾滋病检查,肝癌检查等

4、具体实例(曲奇饼概率计算)

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


要求:请你计算从碗A渠道香草曲奇饼的概率是多少?

解:先验概率 P(碗A)= 1/2         P(碗B) =  1/2

       似然概率 P(香草饼|碗A)=  1/2  *  30/40           P(香草饼|碗B)  =  1/2  *  20/40

代码部分(详细代码注释):

自定义贝叶斯容器

class Bayes(object):
    #初始化创建一个dict类型的容器container。该容器是为了储存贝叶斯各项信息。key键存储假设,value值存储概率
    def __init__(self):
        #创建的是字典类型,{key_1:value_1,key_2:value_2}
        self._container = dict()

    #Set方法是给容器添加先验假设及先验概率
    def Set(self,hypothis,prob):
        #表示记录特定的先验概率
        #比如bayes.Set('Bow_A', 1/2) ,具体效果这样{'Bow_A':1/2}
        self._container[hypothis]=prob
    
    #Mult方法:根据key查找到先验概率,并更新概率
    def Mult(self,hypothis,prob):
        #old_prob去取到hypothis的先验概率
        old_prob = self._container[hypothis]
        #将先验概率✖️似然概率 即得到了后验概率
        #通过后验概率来确定具体分类
        self._container[hypothis] = old_prob*prob

    #Normalize方法:归一化
    def Normalize(self):
        count = 0
        for hypothis in self._container.values():
            #将所有的后验概率累加
            count=count+hypothis
        for hypothis,prob in self._container.items():
            #得到{具体的目标:具体目标的后验概率}
            #将每个具体目标的后验概率除于总的后验概率,将其统一到0-1
            self._container[hypothis]=self._container[hypothis]/count
    
    #Prob方法:返回某一事件的概率
    def Prob(self,hypothis):
        #获得归一化后的后验证概率
        Prob = self._container[hypothis]
        return Prob

初始化贝叶斯,输入相应的先验概率和后验概率,得到结果

#实例化Bayes类
#具体初始化可以得到默认的字典,Set、Mult、Normalize、Prob方法
bayes = Bayes()
#############请补充代码,根据所学知识求出先验概率和后验概率的值并补充###########
#先验概率
bayes.Set('Bow_A', 1/2)  #P(碗A)=1/2
bayes.Set('Bow_B', 1/2)  #P(碗B)=1/2

#后验概率
bayes.Mult('Bow_A', 3/4)  #P(香草饼|碗A)=(1/2 ✖️ 3/4)
bayes.Mult('Bow_B', 1/2)   #P(香草饼|碗B)=(1/2 ✖️ 1/2)
#############补充完毕##############

#Normalize的具体操作就是 (1/2 ✖️ 3/4) / 0.625  (1/2 ✖️ 1/2) / 0.625
bayes.Normalize()
#得到后验概率,通过后验概率可以得到具体的结果
prob = bayes.Prob('Bow_A')#P(碗A|香草饼)
print('从碗A取到香草曲奇饼的概率:{}'.format(prob))

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值