前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现10种概率分布(附代码)

python实现10种概率分布(附代码)

原创
作者头像
皮大大
发布2024-08-07 10:45:17
1820
发布2024-08-07 10:45:17
举报
文章被收录于专栏:python编程

公众号:尤而小屋 编辑:Peter 作者:Peter

大家好,我是Peter~

今天给大家介绍如何Python实现10种概率分布。

  • 均匀分布
  • 正态分布
  • 指数分布
  • 泊松分布
  • 二项分布
  • 几何分布
  • 超几何分布
  • Beta分布
  • Weibull分布
  • Gumbel分布

首先导入需要的库:

代码语言:python
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt

from scipy.stats import beta
from scipy.stats import weibull_min

均匀分布

匀分布是指在一个区间内所有值出现的概率均等的概率分布。

在概率论和统计学中,均匀分布也被称为矩形分布。这种分布可以通过两个参数a和b来定义,它们分别是数轴上的最小值和最大值,因此通常表示为U(a, b)。

在这种分布下,随机变量在区间a, b内的每个值出现的概率是相等的。

均匀分布是指在一个区间内所有值出现的概率均等的概率分布

对于连续型均匀分布,期望值和方差可以分别计算如下:

  • 期望值(Mean):$$( E(X) = \frac{a + b}{2} \$$
  • 方差(Variance):$$( \text{Var}(X) = \frac{(b - a)^2}{12} )$$
代码语言:python
代码运行次数:0
复制
def uniform_distribution(a, b, size=1000):
    return np.random.uniform(a, b, size)

a = 0
b = 1
size = 1000
samples = uniform_distribution(a, b, size)
plt.hist(samples, bins=30, density=True)
plt.title("Uniform Distribution")
plt.show()

正态分布

正态分布是概率论与统计学中最重要的连续概率分布之一,也称为高斯分布

正态分布的概率密度函数具有集中性、对称性和均匀变动性等特点。其图形呈现中间高两边低的特征,即数据在均值附近密集,远离均值时逐渐稀疏。

正态分布完全由两个参数决定:均值(mean, μ)和标准差(standard deviation, σ)。均值决定了正态分布的中心位置,而标准差则决定分布的宽度。标准差越小,曲线越陡峭;标准差越大,曲线越扁平。

其概率密度函数曲线呈钟形,因此又被称为钟形曲线。

代码语言:python
代码运行次数:0
复制
def normal_distribution(mu, sigma, size=1000):
    return np.random.normal(mu, sigma, size)

mu = 0
sigma = 1
size = 1000
samples = normal_distribution(mu, sigma, size)
plt.hist(samples, bins=30, density=True)
plt.title("Normal Distribution")
plt.show()

指数分布

指数分布是一种连续型概率分布,用于描述独立随机事件发生的时间间隔的概率

指数分布的概率密度函数为:

$$ f(x) = \lambda e^{-\lambda x} \quad (x \geq 0) $$

其中,x是两个事件发生的时间间隔,λ是每单位时间事件发生的平均次数。指数分布的重要特性之一是无记忆性,即当前事件与过去发生的事件无关,这使得指数分布在处理独立随机事件间隔时非常有效。

指数分布的期望(均值)和方差分别为:

  • 期望值(Mean):$$( E(X) = \frac{1}{\lambda} )$$
  • 方差(Variance):$$( \text{Var}(X) = \frac{1}{\lambda^2} )$$
代码语言:python
代码运行次数:0
复制
def exponential_distribution(lam, size=1000):
    return np.random.exponential(1/lam, size)

lam = 1
size = 1000
samples = exponential_distribution(lam, size)
plt.hist(samples, bins=30, density=True)
plt.title("Exponential Distribution")
plt.show()

泊松分布

泊松分布是一种离散概率分布,用于描述单位时间(或空间)内随机事件发生次数的概率

泊松分布适用于描述稀有事件的发生频率。其参数λ表示单位时间(或空间)内事件平均发生的次数。该分布在众多实际应用场景中都有重要地位,如服务设施在特定时间内受到的服务请求次数、电话交换机接到的呼叫次数、自然灾害发生的次数等。

泊松分布的数学表达式为:

$$ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!} $$

其中,$X$ 是单位时间(或空间)内发生的事件数,$k$ 是可能发生的事件次数($k = 0, 1, 2, \ldots$),$\lambda$ 是事件平均发生率。

泊松分布的期望(均值)和方差均为 $\lambda$。

