python 伯努利分布详解


Posted in Python onFebruary 25, 2020

伯努利分布 是一种离散分布,有两种可能的结果。1表示成功,出现的概率为p(其中0<p<1)。0表示失败,出现的概率为q=1-p。这种分布在人工智能里很有用,比如你问机器今天某飞机是否起飞了,它的回复就是Yes或No,非常明确,这个分布在分类算法里使用比较多,因此在这里先学习 一下。

概率分布有两种类型:离散(discrete)概率分布和连续(continuous)概率分布。

离散概率分布也称为概率质量函数(probability mass function)。离散概率分布的例子有伯努利分布(Bernoulli distribution)、二项分布(binomial distribution)、泊松分布(Poisson distribution)和几何分布(geometric distribution)等。

连续概率分布也称为概率密度函数(probability density function),它们是具有连续取值(例如一条实线上的值)的函数。正态分布(normal distribution)、指数分布(exponential distribution)和β分布(beta distribution)等都属于连续概率分布。

from scipy.stats import binom #导入伯努利分布
import matplotlib.pyplot as plt
import numpy as np
#次数
n = 10
#概率
p = 0.3
#导入特征系数
k = np.arange(0, 21)
#伯努利分布的特征值导入
binomial = binom.pmf(k, n, p)
plt.plot(k, binomial, 'o-')
plt.title('Binomial: n = %i, p=%0.2f' % (n, p), fontsize=15)
plt.xlabel('Number of successes')
plt.ylabel('Probability of sucesses', fontsize=15)
plt.savefig(r'C:\Users\Administrator\Desktop\106\data\textdata\12.png')
plt.show()

二项分布:离散型概率分布,n 重伯努利分布

如果随机变量序列 Xn(n=1, 2, …) 中的随机变量均服从与参数为 p 的伯努利分布,那么随机变量序列 Xn 就形成了参数为 p 的 n 重伯努利试验。例如,假定重复抛掷一枚均匀硬币 n 次,如果在第 i 次抛掷中出现正面,令 Xi=1;如果出现反面,则令 Xi=0。那么,随机变量 Xn(n=1, 2, …) 就形成了参数为 1/2 的 n 重伯努利试验。

可见,n 重伯努利试验需满足下列条件:

每次试验只有两种结果,即 X=1,或 X=0

各次试验中的事件互相独立,且 X=1 和 X=0 的概率分别为 p(0<p<1) 和 q=1-p

n 重伯努利试验的结果就是 n 重伯努利分布,即二项分布。反之,当 Xn(n=1) 时,二项分布的结果服从于伯努利分布。因为二项分布实际上是进行了 n 次的伯努利分布,所以二项分布的离散型随机变量期望为 E(x)=np,方差为 D(x)=np(1-p) 。

需要注意的是,满足二项分布的样本空间有一个非常重要的性质,假设进行 n 次独立试验,满足二项分布(每次试验成功的概率为 p,失败的概率为 1−p),那么成功的次数 X 就是一个参数为 n 和 p 的二项随机变量,即满足下述公式:

P(X=k) = C(n, k) * p^k * (1-p)^(n-k)

X=k,试验 n 次,成功的次数恰好有 k 次的随机变量(事件)

C(n, k),表示从集合 n 中取出 k 个元素的组合数,结果为 n!/(k!*(n-k)!)

例如,小明参加雅思考试,每次考试的通过率 1/3,不通过率为 q=2/3。如果小明连续参加考试 4 次,那么恰好有两次通过的概率是多少?

解析:因为每次考试只有两种结果,通过或不通过,符合条件 (1);每次考试结果互相独立,且概率不变,符合条件 (2)。满足二项分布样本,代入公式求解得概率为:C(4, 2)*(1/2)^2*(2/3)^(4-2) ≈ 8/27

二项分布概率直方图:

python 伯努利分布详解

图形特性:

当 p=q 时,图形是对称的

当 p≠q 时,图形呈偏态,p<q 与 p>q 的偏斜方向相反

当 (n+1)p 不为整数时,二项概率 P(X=k) 在 k=(n+1)*p 时达到最大值

当 (n+1)p 为整数时,二项概率 P(X=k) 在 k=(n+1)*p 和 k=(n+1)*p-1 时达到最大值

