Python解决曲奇饼问题

标签: Python
7人阅读 评论(0) 收藏 举报
分类:

相关Python模块自行下载,主要是thinkbayes.py。

一、问题描述

有两个碗,每个碗中装有vanilla和chocolate,数量不等,且选择两个碗的概率相同

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

class Cookie(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 = Cookie(hypos)
    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
查看评论

浅谈贝叶斯定理

浅谈贝叶斯定理 看了《贝叶斯思维:统计建模的Python学习法》的第一章,我对贝叶斯定理有了更深刻的理解。引用其中的例子来梳理一下思路: 首先要了解概率和条件概率的概念。 概率表示0和1之间的数...
  • LAN_Randall
  • LAN_Randall
  • 2017-09-17 17:20:12
  • 192

曲奇饼问题

案例1,假设有两碗曲奇饼,碗1包含30个香草曲奇饼和10个巧克力曲奇饼,碗2有香草曲奇饼10个和巧克力曲奇饼10个。碗1和碗2都放在黑箱中,问从黑箱里的碗1中取到香草曲奇饼的概率?   解:根据贝叶...
  • sanqima
  • sanqima
  • 2016-05-18 19:12:55
  • 1172

一个贝叶斯问题

今天某人讲概率课,有个学生拿着一本“思考,快与慢”的书来问问题,里面提到一个例子 “例如,如果你相信有3%的研究生是被计算机科学专业录取的(基础比率),你还相信汤姆是该领域研究生的可能性是其他领域的4...
  • carpinter
  • carpinter
  • 2014-03-18 23:06:00
  • 1247

第四届“”世安杯“”线上赛题解(Web+Stego+Misc+Crypto)

题目很多原题,但是还是考验了不少的知识点,就算是原来见过的也当做是复习了一下知识点了。 WEB ctf入门级题目 非常水的一道题,可以看到源码,然后利用%00截断就可以通过了 曲奇饼 ...
  • qq_35078631
  • qq_35078631
  • 2017-10-08 18:25:15
  • 1055

用Python解决了个数学问题

群里有人问 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。 3个3个拿,正好拿完。 4个4个拿,还剩1个。 5个5个拿,还差1个。 6个6个拿,还剩3个。 7个7个拿,正好...
  • xiaokui9
  • xiaokui9
  • 2017-02-08 14:47:29
  • 876

用python解决你的实际问题,忘记语言吧

我在思考一个问题。软件是为人服务的,而人的需求一直在变。什么东西能快速适应这种需求的变更。 本人从汇编玩到C,总觉得这些底层的东西吧~~强大是强大,但是用起来费劲,而且分散你的经历,不能把精力放在应用...
  • cpuwolf
  • cpuwolf
  • 2016-01-28 13:40:41
  • 1065

Python编程速度技巧

  • 2008年11月12日 15:27
  • 36KB
  • 下载

【编程语言】如何解决菱形继承问题

继承、封装和多态是面向程序设计(OOP)的三大特点,而它们三者之中最具实际操作性的当属继承。通过继承可以实现简单功能的组合和定制,而多重继承更将这种能力发挥到更高的境界。不过事事都有弊端,如果使用多重...
  • yuyu2223
  • yuyu2223
  • 2012-05-11 22:28:13
  • 1191

算法研究:利用Python解决数学计数原理问题

最近数学修行到“计数原理”部分,前几天做作业时遇到这样一道数学题: 用四种不同颜色给三棱柱六个顶点涂色,要求每个点涂一种颜色,且每条棱的两个端点涂不同颜色,则不同的涂色方法有多少种? 当我看完题目后...
  • yorhomwang
  • yorhomwang
  • 2016-08-03 22:10:39
  • 1700

迭代解决装载问题

王晓东算法书第五章装载问题,迭代法解决
  • wuxin143
  • wuxin143
  • 2015-11-21 22:03:51
  • 216
    个人资料
    持之以恒
    等级:
    访问量: 1164
    积分: 209
    排名: 33万+
    文章存档