代码语言:python
代码运行次数:0
复制
def poisson_distribution(lam, size=1000):
    return np.random.poisson(lam, size)

lam = 5
size = 1000
samples = poisson_distribution(lam, size)
plt.hist(samples, bins=30, density=True)
plt.title("Poisson Distribution")
plt.show()

二项分布

二项分布是一种离散概率分布,用于描述在n次独立的伯努利试验中成功的次数的概率分布

这种分布适用于仅有两个可能结果的单次试验,即“成功”和“失败”,成功的概率为p,失败的概率则为1-p。当试验次数n较大时,二项分布可以近似为正态分布。

二项分布的概率质量函数的公式表示为:

$$ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} $$

其中,$\binom{n}{k}$ 是组合数,表示从n次试验中选择k次成功的方式数目。当n=1时,二项分布便简化为伯努利分布。

二项分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = np$
  • 方差(Variance):$\text{Var}(X) = np(1-p)$
代码语言:python
代码运行次数:0
复制
def binomial_distribution(n, p, size=1000):
    return np.random.binomial(n, p, size)

n = 10
p = 0.5
size = 1000
samples = binomial_distribution(n, p, size)
plt.hist(samples, bins=np.arange(n+1)-0.5, density=True)
plt.title("Binomial Distribution")
plt.show()

几何分布

几何分布是一种离散概率分布,用于描述在进行一系列伯努利试验中,试验k次才得到第一次成功的概率

几何分布可以通过以下两种方式定义:

  1. 常规定义:在n次伯努利试验中,试验进行到第k次才首次成功的概率。具体来说,前k-1次皆失败,第k次成功。
  2. 无限试验定义:这种情况不限定试验次数,只要继续失败,试验就会持续进行,直到首次成功为止。

几何分布的概率质量函数(PMF)表示为:

$$ P(X = k) = (1-p)^{k-1} \cdot p $$

其中,$p$是单次试验中成功的概率,$k$是试验次数($k=1,2,3,\ldots$)。

几何分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = \frac{1}{p}$
  • 方差(Variance):$\text{Var}(X) = \frac{1-p}{p^2}$
代码语言:python
代码运行次数:0
复制
def geometric_distribution(p, size=1000):
    return np.random.geometric(p, size)

p = 0.5
size = 1000
samples = geometric_distribution(p, size)
plt.hist(samples, bins=np.arange(max(samples)+1), density=True)
plt.title("Geometric Distribution")
plt.show()

超几何分布

超几何分布是一种离散概率分布,用于描述在有限样本中抽取特定类别项的概率,而不放回样本的经典问题

在超几何分布的模型中,我们从一个包含有限个对象的集合中进行抽样,这些对象分为两类:成功状态和失败状态。在每次抽取时,一个对象被选中并从总体中移除,这导致每次抽取后总体组成的变化。这种“无放回”的抽样方法使得超几何分布与有放回抽样的二项分布不同。

超几何分布的概率质量函数为:

$$ P(X = k) = \frac{\binom{K}{k} \binom{N-K}{n-k}}{\binom{N}{n}} $$

其中,$N$是总对象数,$K$是成功状态的对象数,$n$是抽取的对象数,$k$是抽取的成功状态对象数。$\binom{N}{n}$是从$N$个对象中抽取$n$个的组合数,$\binom{K}{k}$是从$K$个成功状态中抽取$k$个的组合数,$\binom{N-K}{n-k}$是从非成功状态对象中抽取$n-k$个的组合数。

超几何分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = n \frac{K}{N}$
  • 方差(Variance):$\text{Var}(X) = n \frac{K}{N} \left(1 - \frac{K}{N}\right) \frac{N-n}{N-1}$
代码语言:python
代码运行次数:0
复制
def hypergeometric_distribution(M, n, N, size=1000):
    return np.random.hypergeometric(M, n, N, size)

M = 100
n = 20
N = 50
size = 1000
samples = hypergeometric_distribution(M, n, N, size)
plt.hist(samples, bins=np.arange(min(samples), max(samples)+1), density=True)
plt.title("Hypergeometric Distribution")
plt.show()

Beta分布

Beta分布,也被称为贝塔分布,是一种连续型概率分布,通常用于描述在一个固定区间内的概率变量的分布

Beta分布的概率密度函数(PDF):

$$ f(x|a, b) = \frac{1}{B(a, b)} x^{a-1} (1-x)^{b-1} $$

