写作说明

上一期我们讲了贝叶斯分类器,其中有很多的概率基础知识和贝叶斯定理。但是讲解的很没有重点,前半部分讲的是贝叶斯基础知识,最后很突兀的插进来一个文本分析-贝叶斯分类器。很多童鞋看到很累。其实上一期和本期都想附上《贝叶斯思维:统计建模的Python学习法》书中的代码,但我看了下源码,发现代码太长了信息量太大,不是我一篇文章就能展示的明白的。

今天我就早起翻看这本书,根据书上的讲解和自己的理解,用Python实现的一个简单的贝叶斯的脚本。本文只是用来验证自己贝叶斯定理是否理解,是否能自己动手实现,本身这脚本并没有什么高大上的功能,如果有的话,唯一的功能就是能用来做贝叶斯数学题O(∩_∩)O哈哈~。

曲奇饼案例

假设有两碗曲奇饼,碗A包含30个香草曲奇饼和10个巧克力曲奇饼,碗B这两种曲奇饼各20个。 现在假设你在不看的情况下随机地挑一个碗拿一块饼,得到了一块香草曲奇饼。

问题:从碗A渠道香草曲奇饼的概率是多少

思路

这是一个条件概率问题,我们希望得到P(碗A|香草饼),

现在我们很容易知道P(香草饼|碗A)=3/4,

如果将两者联系起来,那么P(碗A|香草饼)就很容易算得。

但可惜P(碗A|香草饼)与P(香草饼|碗A)是不同的。

不过贝叶斯定理却可以通过一个概率得到另一个概率。

贝叶斯定理

联合概率可交换,即P(AandB)=P(BandA)

对于任意事件A、B都独立,因此联合概率P(AandB)=P(B)P(A|B)

两步骤执行交换,即P(BandA)=P(A)P(B|A)

因为步骤1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)

最后等式两端除以P(B),得到P(A|B)=P(A)P(B|A)/P(B)

这就是贝叶斯定理,推导过程比中学时要简单很多。先来计算下曲奇饼问题

本题数学的计算过程

P(碗A|香草饼)=P(碗A)*P(香草饼|碗A)/P(香草饼)

P(碗A)=1/2

P(香草饼|碗A)=3/4

P(香草饼)=50/(50+30)=5/8

所以最后经过计算

P(碗A|香草饼)=3/5=0.6

先验概率、后验概率、似然度、标准化常量

我觉得在python实现代码前最好大家能够记住先验概率、后验概率这些概念(如果能理解更好)。 对上述贝叶斯定理的理解,还有一种解释思路,叫做“历时诠释”。“历时”意味着某些事情随着时间而发生,即假设的概率随着看到新数据而发生变化。

在考虑H(Hypothsis)和D(Data)情况下,贝叶斯定理的表达式可以写成:

P(H|D)=P(H)P(D|H)/P(D)

在考虑H和D的情况下,每项意义如下:

P(H)称为先验概率,即在得到新数据前某一假设的概率。如没有得到掷硬币结果前,我们先假设正反面概率各位50%。

P(H|D)称为后验概率,即看到新数据后,我们要计算的该假设的概率。

P(D|H)是该假设下得到这一数据的概率,称为似然度。

P(D)是任何假设下得到这一数据的概率,称为标准化常量。

本题目Python的实现分析

了解了前面的铺垫,现在好办了。希望大家没有看晕,都能坚持到现在。

首先定义Bayes类,初始化创建一个dict类型的容器container。该容器是为了储存贝叶斯各项信息。key键存储假设,value值存储概率

Set方法是给容器添加先验假设及先验概率

Mult方法:根据key查找到先验概率,并更新概率。

Normalize方法:归一化(建议大家等会运行代码时候看下有无Normalize的区别,就能理解归一化这一含义)

Prob方法:返回某一事件的概率

好了,有了前面的铺垫,可以附上我的代码

classBayes(object):

def__init__(self):

self._container=dict()

defSet(self,hypothis,prob):

self._container[hypothis]=prob

defMult(self,hypothis,prob):

old_prob=self._container[hypothis]

self._container[hypothis]=old_prob*prob

defNormalize(self):

count=0

forhypothisinself._container.values():

count=count+hypothis

forhypothis,probinself._container.items():

self._container[hypothis]=self._container[hypothis]/count

defProb(self,hypothis):

Prob=self._container[hypothis]

returnProb

用python解下曲奇饼题

#实例化Bayes类

bayes=Bayes()

#先验概率

bayes.Set('Bow_A',0.5)#P(碗A)=1/2

bayes.Set('Bow_B',0.5)#P(碗B)=1/2

#后验概率

bayes.Mult('Bow_A',0.75)#P(香草饼|碗A)=3/4

