python计算重要概率分布

本文详细介绍了几种基本的统计概率分布,包括伯努利分布、二项分布、负二项分布、几何分布、泊松分布、均匀分布、贝塔分布、正态分布、指数分布和卡方分布,阐述了它们各自的定义、特点和应用场景。
摘要由CSDN通过智能技术生成

目录

1、伯努利分布

2、二项分布

3、负二项分布

4、几何分布

5、泊松分布

6、均匀分布

7、贝塔分布

8、正态分布

9、指数分布

10、卡方分布


1、伯努利分布

伯努利分布(Bernoulli Distribution)是一种离散型概率分布,又被称为0-1分布或两点分布。它描述了一个随机试验只有两种可能结果的情况,通常被称为成功和失败。在这个试验中,成功的概率为p,失败的概率为1-p。伯努利分布是一个单次试验的结果,即n=1时的二项分布。

from scipy.stats import bernoulli# 设置成功的概率p = 0.3# 创建伯努利分布实例dist = bernoulli(p)# 计算1次试验中得到k次成功的概率k = 1prob = dist.pmf(k)print(f"在1次试验中得到{k}次成功的概率为: {prob}")

2、二项分布

二项分布(Binomial Distribution)是一种离散型概率分布,描述了在n次独立的是/非试验中成功的次数的概率分布。在每次试验中,只有两种可能的结果,通常称为成功和失败,并且这两种结果发生与否互相对立且相互独立。成功的概率在每一次独立试验中都保持不变,记为p,而失败的概率则为1-p。

二项分布在实际应用中非常广泛,例如用于描述一系列伯努利试验的结果,如抛掷硬币、抽取样本等。此外,在统计学和机器学习中,二项分布也经常被用作建模和推断的基础。

import numpy as npfrom scipy.stats import binom# 试验次数n = 10# 成功的概率p = 0.5# 计算二项分布的概率质量函数(PMF)# k表示成功的次数k = np.arange(0, n + 1)pmf_values = binom.pmf(k, n, p)# 打印结果print("成功的次数 (k):", k)print("概率 (P(X=k)):", pmf_values)# 如果你想计算累积分布函数(CDF),可以使用以下代码:cdf_values = binom.cdf(k, n, p)print("累积分布函数 (F(X<=k)):", cdf_values)

3、负二项分布

负二项分布是一种离散概率分布,用于描述在达到指定次数的成功之前所经历的试验总次数的概率分布。在伯努利试验中,每次试验都有两种可能的结果:成功或失败,成功的概率为p,失败的概率为1-p。负二项分布关注的是为了达到r次成功而需要经历的试验总次数。随机变量X服从参数为r和p的负二项分布时,记为X ~ NB(r, p)。

举几个负二项分布的例子:

机器工作天数分布:假设有一台机器,它每天有p的概率正常工作,有1-p的概率坏掉。我们想知道这台机器在坏掉前能够正常工作多少天。这里,“成功”的事件是机器正常工作一天,“失败”的事件是机器坏掉的一天。如果我们想知道机器在坏掉前平均能够正常工作多少天,我们可以使用负二项分布来描述这个问题。

运动员获奖牌次数分布:假设一个运动员每次参加比赛有p的概率获得奖牌,有1-p的概率不获得奖牌。我们想知道这个运动员在获得r枚奖牌之前尝试了多少次。这里,“失败”的事件是运动员的一次尝试没有获得奖牌,“成功”的事件是运动员获得一枚奖牌。负二项分布可以帮助我们描述这个问题。

掷硬币出现正面次数分布:假设我们有一枚硬币,每次掷出正面的概率是p,掷出反面的概率是1-p。我们想知道在掷出r次正面之前,硬币会出现多少次反面。这里,“成功”的事件是掷出硬币正面,“失败”的事件是掷出硬币反面。负二项分布同样适用于描述这个问题。

import numpy as npfrom scipy.stats import nbinom# 成功的次数r,即在r次成功之前停止试验  r = 2# 试验次数,可以是一个具体的数值或者一个数组  n = np.arange(r, 10)# 成功的概率  p = 0.4# 计算负二项分布的概率质量函数(PMF)  pmf_values = nbinom.pmf(n, r, p)# 打印结果  print("试验次数 (n):", n)print("概率 (P(X=n)):", pmf_values)# 如果你想计算累积分布函数(CDF),可以使用以下代码:cdf_values = nbinom.cdf(n, r, p)print("累积分布函数 (F(X<=n)):", cdf_values)

