python实现常见一元随机变量的概率分布

一. 随机变量

随机变量是一个从样本空间 Ω \Omega Ω到实数空间 R R R的函数,比如随机变量 X X X可以表示投骰子的点数。随机变量一般可以分为两类:

  • 离散型随机变量:随机变量的取值为有限个。
  • 连续型随机变量:随机变量的取值是连续的,有无限多个。

scipy.stat模块中包含了多种概率分布的随机变量,包含离散型随机变量和连续型随机变量。离散型随机变量的常见接口如下:

方法名功能
rvs生成该分布的随机序列
pmf概率质量函数
cdf累计概率分布函数
stats计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]

连续型随机变量的常见接口如下:

方法名功能
rvs生成该分布的随机序列
pdf概率密度函数
cdf累计概率分布函数
stats计算该分布的均值,方差,偏度,峰度。[Mean(‘m’), variance(‘v’), skew(‘s’), kurtosis(‘k’)]
二. 常见离散分布
1. 二项分布

如果随机变量 X X X的分布律为 P ( X = k ) = C n k p k q n − k , k = 0 , 1 , . . . n , P(X=k) = C^k_np^kq^{n-k},k = 0,1,...n, P(X=k)=Cnkpkqnkk=0,1,...n其中 p + q = 1 p + q = 1 p+q=1 ,则称 X X X服从参数为 n , p n,p n,p的二项分布,记为 X ∼ B ( n , p ) X \sim B(n,p) XB(n,p)

  • 期望: E ( X ) = n p E(X) = np E(X)=np
  • 方差: D ( X ) = n p ( 1 − p ) D(X) = np(1 - p) D(X)=np(1p)
  1. 画出不同参数下的二项分布, n , p n, p n,p分别为 ( 10 , 0.3 ) , ( 10 , 0.5 ) , ( 10 , 0.7 ) (10,0.3),(10,0.5),(10,0.7) (100.3),100.5,100.7

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [(10, 0.3), (10, 0.5), (10, 0.7)]for i in range(len(params)):n = params[i][0]p = params[i][1]x = np.arange(0, n + 1)y = binom(n, p).pmf(x)# 计算随机变量的期望,方差mean, var = binom.stats(n, p, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('n = {}, p = {}'.format(n, p))ax[i].set_xticks(x)ax[i].text(1, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数二项分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import binom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [(10, 0.3), (10, 0.5), (10, 0.7)]for i in range(len(params)):n = params[i][0]p = params[i][1]x = np.arange(0, 11)# 抽样10万次sample = binom.rvs(n = n, p = p, size = 100000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('n = {}, p = {}'.format(n, p))ax[i].set_xticks(x)ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

2. 几何分布

若随机变量 X X X的分布律为 P ( X = k ) = ( 1 − p ) k − 1 p , k = 1 , 2 , . . . , P(X = k) = (1 - p)^{k - 1}p,k = 1, 2, ..., P(X=k)=(1p)k1pk=1,2,...其中 0 < p < 1 0 < p < 1 0<p<1,则称 X X X服从参数为 p p p的几何分布,记为 X ∼ G e ( p ) X \sim Ge(p) XGe(p)

  • 期望: E ( X ) = 1 p E(X) = \frac{1}{p} E(X)=p1
  • 方差: D ( X ) = 1 − p p 2 D(X) = \frac{1 - p}{p^2} D(X)=p21p
  1. 画出不同参数下的几何分布, p p p分别为 ( 0.3 , 0.5 , 0.7 ) (0.3,0.5,0.7) (0.30.50.7)

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [0.3,0.5,0.7]for i in range(len(params)):p = params[i]x = np.arange(1, 15)y = geom(p = p).pmf(x)print(y)# 计算随机变量的期望,方差mean, var = geom.stats(p = p, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('p = {}'.format(p))ax[i].set_xticks(x)ax[i].text(5, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数几何分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import geom
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [0.3, 0.5, 0.7]for i in range(len(params)):p = params[i]x = np.arange(0, 15)# 抽样sample = geom.rvs(p = p, size = 100000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('p = {}'.format(p))ax[i].set_xlim(0,15)ax[i].set_xticks(x)ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

3. 泊松分布

