python计算条件概率_用Python实现贝叶斯定理(附代码)
写作说明
上一期我们讲了贝叶斯分类器,其中有很多的概率基础知识和贝叶斯定理。但是讲解的很没有重点,前半部分讲的是贝叶斯基础知识,最后很突兀的插进来一个文本分析-贝叶斯分类器。很多童鞋看到很累。其实上一期和本期都想附上《贝叶斯思维:统计建模的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实现贝叶斯定理(附代码)相关推荐
- 用python计算圆周率_用python计算圆周率π
原博文 2020-03-22 15:32 − 用python计算圆周率π 一.要求 1.要起义能计算到圆周率后面越多位越好. 2.用进度条显示计算的进度,能给出越多种进度条越好. 3.要求给出圆周率π ...
- python历史性分布计算代码_量化交易中,如何使用Python计算「筹码分布」指标【附代码】 [量化小讲堂-64]...
引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总] 请点击此处 这是邢不行第 64 ...
- 量化交易中,如何使用Python计算「筹码分布」指标【附代码】 [量化小讲堂-64]
这是邢不行第 64 期量化小讲堂的分享 作者 | 邢不行.助教林奇 本文内容也有视频版本,点击观看:量化交易中,筹码分布指标如何计算[邢不行] 记得小时候的某个暑假,一边吃西瓜,一边看港剧<大时 ...
- python计算圆周率_用python计算圆周率Π
一.要求: 1.计算到圆周率后面越多位越好. 2.用进度条显示计算的进度. 3.要求给出圆周率Π的具体计算方法和解释. 二.算法: 1.拉马努金公式: 2.高斯-勒让德公式: 设置初始值: 反复执行以 ...
- python计算信息增益_利用Python提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...
00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...
- 如何用python计算年龄_用Python写一个能算出自己年龄的小程序
用Python写一个能算出自己年龄的小程序. 其实我连我今年多少岁都不知道,最近看到了python的datetime库里面有很多好用的方法,于是就写了这样一个程序作为练习,然后又写了这样一篇文章来梳理 ...
- python计算协方差_在Python中计算协方差
要计算协方差,您需要类似下面这样的内容,它有一个嵌套循环,遍历每个列表,并使用协方差公式累积协方差.在# let's get the mean of `X` (add all the vals in ...
- python计算坡度_基于python实现利用DEM数据计算坡度、坡向
1.Python的地形三维可视化--简介Matplotlib和gdal https://blog.csdn.net/allenlu2008/article/details/51880333 2.Pyc ...
- python计算三角函数_使用Python三角函数公式计算三角形的夹角案例
使用Python三角函数公式计算三角形的夹角案例 题目内容: 对于三角形,三边长分别为a, b, c,给定a和b之间的夹角C,则有:.编写程序,使得输入三角形的边a, b, c,可求得夹角C(角度值) ...
最新文章
- android 图片缓存
- 为什么在进程中还需要线程呢?
- 网易MCtalk Live:漫谈短视频平台概况,全面解读头部内容
- findfirstfile函数为什么不能遍历doc_编程之美:IO多路复用——记性不好的poll函数...
- Android中Service类onStartCommand
- java 数据库改操作_数据库的插入、修改、删除操作(java实现)
- 关系代数基本运算_关系代数的基本和附加运算
- jbod ugood 磁盘驱动状态_如何检查Mac磁盘空间,mac磁盘空间其他怎么清理
- android折叠listview,android – 如何在listview中展开和折叠项目
- Java的native方法-----你必须要知道的JAVA知识
- c mysql分页存储过程_mysql 分页存储过程调用报错
- 串口传输文件练习与点阵汉字的字模读取与显示
- 红外测距模块 51单片机_智能激光测距
- 传感器系列(一)——超声波测距传感器 HC—SR04模块
- 移动硬盘\U盘在使用过程中0x80070570 文件或目录损坏且无法读取 CHKDSK 修复方法
- UOS如何格式化U盘
- OGR几何要素处理(创建编辑点线面)——Python地理数据处理学习分享
- 利用声网进行屏幕共享及关闭共享网络状态检测
- hiredis php,redis 连接池 hiredis
- 树莓派简单教程(二)(中)
热门文章
- Eclipse Server runtime设置里找不到apache tomcat的处理方法
- SAP云平台部署HTML5应用时的错误消息Failed to report quota consumption
- SAP UI5 Hash session 2016-07-18
- Marketing Cloud里使用了哪个版本的UI5 Odata模型?
- 使用代码创建具有organization unit的opportunity
- SAP UI5日期字段的显示逻辑和用法
- Opportunity的chance of success的赋值逻辑
- 合并报表编制采用的理论_合并财务报表的简易编制方法,真是太好用了!财务,会计一起看...
- 如何搭建SVN的服务器
- unity3d 700种 材质球_温度与耐磨钢球的关系