4、几何分布

几何分布是一种离散型概率分布,用于描述在伯努利试验中,为取得第一次成功需所需试验次数的概率分布。

几何分布是帕斯卡分布(Pascal Distribution)当r=1时的特例。帕斯卡分布描述了在达到指定次数的成功之前需要进行多少次试验,其中r表示成功的次数。当r=1时,帕斯卡分布退化为几何分布,即只关注第一次成功需要进行的试验次数。

几何分布在实际应用中有许多用途。例如,在统计学中,它可以用于描述一系列独立试验中首次成功所需的试验次数。在可靠性工程中,几何分布可以用于描述产品在首次故障之前需要经过的测试次数。此外,在概率论和统计学中,几何分布也常用于建模和推断。

import numpy as np  from scipy.stats import geom    # 成功的概率  p = 0.3    # 计算几何分布的概率质量函数(PMF)  # k表示需要进行多少次试验直到第一次成功  k = np.arange(1, 11)  # 例如,我们计算从第一次到第十次试验的概率  pmf_values = geom.pmf(k, p)    # 打印结果  print("试验次数 (k):", k)  print("概率 (P(X=k)):", pmf_values)    # 如果你想计算累积分布函数(CDF),可以使用以下代码:cdf_values = geom.cdf(k, p)  print("累积分布函数 (F(X<=k)):", cdf_values)

5、泊松分布

泊松分布是一种在概率论中常用的离散型概率分布,它描述了在单位时间内随机事件发生的次数。这种分布的特点是它的参数λ,它既是泊松分布的均值,也是泊松分布的方差。泊松分布的概率分布函数由参数λ决定,它表示单位时间内随机事件的平均发生率。

泊松分布适用于描述单位时间内随机事件发生的次数,例如在一小时内电话亭接到的电话次数,或者在一定时间内放射性物质发出的衰变次数。

泊松分布与二项分布有一定的关系。当二项分布的试验次数n很大而每次试验的成功概率p很小时,泊松分布可以作为二项分布的近似,其中λ等于np。

在实际应用中,许多随机现象都服从或近似服从泊松分布。例如,在统计学中,泊松分布可以用于描述一段时间内某个事件发生的次数,如交通事故、疾病发病率等。此外,在物理学、工程学、计算机科学等领域,泊松分布也有广泛的应用。

import numpy as np  from scipy.stats import poisson    # 平均发生率(λ)  mu = 3.0    # 计算泊松分布的概率质量函数(PMF)  # k表示事件发生的次数  k = np.arange(0, 11)  # 例如,我们计算从0次到10次事件发生的概率  pmf_values = poisson.pmf(k, mu)    # 打印结果  print("事件发生次数 (k):", k)  print("概率 (P(X=k)):", pmf_values)    # 如果你想计算累积分布函数(CDF),可以使用以下代码:cdf_values = poisson.cdf(k, mu)  print("累积分布函数 (F(X<=k)):", cdf_values)

6、均匀分布

均匀分布,也被称为矩形分布,是一种对称的概率分布。在均匀分布中,随机变量在相同长度间隔的分布概率是等可能的。均匀分布由两个参数a和b定义,它们是数轴上的最小值和最大值,通常表示为U(a, b)。

均匀分布的一个重要特性是,随机变量落在固定长度的任何间隔内的概率与区间本身的位置无关,但取决于间隔大小。只要这个间隔包含在分布的支持中(即,在a和b之间),这个特性就成立。

标准均匀分布是一种特殊情况,当a=0且b=1时,所得分布U(0,1)被称为标准均匀分布。如果X服从标准均匀分布,那么Y=X也是具有参数(1,1)的β分布的特殊情况。此外,两个独立的均匀分布随机变量的和会产生对称的三角分布。

均匀分布在概率论和统计学中有许多应用。例如,在任意分布的采样中,均匀分布是非常有用的。一种常见的采样方法是使用目标随机变量的累积分布函数的逆变换。这种方法在理论工作中非常有用,但需要知道目标变量的累积分布函数(CDF)的逆变换。

生成均匀分布随机数的例子:

import numpy as np# 定义均匀分布的区间,例如从a到ba = 0b = 1# 生成10个在[a, b]区间内的均匀分布随机数samples = np.random.uniform(a, b, 10)# 打印生成的随机数print(samples)