若随机变量 X X X的分布律为 P ( X = k ) = λ k k ! e − λ , k = 0 , 1 , 2... , P(X=k) = \frac{\lambda^k}{k!}e^{-\lambda},k = 0, 1, 2 ..., P(X=k)=k!λkeλk=0,1,2...其中 λ > 0 , \lambda > 0, λ>0则称 X X X服从参数为 λ \lambda λ的泊松分布,记为 X ∼ P ( λ ) X \sim P(\lambda) XP(λ)

  • 期望: E ( X ) = λ E(X) = \lambda E(X)=λ
  • 方差: D ( X ) = λ D(X) = \lambda D(X)=λ
  1. 画出不同参数下的泊松分布, λ \lambda λ分别为 ( 2 , 6 , 8 ) (2,6,8) (2,6,8)

    import numpy as np
    from scipy.stats import poisson
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [2,6,8]for i in range(len(params)):numda = params[i]x = np.arange(1, 15)y = poisson(numda).pmf(x)# 计算随机变量的期望,方差mean, var = poisson.stats(numda, moments='mv')ax[i].scatter(x, y, color = 'blue', marker = 'o')ax[i].set_title('lambda = {}'.format(numda))ax[i].set_xticks(x)ax[i].set_yticks([0, 0.1, 0.2, 0.3, 0.4])ax[i].text(5, 0.2, '期望: {:.2f}\n方差: {:.2f}'.format(mean, var))ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

  2. 生成服从不同参数泊松分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import poisson
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 10))# 调整子图间距fig.subplots_adjust(hspace = 0.5)params = [2, 6, 8]for i in range(len(params)):numda = params[i]x = np.arange(0, 16)# 抽样sample = poisson.rvs(numda, size = 1000000)print(sample)ax[i].hist(sample, color = 'blue', density=True, bins = 50)ax[i].set_title('lamdba = {}'.format(numda))ax[i].set_xticks(x)ax[i].set_xlim(0, 16)ax[i].grid()plt.show()
    

    运行结果:
    在这里插入图片描述

三. 常见连续分布
1. 正太分布

若随机变量 X X X的概率密度函数为 f ( x ) = 1 2 π δ e − ( x − μ ) 2 2 δ 2 , ( − ∞ < x < + ∞ ) f(x) = \frac{1}{\sqrt{2\pi}\delta}e^{- \frac{(x - \mu)^2}{2\delta^2}},( -\infty< x < +\infty) f(x)=2π δ1e2δ2(xμ)2(<x<+),则称 X X X服从参数为 ( μ , δ 2 ) (\mu,\delta^2) (μδ2)的正太分布,记为 X ∼ N ( μ , δ 2 ) X \sim N(\mu,\delta^2) XN(μδ2)。当 μ = 0 , δ = 1 \mu =0,\delta = 1 μ=0δ=1时称 X X X服从标准正太分布。

  • 期望: E ( X ) = μ E(X) = \mu E(X)=μ
  • 方差: D ( X ) = δ 2 D(X) = \delta^2 D(X)=δ2
  1. 画出不同参数下的正太分布, μ , δ \mu,\delta μδ分别为 ( 0 , 1 ) , ( 0 , 3 ) (0, 1), (0, 3) (0,1),(0,3)

    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(figsize=(10, 8))params = [(0, 1, 'red'), (0, 3, 'blue')]x = np.linspace(-20, 20, 1000)for i in range(0, len(params)):loc = params[i][0]scale = params[i][1]color = params[i][2]mean, var = norm.stats(loc, scale, moments='mv')ax.plot(x, norm(loc = loc, scale = scale).pdf(x), color = color, label = 'loc={},scale={},均值={},方差={}'.format(loc, scale,mean,var))ax.set_xticks(np.arange(-20, 21))ax.grid()ax.legend()plt.show()
    
  2. 生成服从不同参数正太分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    from scipy.stats import norm
    import matplotlib.pyplot as pltplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(2, 1, figsize=(10, 8))params = [(0, 1, 'red'), (0, 3, 'blue')]x = np.linspace(-20, 20, 1000)# 采样for i in range(0, len(params)):loc = params[i][0]scale = params[i][1]color = params[i][2]# 画出分布图ax[i].plot(x, norm(loc = loc, scale = scale).pdf(x), color = color, label = 'loc={},scale={}'.format(loc, scale))# 画出随机抽样的频率分布直方图ax[i].hist(norm(loc = loc, scale = scale).rvs(size = 100000), density=True, bins = 100)ax[i].set_xticks(np.arange(-20, 21))ax[i].grid()ax[i].legend()plt.show()
    
