Python Counter类
Python中的Counter类是collections模块的一部分。计数器提供了一种快速的方法来计算列表中存在的唯一项的数量。Counter类也可以扩展为表示概率质量函数和贝叶斯假设组。计数器是从值到其频率的映射。如果使用字符串初始化计数器,则会得到每个字母到它出现的次数的映射。如果两个单词是字谜,它们会产生相等的计数器,因此您可以使用Counters在线性时间内测试字谜。
多集
计数器是多集的自然表示,多集是元素可以多次出现的集合。您可以使用is_subset之类的集合操作来扩展Counter:您可以is_subset在Scrabble之类的游戏中使用它来查看给定的一组图块是否可用于拼写给定的单词。
概率质量函数
您还可以扩展“计数器”以表示概率质量函数(PMF)。normalize计算频率的总和并进行除法,得到加到1的概率。__add__枚举所有值对,并返回代表和分布的新Pmf。__hash__并且__id__使保偏光纤哈希的; 这不是最好的方法,因为它们是可变的。因此,此实现带有警告,如果您使用Pmf作为密钥,则不应对其进行修改。更好的选择是定义一个冻结的Pmf。render以准备绘制的形式返回值和概率:
使用Pmf对象
例如,我们可以制作一个表示6面模具的Pmf对象。
添加运算符
使用加法运算符,我们可以计算两个骰子之和的分布。
计算分布
使用numpy.sum,我们可以计算三个骰子的和的分布。然后绘制结果(使用Pmf.render)
贝叶斯统计
套件是表示一组假设及其概率的Pmf;它提供bayesian_update,可以根据新数据更新假设的概率。Suite是一个抽象的父类。子类应提供一种可能性方法,用于评估给定假设下数据的可能性。bayesian_update遍历假设,评估每个假设下数据的可能性,并相应地更新概率。然后,它重新规范化PMF。
套件示例
例如,我将使用Suite解决Think Bayes第3章中的“骰子问题” :
“假设我有一盒骰子,其中包含4面骰子,6面骰子,8面骰子,12面骰子和20面骰子。如果您曾经玩过《龙与地下城》,您就会知道我在说什么。假设我从盒子中随机选择一个骰子,将其掷骰并得到6。我掷每个骰子的概率是多少?”
我将首先列出代表骰子的Pmfs:
骰子套件
接下来,我将定义DiceSuite,该继承bayesian_update自Suite并提供likelihood。data是观察到的模头辊,本例中为6。hypo是我可能已经猜到的假想死亡;为了获得数据的可能性,我从给定的模具中选择给定值的概率。
更新发行版
最后,我使用骰子列表实例化从每个骰子映射到其先验概率的Suite。默认情况下,所有骰子的优先级相同。然后,我使用给定值更新分布并打印结果:
另一个更新
如预期的那样,消除了4面模具。现在它的概率为0。6面模具最有可能,但8面模具仍然很有可能。现在,假设我再次掷骰子并得到8。我们可以使用新数据再次更新套件。现在6面模具已被淘汰,8面模具很有可能,而我滚动20面模具的机会不到10%。这些示例说明了Counter类的多功能性,Counter类是Python使用不足的数据结构之一。
填写下面表单即可预约申请免费试听!怕钱不够?可先就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可推荐就业!
©2007-2022/ www.aaa-cg.com.cn 北京漫动者数字科技有限公司 备案号: 京ICP备12034770号 监督电话:010-53672995 邮箱:bjaaa@aaaedu.cc