zoukankan      html  css  js  c++  java
  • [Thinkbayes]贝叶斯思维读书笔记-2-火车头问题

        今天,我们继续我们的笔记。

        作者在第三章继续举了一个例子。火车头问题(读者在此可能会觉得这个问题没有意义,但相信随着深入阅读,这个问题会被解答)。

        这个举例恰到好处,能够让我深入理解到底应该如何假设,也能更好的诠释2.5章节中的封装框架。

        回顾一下曲奇饼问题中,我们的假设是什么?(不要忘记,我们的假设决定先验概率)

        假设A:香草味的饼来自筐1,先验概率1/2。

        假设B:香草味的饼来自筐2,先验概率1/2。

        再来看看火车头问题中我们的假设:

        假设1:公司有1个火车头,先验概率1/N。

        假设2:公司有2个火车头,先验概率1/N。

        ......

        假设60:公司有60个火车头,先验概率1/N。

        ......

        假设1000:公司有1000个火车头,先验概率1/N。

        ......

        理论上,我们应该继续我们的假设直到无线多个火车头。但是这并不利于我们进行计算。就目前来将,我们只能假设“从1到1000个等可能的任何值”。大家可以直接将每一个可能性(现在是1000个)看作是一个对应的“筐”。第500个可能性对应第“500号筐”,而这个框中有500个火车头,那么我们看到第60号火车头的概率(也就是似然度)就是1/500。

        接下来,我们进一步简化:我们看到的是2号火车头,我们假设“从1到3个等可能的任何值”。这样,我们的先验概率、似然度、后验概率就很好得出了:

           P(H)    P(D|H)    P(H)P(D|H)    P(H|D)

    A     1/3        0              0                 0

    B     1/3        1/2           1/6              3/5   

    C     1/3        1/3           1/9              2/5

        这样,想必大家能更容易理解,在火车头问题中如何应用贝叶斯定理。

        我们再回头看一下,作者为我们提供的贝叶斯框架,其主要为3个函数:

        __init__()

        Update()

        Likelihood()

        __init__() 函数直接决定了我们的假设方式及先验分布,我们看到在之前的例子中,作者一直没有重写该函数,原因正是因为我们的假设内容及先验分布的类型一直都没变过,一直是等可能的类型。

        Likelihood() 函数实际上帮我们取到某种假设的似然度,注意Likelihood就是英文中的似然度。

        Update() 方法调用到先验概率和似然度,然后执行 Pmf 的 Mult 方法。实际上就是 “更新基于该数据的每个假设”(原译者),更合适地应该说“基于某一个数据,更新或者说创建每个假设的后验概率”

        当然,火车头问题并没有就此结束。作者提到,当我们变更假设的值的范围时,我们会得到差异非常大的结果。这主要是因为我们的假设出了一小点问题,到不因为范围的上限,而是因为先验分布并不是等可能的,而应该基于某种模型。原书提供了一种,为罗伯特的幂率模型:PMF(x)∝ (1/x)的α次方。当然实际上我们进一步简化,另α = 1 。这样,在我们了Likelihood()方法及Update()方法后,我们就能够得到这个最终的类了。

        之后,作者又提到了多次验证的问题。

        我们这个就用其中一个例子说明就够了。当你完成假设及先验分布时。你可以做多次验证。这只影响到每种假设所相关的似然度。请注意,你的所有验证都是基于一种假设的。比如摇骰子问题中,你是先取到一个骰子,然后摇了6次,而不是取一次摇一次;同样地,在火车头问题中,一定是公司的火车头的数量确定了,你再看3次。

        为了方便理解多次验证问题和作者提供框架的实现方式。我们继续举一个原书中的例子:转硬币问题。

        可以看到,作者在原书中已经对问题进行了一次简化,将硬币正面朝上的概率假设为从0-100(%)的整数,并且均匀分部。

        也就是:

        假设1:正面朝上概率为 0%

        假设2:正面朝上概率为 1%

        ......

        假设51:正面朝上概率为 50%

        ......

        假设101:正面朝上概率为 100%

        为了方便运算,我们进一步假设,为45、50、55(%)的整数,并且均匀分部。

        也就是:

        假设1:正面朝上概率为 45%

        假设2:正面朝上概率为 50%

        假设3:正面朝上概率为 55%

        并且我们只验证两次,两次全朝上。根据贝叶斯定律,当我们确定了假设及先验分布时P(H)。我们可以得到对应的似然度:P(D|H)。

        也就是说,按照公式,我们应当先计算出P(D|H),再与对应先验概率相乘。但是我们看到作者实现的方式为:

        dataset = 'H' * 140 + 'T' * 110

        for data in dataset:

             suite.Update(data)

        也就是说是:(P(H1)*P(D1|H)*P(D2|H)*P(D3|H)....*P(DN|H))*P(DM|H)

        确实,这对结果也无影响。我可能比较纠结实现方式。

        这样,我们应该能更好的理解第四章中多次验证之后,后验概率的结果。

  • 相关阅读:
    【转】你刚才在淘宝上买了一件东西【技术普及贴】
    Hibernate使用自定义脚本替换注解或者xml文件中的自动生成表结构
    北京地铁和广州地铁之感想
    使用eclipse开发工具与hibernate开发者为开源一起做贡献
    hdu 1159 Common Subsequence(最长公共子序列LCS)
    题解报告:hdu 2059 龟兔赛跑
    循环顺序队列模拟病人看病程序
    题解报告:hdu 1060 Leftmost Digit
    ACM_求N^N的最高位数
    ACM_Encoding
  • 原文地址:https://www.cnblogs.com/danjawwi/p/6277760.html
Copyright © 2011-2022 走看看