《贝叶斯思维:统计建模的Python学习法》一第2章 统计计算2.1 分布

第2章 统计计算

贝叶斯思维:统计建模的Python学习法

2.1 分布

在统计上,分布是一组值及其对应的概率。

例如,如果滚动一个六面骰子,可能的值是数字1至6,与每个值关联的概率是1/6。

再举一个例子,你应该有兴趣了解在日常的英语使用中每个单词出现的次数。你可以建立一个包含每个字及它出现的次数的分布。

为了表示Python中的分布,可以使用一个字典映射某个值和它的概率。我编写了一个名为Pmf的类,利用Python字典实现了上述功能,而且提供了一些有用的方法。为了对应概率质量函数这种分布的数学表示法,我将其命名为Pmf。

Pmf的定义在一个我为本书完成的Python模块thinkbayes.py中。可以从http://thinkbayes.com/thinkbayes.py下载。欲了解更多信息参见前言的“代码指南”。

要使用Pmf,可如下导入:

from thinkbayes.py  import  Pmf

下面的代码建立一个Pmf来表示六面骰子的结果分布:

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

Pmf创建一个空的没有赋值的pmf。Set方法设置每个值的概率为1/6。

这里是另一个例子,计算每个单词在一个词序列中出现的次数:

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

Incr为每个单词的相应“概率”加1。如果一个词还没有出现在Pmf中,那么就将这个词添加进去。

我把“概率”加上引号是因为在这个例子中概率还没有归一化,也就是说它们的累加和不是1,因此不是真正的概率。但在本例中单词计数与概率成正比。所以当完成了所有的计数,就可以通过除以计数的总值来计算得到概率。

Pmf提供了一种Normalize方法来实现上述功能:

pmf.Normalize()

一旦有一个Pmf对象,你可以像下面这样得到任何一个值相关联的概率:

print pmf.Prob('the')

这会打印输出单词“the”在词序列中出现的频率。

Pmf使用Python字典来存储值及其概率,所以Pmf中的值可以是任意可被哈希的类型。概率可以是任意数值类型,但通常是浮点数(float类型)。

时间: 2024-08-31 12:28:08

《贝叶斯思维:统计建模的Python学习法》一第2章 统计计算2.1 分布的相关文章

《贝叶斯思维:统计建模的Python学习法》——第2章 统计计算 2.1 分布

第2章 统计计算 贝叶斯思维:统计建模的Python学习法 2.1 分布 在统计上,分布是一组值及其对应的概率. 例如,如果滚动一个六面骰子,可能的值是数字1至6,与每个值关联的概率是1/6. 再举一个例子,你应该有兴趣了解在日常的英语使用中每个单词出现的次数.你可以建立一个包含每个字及它出现的次数的分布. 为了表示Python中的分布,可以使用一个字典映射某个值和它的概率.我编写了一个名为Pmf的类,利用Python字典实现了上述功能,而且提供了一些有用的方法.为了对应概率质量函数这种分布的数

《贝叶斯思维:统计建模的Python学习法》——第1章 贝叶斯定理 1.1 条件概率

第1章 贝叶斯定理 贝叶斯思维:统计建模的Python学习法 1.1 条件概率 所有贝叶斯统计的方法都基于贝叶斯定理,如果有条件概率的学习基础,意识到这一点很自然.因此我们会从概率.条件概率开始,然后到贝叶斯定理,最后讨论贝叶斯统计的内容. 概率表示为0和1之间的数字(包括0和1),含义是某一事件或者预测行为的可信程度,1值表示"事件为真"的情形肯定发生,或表述为预测成真:而0值则表示"事件为真"这一情形为假. 其他中间值表示确定性的程度.例如,0.5通常也会写成5

《贝叶斯思维:统计建模的Python学习法》——导读

前言 贝叶斯思维:统计建模的Python学习法 学习之道 这本书以及Think系列其他书籍的一个前提是:只要懂得编程,你就能用这个技能去学习其他的内容 . 绝大多数贝叶斯统计的书使用数学符号并以数学概念的形式表示数学思想,比如微积分.但本书使用了Python代码而不是数学,离散近似而不是连续数学.结果就是原本需要积分的地方变成了求和,概率分布的大多数操作变成了简单的循环. 我认为这样的表述是易于理解的,至少对于有编程经验的人们来说是这样的.当作建模选择时也非常实用,因为我们可以选取最合适的模型而