计算PDF和CDF的例子:

from scipy.stats import uniformimport matplotlib.pyplot as pltimport numpy as np# 定义均匀分布的区间loc = 0  # 分布的起始点scale = 1  # 分布的宽度# 创建一个均匀分布对象unif_dist = uniform(loc=loc, scale=scale)# 计算PDF和CDFx = np.linspace(loc, loc + scale, 100)  # 生成一个范围内的点集pdf_values = unif_dist.pdf(x)  # 计算这些点的PDF值cdf_values = unif_dist.cdf(x)  # 计算这些点的CDF值# 绘制PDF和CDF图plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x, pdf_values, 'b-', lw=2)plt.title('PDF of Uniform Distribution')plt.xlabel('Value')plt.ylabel('Probability Density')plt.subplot(1, 2, 2)plt.plot(x, cdf_values, 'g-', lw=2)plt.title('CDF of Uniform Distribution')plt.xlabel('Value')plt.ylabel('Cumulative Probability')plt.tight_layout()plt.show()

7、贝塔分布

贝塔分布(Beta Distribution)是一种在概率论中常用的连续型概率分布,主要用于描述随机变量在(0,1)区间内的取值概率。贝塔分布可以作为伯努利分布和二项式分布的共轭先验分布,因此在机器学习和数理统计学中有重要应用。

贝塔分布的概率密度函数由两个参数α和β决定,通常表示为B(α, β)。这两个参数也称为形状参数,它们决定了分布的形状。在贝塔分布中,随机变量的取值范围在0到1之间,并且其均值和方差可以通过α和β来计算。

贝塔分布的一个重要特性是,它可以看作是一个概率的概率分布。当你不知道一个东西的具体概率是多少时,贝塔分布可以给出所有概率出现的可能性大小。这使得贝塔分布在处理不确定性问题时非常有用,例如在机器学习中用于表示参数的先验分布或后验分布。

import numpy as npfrom scipy.stats import betaimport matplotlib.pyplot as plt# 贝塔分布的参数a = 2.0  # 第一个形状参数b = 3.0  # 第二个形状参数# 创建一个贝塔分布对象beta_dist = beta(a, b)# 计算PDFx = np.linspace(beta_dist.ppf(0.01), beta_dist.ppf(0.99), 100)  # 生成一个范围内的点集pdf_values = beta_dist.pdf(x)# 计算CDFcdf_values = beta_dist.cdf(x)# 绘制PDF图plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x, pdf_values, 'b-', lw=2)plt.title('PDF of Beta Distribution (a={}, b={})'.format(a, b))plt.xlabel('Value')plt.ylabel('Probability Density')# 绘制CDF图plt.subplot(1, 2, 2)plt.plot(x, cdf_values, 'g-', lw=2)plt.title('CDF of Beta Distribution (a={}, b={})'.format(a, b))plt.xlabel('Value')plt.ylabel('Cumulative Probability')plt.tight_layout()plt.show()# 生成贝塔分布的随机数random_samples = beta_dist.rvs(size=1000)print("Random samples from Beta distribution:", random_samples)

8、正态分布

正态分布,也称为高斯分布,是一种在统计学中非常重要的连续概率分布。正态分布具有钟形曲线的形状,曲线关于均值对称,并在均值处达到最高点。

正态分布具有许多重要的性质和应用。首先,正态分布具有对称性,即概率密度函数关于均值对称。这意味着正态分布的曲线在均值两侧是镜像对称的,因此均值、中位数和众数都相等。其次,正态分布具有集中性,即曲线在均值处达到最高点,并随着离均值的距离增加而逐渐降低。这使得正态分布具有稳定性和可靠性,许多自然现象和社会现象都服从或近似服从正态分布,例如身高、体重、考试成绩等。

正态分布在统计学中有广泛的应用,例如用于描述随机变量的分布情况、进行概率计算、假设检验、置信区间估计等。此外,在数据分析、机器学习、金融等领域也有重要的应用。