bayes.Mult('Bow_B',0.5)#P(香草饼|碗B)=1/2

bayes.Normalize()

prob=bayes.Prob('Bow_A')#P(碗A|香草饼)

print('从碗A渠道香草曲奇饼的概率:{}'.format(prob))

运行结果

从碗A渠道香草曲奇饼的概率:0.6

更多内容

文本分析

数据分析

神奇的python

爬虫

python计算条件概率_用Python实现贝叶斯定理(附代码)相关推荐

  1. 用python计算圆周率_用python计算圆周率π

    原博文 2020-03-22 15:32 − 用python计算圆周率π 一.要求 1.要起义能计算到圆周率后面越多位越好. 2.用进度条显示计算的进度,能给出越多种进度条越好. 3.要求给出圆周率π ...

  2. python历史性分布计算代码_量化交易中,如何使用Python计算「筹码分布」指标【附代码】 [量化小讲堂-64]...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第  64 ...

  3. 量化交易中,如何使用Python计算「筹码分布」指标【附代码】 [量化小讲堂-64]

    这是邢不行第 64 期量化小讲堂的分享 作者 | 邢不行.助教林奇 本文内容也有视频版本,点击观看:量化交易中,筹码分布指标如何计算[邢不行] 记得小时候的某个暑假,一边吃西瓜,一边看港剧<大时 ...

  4. python计算圆周率_用python计算圆周率Π

    一.要求: 1.计算到圆周率后面越多位越好. 2.用进度条显示计算的进度. 3.要求给出圆周率Π的具体计算方法和解释. 二.算法: 1.拉马努金公式: 2.高斯-勒让德公式: 设置初始值: 反复执行以 ...

  5. python计算信息增益_利用Python提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...

    00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...

  6. 如何用python计算年龄_用Python写一个能算出自己年龄的小程序

    用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...

  7. python计算协方差_在Python中计算协方差

    要计算协方差,您需要类似下面这样的内容,它有一个嵌套循环,遍历每个列表,并使用协方差公式累积协方差.在# let's get the mean of `X` (add all the vals in ...

  8. python计算坡度_基于python实现利用DEM数据计算坡度、坡向

    1.Python的地形三维可视化--简介Matplotlib和gdal https://blog.csdn.net/allenlu2008/article/details/51880333 2.Pyc ...

  9. python计算三角函数_使用Python三角函数公式计算三角形的夹角案例

    使用Python三角函数公式计算三角形的夹角案例 题目内容: 对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:.编写程序,使得输入三角形的边a, b, c,可求得夹角C(角度值) ...

最新文章

  1. android 图片缓存
  2. 为什么在进程中还需要线程呢?
  3. 网易MCtalk Live:漫谈短视频平台概况,全面解读头部内容
  4. findfirstfile函数为什么不能遍历doc_编程之美:IO多路复用——记性不好的poll函数...
  5. Android中Service类onStartCommand
  6. java 数据库改操作_数据库的插入、修改、删除操作(java实现)
  7. 关系代数基本运算_关系代数的基本和附加运算
  8. jbod ugood 磁盘驱动状态_如何检查Mac磁盘空间,mac磁盘空间其他怎么清理
  9. android折叠listview,android – 如何在listview中展开和折叠项目
  10. Java的native方法-----你必须要知道的JAVA知识
  11. c mysql分页存储过程_mysql 分页存储过程调用报错
  12. 串口传输文件练习与点阵汉字的字模读取与显示
  13. 红外测距模块 51单片机_智能激光测距
  14. 传感器系列(一)——超声波测距传感器 HC—SR04模块
  15. 移动硬盘\U盘在使用过程中0x80070570 文件或目录损坏且无法读取 CHKDSK 修复方法
  16. UOS如何格式化U盘
  17. OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享
  18. 利用声网进行屏幕共享及关闭共享网络状态检测
  19. hiredis php,redis 连接池 hiredis
  20. 树莓派简单教程(二)(中)

热门文章

  1. Eclipse Server runtime设置里找不到apache tomcat的处理方法
  2. SAP云平台部署HTML5应用时的错误消息Failed to report quota consumption
  3. SAP UI5 Hash session 2016-07-18
  4. Marketing Cloud里使用了哪个版本的UI5 Odata模型?
  5. 使用代码创建具有organization unit的opportunity
  6. SAP UI5日期字段的显示逻辑和用法
  7. Opportunity的chance of success的赋值逻辑
  8. 合并报表编制采用的理论_合并财务报表的简易编制方法,真是太好用了!财务,会计一起看...
  9. 如何搭建SVN的服务器
  10. unity3d 700种 材质球_温度与耐磨钢球的关系