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 相关文章推荐
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
Python中dictionary items()系列函数的用法实例
Aug 21 Python
Python 装饰器使用详解
Jul 29 Python
flask入门之文件上传与邮件发送示例
Jul 18 Python
python实现石头剪刀布程序
Jan 20 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
python异常处理之try finally不报错的原因
May 18 Python
Python如何实现爬取B站视频
May 20 Python
matplotlib 画双轴子图无法显示x轴的解决方法
Jul 27 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/21 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
PHP使用PDO调用mssql存储过程的方法示例
2017/10/07 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
详解阿里云视频直播PHP-SDK接入教程
2020/07/09 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
教你JS中的运算符乘方、开方及变量格式转换
2016/08/09 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[03:08]Ti4观战指南上
2014/07/07 DOTA
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
python cv2截取不规则区域图片实例
2019/12/21 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
机电一体化专业推荐信
2013/12/03 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
安全标准化汇报材料
2014/02/03 职场文书
先进员工获奖感言
2014/08/14 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers