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))