《贝叶斯思维:统计建模的Python学习法》--第3章Estimation(估计)介绍

浏览: 2050

第1、2章主要讲似然函数怎么编写,先验概率使用均匀分布,但实际问题往往更复杂,先验概率可能也很复杂, 这章主要用火车头的示例说了先验概率怎么使用幂律分布预估,并且讲到点估计和区间估计。

具体还是看示例:

示例1:骰子问题,

骰子问题主要用来总结了第1、2章说的通用方法论:

示例的具体表述:有多个面的骰子,随机拿了一个,扔了多次,最可能的骰子是哪一个。

这个示例和先前的几个示例解题方法基本一样,先验概率使用均匀分布,主要讨论似然度怎么计算,也就是似然函数怎么编写。

通用的一般的方法是:

1.选择假设的表示方法

2.选择数据的表示方法

3.编写似然函数

class Dice(Suite):
    def Likelihood(self, data, hypo):
        if hypo < data:
            return 0
        else:
            return 1.0/hypo

使用即可

for roll in [6, 8, 7, 7, 5, 4]:
    suite.Update(roll)

示例2:火车头问题

这个示例的不同点是似然度和示例1一样,但是先验概率就不能使用均匀分布了,

按以往情况可以使用幂律(Posterior distribution based on a power law prior, compared to a uniform prior)


class Train(Dice):
    def __init__(self, hypos, alpha=1.0):
        Pmf.__init__(self)
        for hypo in hypos:
            self.Set(hypo, hypo**(-alpha))
        self.Normalize()

2种分布的结果


最后的结果也比较收敛:

置信区间:

由于火车头的上限是不固定的,示例2开始的时候使用了1000的上限假设,实际上需要提供置信区间才能更好的描述问题:

提供了一个新的功能 Cumulative distribution functions(累计分布函数)来解决这个问题:

cdf = suite.MakeCdf()
interval = cdf.Percentile(5), cdf.Percentile(95)
print(interval)
推荐 1
本文由 seng 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册