NOTE:当 n 很大时,即使 p≠q,二项分布概率直方图的偏态也会逐渐降低,最终成为正态分布。也就是说,二项分布的极限情形即为正态分布,故当 n 很大时,二项分布的概率可用正态分布的概率作为近似值。那么 n 需要多大才可谓之大呢?

一般规定,当 p<q 且 np≥5,或 p>q 且 nq≥5 时,这时的 n 就足够大了,可以用正态分布的概率作为近似值。则正态分布参数 μ=np,σ^2=np(1-p) 。

二项分布:

from scipy.stats import binom 
import matplotlib.pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
n = 100
p = 0.5
#平均值, 方差, 偏度, 峰度
mean,var,skew,kurt=binom.stats(n,p,moments='mvsk')
print(mean,var,skew,kurt)
#ppf:累积分布函数的反函数。q=0.01时,ppf就是p(X<x)=0.01时的x值。
x=np.arange(binom.ppf(0.01,n,p),binom.ppf(0.99,n,p))
ax.plot(x,binom.pmf(x,n,p),'o')
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(u'二项分布概率质量函数')
plt.savefig(r'C:\Users\Administrator\Desktop\106\data\textdata\1.png')
plt.show()

补充拓展:python--scipy--1离散概率分布:伯努利分布

#导入包
#数组包
import numpy as np
#绘图包
import matplotlib.pyplot as plt
#统计计算包的统计模块
from scipy import stats
'''
arange用于生成一个等差数组,arange([start, ]stop, [step, ]
使用见文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html
'''

'''
第1步,定义随机变量:1次抛硬币
成功指正面朝上记录为1,失败指反面朝上记录为0
'''
X = np.arange(0, 2,1)
X

array([0, 1])

'''
伯努利分布官方使用文档:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.bernoulli.html#scipy.stats.bernoulli
'''
#第2步,#求对应分布的概率:概率质量函数 (PMF)
#它返回一个列表,列表中每个元素表示随机变量中对应值的概率
p = 0.5 # 硬币朝上的概率
pList = stats.bernoulli.pmf(X, p)
pList

array([0.5, 0.5])

#第3步,绘图
'''
plot默认绘制折线,这里我们只绘制点,所以传入下面的参数:
marker:点的形状,值o表示点为圆圈标记(circle marker)
linestyle:线条的形状,值None表示不显示连接各个点的折线
'''
plt.plot(X, pList, marker='o',linestyle='None')
'''
vlines用于绘制竖直线(vertical lines),
参数说明:vline(x坐标值, y坐标最小值, y坐标值最大值)
我们传入的X是一个数组,是给数组中的每个x坐标值绘制竖直线,
竖直线y坐标最小值是0,y坐标值最大值是对应pList中的值
官网文档:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
'''
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.vlines(X, 0, pList)
#x轴文本
plt.xlabel('随机变量:抛硬币1次')
#y轴文本
plt.ylabel('概率')
#标题
plt.title('伯努利分布:p=%.2f' % p)
#显示图形
plt.show()

python 伯努利分布详解

以上这篇python 伯努利分布详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用打码兔和超人打码自封装的打码类分享
Mar 16 Python
更改Python命令行交互提示符的方法
Jan 14 Python
Python实现二分查找算法实例
May 26 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
详解python中的装饰器
Jul 10 Python
python中的decimal类型转换实例详解
Jun 26 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
Python定义函数实现累计求和操作
May 03 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Keras 使用 Lambda层详解
Jun 10 Python
python中%格式表达式实例用法
Jun 18 Python
Python3如何在Windows和Linux上打包
Feb 25 #Python
python实现可下载音乐的音乐播放器
Feb 25 #Python
Python实现分数序列求和
Feb 25 #Python
python等差数列求和公式前 100 项的和实例
Feb 25 #Python
Django单元测试中Fixtures用法详解
Feb 25 #Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 #Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 #Python
You might like
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
来自qq的javascript面试题
2010/07/24 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python简单操作excle的方法
2018/09/12 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
python 字典访问的三种方法小结
2019/12/05 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
房地产开发计划书
2014/01/10 职场文书
网吧消防安全责任书
2014/07/29 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server
CentOS MySql8 远程连接实战
2022/04/19 MySQL
Go语言怎么使用变长参数函数
2022/07/15 Golang