import numpy as npfrom scipy.stats import normimport matplotlib.pyplot as plt# 定义正态分布的均值和标准差mu = 0  # 均值sigma = 1  # 标准差# 生成正态分布的随机数random_samples = np.random.normal(mu, sigma, 1000)# 计算正态分布的PDF和CDFx = np.linspace(mu - 4 * sigma, mu + 4 * sigma, 100)  # 生成一个范围内的点集pdf_values = norm.pdf(x, mu, sigma)  # 计算这些点的PDF值cdf_values = norm.cdf(x, mu, sigma)  # 计算这些点的CDF值# 绘制PDF和CDF图plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x, pdf_values, 'b-', lw=2)plt.title('PDF of Normal Distribution (μ={}, σ={})'.format(mu, sigma))plt.xlabel('Value')plt.ylabel('Probability Density')plt.subplot(1, 2, 2)plt.plot(x, cdf_values, 'g-', lw=2)plt.title('CDF of Normal Distribution (μ={}, σ={})'.format(mu, sigma))plt.xlabel('Value')plt.ylabel('Cumulative Probability')plt.tight_layout()plt.show()# 计算分位数percentile_25 = norm.ppf(0.25, mu, sigma)  # 计算25%分位数percentile_75 = norm.ppf(0.75, mu, sigma)  # 计算75%分位数print("25% percentile:", percentile_25)print("75% percentile:", percentile_75)

9、指数分布

指数分布是一种在概率理论和统计学中常用的连续概率分布,主要用于描述泊松过程中事件之间的时间间隔。泊松过程是一种事件以恒定平均速率连续且独立地发生的过程。指数分布具有以下特点:

无记忆性(Memoryless Property):指数分布的一个重要特性是它是无记忆的,这意味着如果一个随机变量服从指数分布,那么关于该随机变量超过某个特定时间点的时间间隔的信息,并不会影响随机变量在此之前的时间间隔的分布。也就是说,指数分布是一种“无记忆”的分布。

伽马分布的特殊情况:指数分布是伽马分布的一个特殊情况,当伽马分布中的形状参数为1时,它就变为指数分布。

几何分布的连续模拟:指数分布也可以看作是几何分布的连续模拟。

广泛应用:除了用于分析泊松过程外,指数分布还可以在其他各种环境中找到应用,如描述产品的寿命(特别是当产品的失效是偶然失效时)或旅客进机场的时间间隔等。

在实际应用中,指数分布常用于可靠性工程、排队论、生物统计学以及计算机网络等领域。例如,在可靠性工程中,指数分布可用于描述电子元件的寿命;在排队论中,它可用于描述顾客到达服务台的时间间隔等。

import numpy as npfrom scipy.stats import exponimport matplotlib.pyplot as plt# 定义指数分布的参数lambda_param = 0.5  # 指数分布的λ参数,即平均每单位时间发生事件的次数# 生成指数分布的随机数random_samples = np.random.exponential(scale=1 / lambda_param, size=1000)# 使用scipy.stats的expon类创建指数分布对象exponential_dist = expon(scale=1 / lambda_param)# 计算指数分布的PDF和CDFx = np.linspace(exponential_dist.ppf(0.01), exponential_dist.ppf(0.99), 100)pdf_values = exponential_dist.pdf(x)cdf_values = exponential_dist.cdf(x)# 绘制PDF和CDF图plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x, pdf_values, 'b-', lw=2)plt.title('PDF of Exponential Distribution (λ={})'.format(lambda_param))plt.xlabel('Value')plt.ylabel('Probability Density')plt.subplot(1, 2, 2)plt.plot(x, cdf_values, 'g-', lw=2)plt.title('CDF of Exponential Distribution (λ={})'.format(lambda_param))plt.xlabel('Value')plt.ylabel('Cumulative Probability')plt.tight_layout()plt.show()# 计算指数分布的一些统计量mean = exponential_dist.mean()median = exponential_dist.median()stddev = exponential_dist.std()print("Mean:", mean)print("Median:", median)print("Standard Deviation:", stddev)

10、卡方分布

卡方分布(Chi-Square Distribution)是概率论与统计学中常用的一种概率分布。它描述的是k个独立的标准正态分布变量的平方和,且服从自由度为k的卡方分布。卡方分布常用于假设检验和置信区间的计算。