其中,$x$ 是概率变量,范围在0到1之间(即 $0 < x < 1$ ),$a > 0$ 和 $b > 0$ 是形状参数,$B(a, b)$ 是Beta函数,它是形状参数的函数,用于确保概率的总和为1^1^。

Beta分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = \frac{a}{a+b}$
  • 方差(Variance):$\text{Var}(X) = \frac{ab}{(a+b)^2(a+b+1)}$

Beta分布因其灵活性和在各种不同应用场景中的适用性而备受关注。例如,在贝叶斯统计中,Beta分布经常被用作二项分布的共轭先验,这使得它在处理概率估计问题时非常有用。此外,Beta分布在可靠性工程、生存分析和经济学模型中也有广泛应用。

代码语言:python
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta

def beta_distribution(a, b, size=1000):
    return np.random.beta(a, b, size)

a = 2
b = 5
size = 1000
samples = beta_distribution(a, b, size)
x = np.linspace(0, 1, 100)
y = beta.pdf(x, a, b)
plt.plot(x, y, 'r-', lw=2)
plt.hist(samples, bins=30, density=True)
plt.title("Beta Distribution")
plt.show()

Weibull分布

Weibull分布,也称为威布尔分布,是一种连续概率分布,广泛应用于生存分析、工程学、可靠性分析和质量控制等领域

Weibull分布的概率密度函数(PDF)为:

$$ f(x; \lambda, k) = \frac{k}{\lambda} \left(\frac{x}{\lambda}\right)^{k-1} e^{-(x/\lambda)^k} $$

其中,$x$是随机变量,$\lambda > 0$是比例参数(scale parameter),$k > 0$是形状参数(shape parameter)。比例参数$\lambda$决定了分布的尺度,而形状参数$k$则影响分布的形状。

Weibull分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = \lambda \Gamma\left(1 + \frac{1}{k}\right)$
  • 方差(Variance):$\text{Var}(X) = \lambda^2 \left\Gamma\left(1 + \frac{2}{k}\right) - \Gamma^2\left(1 + \frac{1}{k}\right)\right$

Weibull分布因其能够灵活适应不同的数据形态而备受青睐。当$k=1$时,它呈现指数分布的形态,适用于描述随机事件发生的时间间隔。$k=2$时,它又呈现出类似于正态分布的钟形曲线,但比正态分布具有更厚的尾巴,这使得它在处理极端事件或异常值时更为有效。

代码语言:python
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import weibull_min

def weibull_distribution(c, scale, size=1000):
    return weibull_min.rvs(c, scale=scale, size=size)

c = 2
scale = 1
size = 1000
samples = weibull_distribution(c, scale, size)
x = np.linspace(weibull_min.ppf(0.01, c), weibull_min.ppf(0.99, c), 100)
y = weibull_min.pdf(x, c, scale=scale)
plt.plot(x, y, 'r-', lw=2)
plt.hist(samples, bins=30, density=True)
plt.title("Weibull Distribution")
plt.show()

Gumbel分布

Gumbel分布,也称为极值I型分布,是一种连续概率分布,常用于统计学中描述极大值或极小值的分布

Gumbel分布的概率密度函数(PDF)为:

$$ f(x; \mu, \beta) = \frac{1}{\beta} e^{-z - e^{-z}} $$

其中,$z = (x-\mu)/\beta$,$\mu$ 是位置参数(location parameter),$\beta > 0$ 是尺度参数(scale parameter)。位置参数决定了分布的中位数,而尺度参数则影响分布的离散程度。

Gumbel分布的期望(均值)和方差分别为:

  • 期望值(Mean):$E(X) = \mu + 0.5772 \beta$
  • 方差(Variance):$\text{Var}(X) = \frac{\pi^2 \beta^2}{12}$
代码语言:python
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import gumbel_r

def gumbel_distribution(mu, beta, size=1000):
    return gumbel_r.rvs(mu, beta, size=size)

mu = 0
beta = 1
size = 1000
samples = gumbel_distribution(mu, beta, size)
x = np.linspace(gumbel_r.ppf(0.01, mu, beta), gumbel_r.ppf(0.99, mu, beta), 100)
y = gumbel_r.pdf(x, mu, beta)
plt.plot(x, y, 'r-', lw=2)
plt.hist(samples, bins=30, density=True)
plt.title("Gumbel Distribution")
plt.show()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 均匀分布
  • 正态分布
  • 指数分布
  • 泊松分布
  • 二项分布
  • 几何分布
  • 超几何分布
  • Beta分布
  • Weibull分布
  • Gumbel分布
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档