Exemplo n.º 1
0
from thinkbayes import Pmf

#Cookies problem
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'))
Exemplo n.º 2
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
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')
Exemplo n.º 3
0
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 17 11:21:39 2020

@author: isajarspector
"""

from thinkbayes import Pmf
pmf = Pmf()
for x in [1, 2, 3, 4, 5, 6]:
    pmf.Set(x, 1 / 6)

print(pmf.Prob(1))
Exemplo n.º 4
0
## based on "Cookie" problem
## http://www.greenteapress.com/thinkbayes/

from thinkbayes import Pmf

pmf = Pmf()
pmf.Set("H1", 1 / 2.0)
pmf.Set("H2", 1 / 2.0)

pmf.Mult("H1", 30 / 40.0)
pmf.Mult("H2", 20 / 40.0)

pmf.Normalize()

for bowl in ["H1", "H2"]:
    print bowl, pmf.Prob(bowl)
Exemplo n.º 5
0
def CH2_2():
    """
    Cookie Problem (曲奇饼问题)
    碗1: 30个香草味 10个巧克力味
    碗2: 20个香草味 20个巧克力味

          |     碗1       |     碗2       |
          | 香草 | 巧克力 | 香草 | 巧克力 |
   -------+---------------+---------------+
    先验  |     0.5       |     0.5       |
    ------+---------------+---------------+ 
    似然度| 0.75 | 0.25   |  0.5 | 0.5    | 
    ------+------+--------+---------------- 
    后验  |0.375 | 0.125  | 0.25 | 0.25   |
   -------+--^---+--------+----------^----+
          |  |   |        |          |    |
          |  +---+--------+----------+    |
    归一化| 0.6  |        |               |

      0.375 / (0.375 + 0.25)
    """

    # 先验
    pmf = Pmf()
    pmf.Set(x='b1', y=0.5)
    pmf.Set(x='b2', y=0.5)

    # 乘以似然度 (香草)
    pmf.Mult('b1', 0.75)
    pmf.Mult('b2', 0.5)

    # 归一化
    pmf.Normalize(fraction=1.0)
    print("b1 = %.3f" % (pmf.Prob('b1', default=0)))
    print("b2 = %.3f" % (pmf.Prob('b2', default=0)))

    class Cookie(Pmf):
        # 似然度
        mixes = {
            'bow1': {
                'vanilla': 0.75,
                'chocolate': 0.24
            },
            'bow2': {
                'vanilla': 0.5,
                'chocolate': 0.5
            }
        }

        def __init__(self, hypos):
            Pmf.__init__(self)
            # 先验概率
            for hypo in hypos:
                self.Set(hypo, 1)
            self.Normalize()

        # 计算后验概率
        def Update(self, data):
            for hypo in self.Values():
                # 在该假设的条件下, 计算似然度
                like = self.Likelihood(data, hypo)
                self.Mult(hypo, like)
            return self.Normalize()

        def Likelihood(self, data, hypo):
            mix = self.mixes[hypo]
            return mix[data]

    hypos = ["bow1", "bow2"]
    data = 'vanilla'
    cookie = Cookie(hypos)
    # D: 香草
    cookie.Update(data)
    for hypo, prob in sorted(cookie.Items()):
        print('p(%s/%s) = %.3f' % (hypo, data, prob))

    # 有放回replace, 取三块
    cookie = Cookie(hypos)
    dataset = ['vanilla', 'chocolate', 'vanilla']
    for data in dataset:
        cookie.Update(data)
    for hypo, prob in sorted(cookie.Items()):
        print('p(%s/%s) = %.3f' % (hypo, dataset, prob))
Exemplo n.º 6
0
from thinkbayes import Pmf

pmf = Pmf()
pmf.Set('b1', 0.5)
pmf.Set('b2', 0.5)
print pmf.Items()

pmf.Mult('b1', 0.75)
pmf.Mult('b2', 0.5)
print pmf.Items()

pmf.Normalize()
print pmf.Items()
print pmf.Prob('b1')


Exemplo n.º 7
0
for x in [1, 2, 3, 4, 5, 6]:
    pmf.Set(x, 1./6)





# re-introducing pmf.
word_list = ['atirei', 'o', 'pau', 'atirei', 'gato', 'gato']

pmf = Pmf()
for word in word_list:
    pmf.Incr(word, 1)
pmf.Normalize()

print(pmf.Prob('gato'))








# the cookie problemm
pmf = Pmf()
pmf.Set("bowl 1", .5)
pmf.Set("bowl 2", .5)

pmf.Set("bowl 1", .75)
pmf.Set("bowl 2", .5)
Exemplo n.º 8
0
die = Pmf()
for x in range(1, 7):
    die.Set(x, 1 / 6.)

# solve the cookie problem
cookies = Pmf()
# set our prior distribution
cookies.Set('Bowl 1', 0.5)
cookies.Set('Bowl 2', 0.5)
# update the distribution based on evidence of a vanilla cookie
cookies.Mult('Bowl 1', 0.75)
cookies.Mult('Bowl 2', 0.5)
# renormalize
cookies.Normalize()
# posterior probability
print(cookies.Prob('Bowl 1'))


# more general tooling for the cookie problem:
class Cookie(Pmf):
    def __init__(self, hypos):
        Pmf.__init__(self)
        for hypo in hypos:
            self.Set(hypo, 1)
        self.Normalize()

    def Update(self, data):
        for hypo in self.Values():
            like = self.Likelihood(data, hypo)
            self.Mult(hypo, like)
        self.Normalize()
Exemplo n.º 9
0
'''
学习笔记:
贝叶斯
事情A发生的情况下,推测可能导致事件A发生的各条件的概率。

单次贝叶斯的计算逻辑:
   各条件下,事件A发生的概率,进行归一化后,则为A发生的情况下,各条件可能导致的概率。
'''

from thinkbayes import Pmf

pmf = Pmf()
#曲奇饼问题
#1.设置先验概率
pmf.Set('Bowl1', 0.5)
pmf.Set('Bowl2', 0.5)
print('***************')
print('Bowl1:' + str(pmf.Prob('Bowl1')))
print('Bowl2:' + str(pmf.Prob('Bowl2')))
#2.设置似然度
pmf.Mult('Bowl1', 0.75)  #香菜来自1碗的概率。碗1中香草曲奇饼的出现概率75%;选中1碗且是香草曲奇饼的概率0.375。
pmf.Mult('Bowl2', 0.5)  #香草饼干来自2碗的概率。碗2中香草曲奇饼的出现概率25%;选中2碗且是香草曲奇饼的概率0.25。
print('***************')
print('Bowl1:' + str(pmf.Prob('Bowl1')))
print('Bowl2:' + str(pmf.Prob('Bowl2')))
#3.初始化
pmf.Normalize()

print('***************')
print('Bowl1:' + str(pmf.Prob('Bowl1')))  #拿出来了一个香草曲奇饼,来自碗1的概率0.375/0.625
print('Bowl2:' + str(pmf.Prob('Bowl2')))
Exemplo n.º 10
0
from thinkbayes import Pmf
'''
pmf1 =Pmf()
for x in [1,2,3,4,5,6]:
	pmf1.Set(x, 1/6.0)

#print pmf1.Normalize()
#print pmf1.Prob(1)
'''
pmf2 = Pmf()
pmf2.Set('Bowl1', 0.5)
pmf2.Set('Bowl2', 0.5)

pmf2.Mult('Bowl1', 0.75)
pmf2.Mult('Bowl2', 0.5)

pmf2.Normalize()
print pmf2.Prob('Bowl1')
print pmf2.Prob('Bowl2')
Exemplo n.º 11
0
# _*_ coding: utf-8 _*_

from thinkbayes import Pmf

pmf = Pmf()
pmf.Set('Bow1', 0.5)  #碗1的概率
pmf.Set('Bow2', 0.5)  #碗2的概率
pmf.Mult('Bow1', 0.75)  #碗1香草曲奇概率
pmf.Mult('Bow2', 0.5)  #碗2香草曲奇概率
pmf.Normalize()  #归一化
t = pmf.Prob('Bow1')  #后验概率
print(t)