python 伯努利分布详解

 更新时间:2020年02月25日 14:30:19   作者:wx_411180165  
今天小编就为大家分享一篇python 伯努利分布详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

伯努利分布 是一种离散分布,有两种可能的结果。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

二项分布概率直方图:

图形特性:

当 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密码学简单替代密码解密及测试教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • np.meshgrid中的indexing参数问题解决

    np.meshgrid中的indexing参数问题解决

    本文主要介绍了np.meshgrid中的indexing参数问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python机器学习库之Scikit-learn基本用法详解

    Python机器学习库之Scikit-learn基本用法详解

    Scikit-learn 是 Python 中最著名的机器学习库之一,它提供了大量实用的机器学习算法以及相关的工具,可以方便我们进行数据挖掘和数据分析,在这篇文章中,我们将介绍 Scikit-learn 的基本使用,包括如何导入数据、预处理数据、选择和训练模型,以及评估模型的性能
    2023-07-07
  • Python如何实现强制数据类型转换

    Python如何实现强制数据类型转换

    这篇文章主要介绍了Python如何实现强制数据类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Python 中的短路评估

    详解Python 中的短路评估

    短路是指当表达式的真值已经确定时终止布尔运算,Python 解释器以从左到右的方式计算表达式,这篇文章主要介绍了Python 中的短路评估,需要的朋友可以参考下
    2023-06-06
  • python实现12306抢票及自动邮件发送提醒付款功能

    python实现12306抢票及自动邮件发送提醒付款功能

    本文给大家分享python实现12306抢票及自动邮件发送提醒付款功能,文章没有给大家贴出完整代码,只是技术交流,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-03-03
  • 通过OpenCV实现对指定颜色的物体追踪

    通过OpenCV实现对指定颜色的物体追踪

    这篇文章主要介绍的是通过OpenCV实现对特定颜色的物体追踪,文中实验用的是绿萝的树叶。本文的示例代码讲解详细,对学习OPenCV有一定的帮助,感兴趣的小伙伴可以了解一下
    2021-12-12
  • python的多线程原来可以这样解

    python的多线程原来可以这样解

    这篇文章主要为大家介绍了python的多线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Python实现文件内容批量追加的方法示例

    Python实现文件内容批量追加的方法示例

    这篇文章主要介绍了Python实现文件内容批量追加的方法,结合实例形式分析了Python文件的读写相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Python使用Selenium执行JavaScript代码的步骤详解

    Python使用Selenium执行JavaScript代码的步骤详解

    Selenium是一个用于自动化浏览器操作的工具,可以模拟人工操作,执行各种浏览器操作,而JavaScript是一种常用的脚本语言,本文将介绍如何在Python中使用Selenium执行JavaScript代码,并给出一些常见的应用示例
    2023-11-11

最新评论