2. 指数分布

若随机变量 X X X的概率密度函数为 f ( x ) = { λ e − λ x x ≥ 0 0 x < 0 ( λ > 0 ) f(x) = \begin{cases} {\lambda}e^{-{\lambda}x} & x \ge 0\\0 & x < 0\end{cases} (\lambda > 0) f(x)={λeλx0x0x<0(λ>0),则称 X X X服从参数为 λ \lambda λ的指数分布,记为 X ∼ E ( λ ) X \sim E(\lambda) XE(λ)

  • 期望: E ( X ) = 1 λ E(X) = \frac{1}{\lambda} E(X)=λ1
  • 方差: D ( X ) = 1 λ 2 D(X) = \frac{1}{{\lambda}^2} D(X)=λ21

scipy中指数分布expon的参数传入 λ \lambda λ的倒数。

A common parameterization for expon is in terms of the rate parameter lambda, such that pdf = lambda * exp(-lambda * x). This parameterization corresponds to using scale = 1 / lambda.

  1. 画出不同参数下的指数分布, λ \lambda λ分别为 ( 0.5 , 1 , 1.5 ) (0.5,1,1.5) (0.5,1,1.5)

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import exponplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(figsize = (10, 8))params = [(0.5, 'red'), (1, 'blue'), (1.5, 'green')]x = np.linspace(0, 15, 1000)for i in range(0, len(params)):numda = params[i][0]color = params[i][1]mean, var = expon.stats(loc = 0, scale = 1 / numda, moments='mv')ax.plot(x, expon(scale = 1 / numda).pdf(x), color = color, label = 'lambda = {:.2f}, 均值:{:.2f}, 方差: {:.4f}'.format(numda, mean, var))ax.grid()ax.legend()plt.show()
    
  2. 生成服从不同参数指数分布的随机数组(采样100000次),然后查看数组的频率分布

    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.stats import exponplt.rcParams["font.family"] = "SimHei"  # 设置字体
    plt.rcParams["axes.unicode_minus"] = False  # 正常显示负号if __name__ == '__main__':fig, ax = plt.subplots(3, 1, figsize = (10, 8))params = [(0.5, 'red'), (1, 'blue'), (1.5, 'green')]x = np.linspace(0, 15, 1000)# 采样for i in range(0, len(params)):numda = params[i][0]color = params[i][1]ax[i].plot(x, expon(scale = 1/numda).pdf(x), color = color, label = 'lambda={}'.format(numda))ax[i].hist(expon(scale = 1/numda).rvs(size = 10000), density=True, bins = 100)ax[i].set_xticks(np.arange(0, 15))ax[i].set_xlim(0, 15)ax[i].grid()ax[i].legend()plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 群集部署

1.关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;-般面向记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中…

(2024,MixLoRA,任务干扰,独立因子选择,条件因子选择)使用 LoRA 的条件混合进行多模态指令调优

Multimodal Instruction Tuning with Conditional Mixture of LoRA 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 任务干扰在多模态指令调优中的 LoRA 应用 3.1 背景&am…

小甲鱼Python07 函数初级

一、创建和调用函数 pass语句表示一个空的代码块&#xff0c;我们经常先写好函数&#xff0c;pass占一个坑&#xff0c;等规划好之后再来填坑。 函数也是可以指定参数的&#xff0c;我们会把参数传进去用来替代形参。 在Python里如果想要返回值&#xff0c;不需要指定函数的返…

仿牛客网项目---显示评论和添加评论功能的实现

这篇文章&#xff0c;我来介绍一下我的项目中的另外一个功能&#xff1a;显示评论和添加评论。 其实这两个功能都不怎么重要&#xff0c;我感觉最重要的应该是用户注册登录功能&#xff0c;这个也了解一下&#xff0c;知道这么一回事儿就好。 首先设计DAO层。 Mapper public …

python实现AES加密解密

1. 前言 AES是一种对称加密&#xff0c;所谓对称加密就是加密与解密使用的秘钥是一个。 之前写过一片关于python AES加密解密的文章&#xff0c;但是这里面细节实在很多&#xff0c;这次我从 参数类型、加密模式、编码模式、补全模式、等等方面 系统的说明如何使用AES加密解密…

直观理解卷积

卷积直观理解 原文来自最容易理解的对卷积(convolution)的解释 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致…

AVL 树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&#xff0c;两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决…

k8s笔记26--快速实现prometheus监控harbor

k8s笔记26--快速实现prometheus监控harbor 简介采集指标&配置grafana面板采集指标配置grafana面板 说明 简介 harbor是当前最流行的开源容器镜像仓库项目&#xff0c;被大量IT团队广泛应用于生产、测试环境的项目中。本文基于Harbor、Prometheus、Grafana介绍快速实现监控…

FPGA之带有进位逻辑的加法运算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 综合结果如下图所示&#xff1a; 使用了6个Lut&#xff0c;&#xff0c;6个LUT分布…

详细介绍如何用windows11自带Hyper-V安装虚拟机

通过系统自带的hyper-v安装windows11&#xff0c;舒服又惬意&#xff0c;相比用第三方虚拟机软件速度快很多。 硬件准备 1、对于电脑自带的虚拟机Hyper-V&#xff0c;不是每种电脑系统版本都带着的。我们先要确定您的系统符合 Hyper-V 的最低要求。我们跟着下面的步骤来执行&…

《2023年勒索软件攻击态势报告》

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取码&#xff1a;2lo0

探索数据结构:解锁计算世界的密码

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 随着应用程序变得越来越复杂和数据越来越丰富&#xff0c;几百万、…

600万订单每秒Disruptor +SpringBoot,如何解决消息不丢失?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、百度、网易的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; Disruptor 官方说能达到每秒600w OPS订单处理能力&…

【C语言】指针初阶2.0版本

这篇博文我们来继续学习指针的其他内容 指针2.0 传值调用与传址调用传值调用传址调用 一维数组与指针理解数组名使用指针深入理解一维数组 二级指针指针数组二维数组与指针 传值调用与传址调用 在开始之前&#xff0c;我们需要先了解这个概念&#xff0c;后面才能够正常的学习…

利用 Python 抓取数据探索汽车市场趋势

一、引言 随着全球对环境保护意识的增强和技术的进步&#xff0c;新能源汽车作为一种环保、高效的交通工具&#xff0c;正逐渐受到人们的关注和青睐。在这个背景下&#xff0c;对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言&#xff0c;结…

VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统---保姆级教程

引言劝退 VSCode&#xff0c;全称为Visual Studio Code&#xff0c;是由微软开发的一款轻量级&#xff0c;跨平台的代码编辑器。大家能来搜用VSCode配置c/c&#xff0c;想必也知道VSCode的强大&#xff0c;可以手握一个VSCode同时编写如C&#xff0c;C&#xff0c;C#&#xff…

微服务day02-Ribbon负载均衡与Nacos安装与入门

一.Ribbon负载均衡 在上一节中&#xff0c;我们通过在RestTemplte实例中加上了注解 LoadBalanced,表示将来由RestTemplate发起的请求会被Ribbon拦截和处理&#xff0c;实现了访问服务时的负载均衡&#xff0c;那么他是如何实现的呢&#xff1f; 1.1 Ribbon负载均衡的原理 Rib…

LabVIEW非接触式电阻抗层析成像系统

LabVIEW非接触式电阻抗层析成像系统 非接触式电阻抗层析成像&#xff08;NEIT&#xff09;技术以其无辐射、非接触、响应速度快的特点&#xff0c;为实时监测提供了新的解决方案。基于LabVIEW的电阻抗层析成像系统&#xff0c;实现了数据的在线采集及实时成像&#xff0c;提高…

Java SE:多线程(Thread)

1. 线程两个基本概念 并发&#xff1a;即线程交替运行多个指令并行&#xff1a;即多个线程同时运行指令 并发并行不矛盾&#xff0c;两者可同时发生&#xff0c;即多个线程交替运行指令 2. 多线程3种实现方式 2.1 直接创建线程对象 /*** 方式1&#xff1a;* 1. 创建thread类的…

【Linux系统化学习】信号的保存

目录 阻塞信号 信号处理常见方式概览 信号的其他相关概念 在内核中的表示 sigset_t 信号集操作函数 sigprocmask函数 sigpending函数 信号的捕捉 内核如何实现信号的捕捉 sigaction函数 可重入函数 volatile 阻塞信号 信号处理常见方式概览 当信号来临时&#x…