import numpy as npfrom scipy.stats import chi2import matplotlib.pyplot as plt# 定义卡方分布的自由度df = 3  # 自由度# 计算卡方分布的概率密度函数(PDF)x = np.linspace(chi2.ppf(0.01, df), chi2.ppf(0.99, df), 100)pdf_values = chi2.pdf(x, df)# 计算卡方分布的累积分布函数(CDF)cdf_values = chi2.cdf(x, df)# 绘制PDF和CDF图plt.figure(figsize=(10, 4))plt.subplot(1, 2, 1)plt.plot(x, pdf_values, 'b-', lw=2)plt.title('PDF of Chi-Squared Distribution (df={})'.format(df))plt.xlabel('Value')plt.ylabel('Probability Density')plt.subplot(1, 2, 2)plt.plot(x, cdf_values, 'g-', lw=2)plt.title('CDF of Chi-Squared Distribution (df={})'.format(df))plt.xlabel('Value')plt.ylabel('Cumulative Probability')plt.tight_layout()plt.show()# 生成卡方分布的随机数random_samples = chi2.rvs(df, size=1000)# 计算卡方分布的一些统计量mean = chi2.mean(df)variance = chi2.var(df)print("Mean:", mean)print("Variance:", variance)

  • 20
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一项复杂的任务,需要多种技术的组合才能完成。以下是一个基本的框架,涉及到的技术包括图像处理、机器学习和统计分析。 1. 数据收集和预处理 收集超声图像和自然图像,并将它们转换为数字图像(即像素阵列)。对于每个图像,计算其颜色分布、纹理和形状特征。这可以使用OpenCV和scikit-image等库进行计算。 2. 特征提取和选择 对于每个图像,提取颜色、纹理和形状特征。这可能包括灰度直方图、颜色直方图、LBP、HOG和形状描述符(如Hu矩)。通过使用特征选择技术,可以选择最重要的特征,以减少维度并改善分类结果。 3. 概率模型的建立 根据所选特征,建立两个概率模型:一个用于超声图像,另一个用于自然图像。对于每个模型,使用训练集计算每个特征的概率分布。这可以使用scikit-learn等库完成。 4. 样本分类 对于测试集中的每个图像,使用两个概率模型计算其属于超声图像或自然图像的概率。可以使用朴素贝叶斯分类器或其他分类器进行分类。根据分类结果,可以计算分类准确率和其他性能指标。 5. 统计分析 通过比较两个概率模型的特征分布,可以确定超声图像和自然图像之间的差异。可以使用假设检验或其他统计方法进行分析。 以下是一个基本的Python代码框架,展示了如何实现上述任务: ```python import cv2 import numpy as np from skimage.feature import local_binary_pattern, hog from sklearn.naive_bayes import GaussianNB from sklearn.metrics import accuracy_score # Step 1: 数据收集和预处理 # 收集超声图像和自然图像 # 转换为数字图像(即像素阵列) # 计算每个图像的颜色、纹理和形状特征 # 特征存储在X数组中,标签存储在y数组中 X = [] y = [] # TODO: 数据收集和预处理 # Step 2: 特征提取和选择 # 提取颜色、纹理和形状特征 # 选择最重要的特征,以减少维度并改善分类结果 # TODO: 特征提取和选择 # Step 3: 概率模型的建立 # 建立两个概率模型,一个用于超声图像,另一个用于自然图像 # 计算每个特征的概率分布 X_sono = np.array([x for x, t in zip(X, y) if t == 'sono']) X_nature = np.array([x for x, t in zip(X, y) if t == 'nature']) p_color_sono = # 计算颜色分布概率 p_color_nature = # 计算颜色分布概率 p_texture_sono = # 计算纹理特征的概率 p_texture_nature = # 计算纹理特征的概率 p_shape_sono = # 计算形状特征的概率 p_shape_nature = # 计算形状特征的概率 # Step 4: 样本分类 # 对于测试集中的每个图像,使用两个概率模型计算其属于超声图像或自然图像的概率 # 使用朴素贝叶斯分类器或其他分类器进行分类 X_test = [] y_test = [] # TODO: 准备测试数据 y_pred = [] for x in X_test: p_sono = # 计算超声图像概率 p_nature = # 计算自然图像概率 if p_sono > p_nature: y_pred.append('sono') else: y_pred.append('nature') # 计算分类准确率和其他性能指标 accuracy = accuracy_score(y_test, y_pred) # TODO: 计算其他性能指标 # Step 5: 统计分析 # 比较两个概率模型的特征分布,确定超声图像和自然图像之间的差异 # TODO: 统计分析 ``` 请注意,这只是一个基本的框架,需要根据您的具体需求进行修改和优化。同时,实现这个框架需要大量的数据和计算资源,因此您需要准备足够的数据和计算能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值