《贝叶斯思维:统计建模的Python学习法》一第1章 贝叶斯定理1.1 条件概率

第1章 贝叶斯定理 贝叶斯思维:统计建模的Python学习法 1.1 条件概率 所有贝叶斯统计的方法都基于贝叶斯定理,如果有条件概率的学习基础,意识到这一点很自然.因此我们会从概率.条件概率开始,然后到贝叶斯定理,最后讨论贝叶斯统计的内容. 概率表示为0和1之间的数字(包括0和1),含义是某一事件或者预测行为的可信程度,1值表示"事件为真"的情形肯定发生,或表述为预测成真:而0值则表示"事件为真"这一情形为假. 其他中间值表示确定性的程度.例如,0.5通常也会写成5

《贝叶斯思维:统计建模的Python学习法》——2.3 贝叶斯框架

2.3 贝叶斯框架 在继续讨论其他的问题前,我想在上一节的基础上重写代码以使其更通用.首先我将定义一个类来封装与此相关的代码 : class Cookie(Pmf): def __init__(self,hypos): Pmf.__init__(self) for hypo in hypos: self.Set(hypo,1) self.Normalize()``` Cookie对象是一个映射假设到概率的Pmf对象.__init__方法给每个假设赋予相同的先验概率.如上一节中就有两种假设: hy

《贝叶斯思维:统计建模的Python学习法》一2.8 练习

2.8 练习 练习2-1. 在第11页的"贝叶斯框架"里面,我提到了曲奇饼问题的解法是简化的,是曲奇饼有补充的取多个饼的情况(有放回的情况). 但更可能的情况是,我们吃掉了取出的曲奇饼,那么似然度就依赖于之前的取曲奇饼行为(曲奇饼少了). 修改本章中的解法以处理没有曲奇饼补充的情况.提示:添加Cookie的实例变量来表示碗的假设状态,并据此修改似然度.你可能要定义一个Bowl对象.

《贝叶斯思维:统计建模的Python学习法》——1.4 贝叶斯定理

1.4 贝叶斯定理 现在,我们准备好进行贝叶斯定理推导需要的所有条件了.首先,我们注意到,联合概率是乘积可交换(乘法交换律)的,即: p(A and B) = p(B and A) 对于任何A,B表示的事件都成立. 然后,我们写出一个联合概率的表达式: p(A and B) = p(A)p(B|A) 由于我们并没有明确定义A和B的含义,因而可以对A.B进行互换操作. 交换它们的位置: p(B and A) = p(B)p(A|B) 把这些表达式连接起来,我们得到下面的表达式: p(B)p(A|B

《贝叶斯思维:统计建模的Python学习法》一2.4 Monty Hall难题

2.4 Monty Hall难题 为了解决蒙蒂大厅(Monty Hall)问题,我将定义一个新的类: class monty(Pmf): def __init__(self,hypos): Pmf.__init__(self) for hypo in hypos: self.Set(hypo,1) self.Normalize() 到目前为止,蒙蒂大厅和曲奇饼是完全一样的.创建Pmf的代码也一样,除了假设的名称: hypos='ABC' pmf =Monty(hypos) 对Update的调用几

《贝叶斯思维:统计建模的Python学习法》——1.5 历时诠释

1.5 历时诠释 还有另外一种理解贝叶斯定理的思路:它给我们提供的是一种根据数据集D的内容变化更新假设概率H的方法. 这种对贝叶斯定理的理解被称为"历时诠释". "历时"意味着某些事情随着时间而发生:在本例,即是假设的概率随着看到的新数据而变化. 在考虑H和D的情况下,贝叶斯定理的表达式可以改写成: 在这种解释里,每项意义如下: p(H)称为先验概率,即在得到新数据前某一假设的概率.p(H |D)称为后验概率,即在看到新数据后,我们要计算的该假设的概率.p(D|H)