7人阅读 评论(0)

# 一、问题描述

pmf = Pmf()
# 初始化选择两个碗的概率
pmf.set('Bowl 1', 0.5)
pmf.set('Bowl 2', 0.5)
# 设置两个碗中分别取vanilla的概率
pmf.Mult('Bowl 1', 0.75)
pmf.Mult('Bowl 2', 0.5)
# 归一化概率
pmf.Normalize()
# 打印碗1中vanilla的概率
print pmf.Prob('Bowl 1')

# 二、初步实现

from thinkbayes import Pmf
pmf = Pmf()
pmf.Set('Bowl 1', 0.5)
pmf.Set('Bowl 2', 0.5)

pmf.Mult('Bowl 1', 0.75)
pmf.Mult('Bowl 2', 0.5)

pmf.Normalize()

print pmf.Prob('Bowl 1')

# 三、Python面向对象实现

from thinkbayes import Pmf

'''
定义曲奇饼类
'''
def __init__(self, hypos):
'''
初始化类
'''
Pmf.__init__()self
forhypo in hypos:
self.Set(hypo, 1)
self.Normalize()

def Update(self, date):
'''
更新概率，即归一化概率
'''
for hypo in self.Values():
like = Likelihood(date, hypo)
self.Mult(hypo,like)
self.Normalize()

# 碗中中的对象
maxes = {
'Bowl 1':dcit(vanilla=0.75, chocolate=0.25),
'Bowl 2':dict(vanilla=0.5, chocolate=0.5),
}

def Likelihood(self, date, hypo):
# 取碗中每个对象的似然概率
mix = self.mixes[hypo]
like = mix[date]
return like

def main()
hypos = ['Bowl 1', 'Bowl 2']
pmf.Update('vanilla')
# pmf.Update('chocolate')
for hypo,prob in pmf.Item():
print hypo, prob

if __name__=='__main__':
main()

# 四、输出结果

Bowl 1 0.6
Bowl 2 0.4

Bowl 1 0.3333333
Bowl 2 0.6666666

个人资料
等级：
访问量： 1164
积分： 209
排名： 33万+
文章存档