当前位置: 首页 > 科技观察

Python实现八个概率分布公式和可视化

时间:2023-03-20 01:40:57 科技观察

概率统计知识是数据科学和机器学习的核心;我们需要统计学和概率知识来有效地收集、审查和分析数据。现实世界中有几种现象在本质上被认为是统计性的(即天气数据、销售数据、财务数据等)。这意味着在某些情况下,我们已经能够开发出一些方法,通过可以表征数据的数学函数来帮助我们对自然进??行建模。“概率分布是一种数学函数,它给出了实验的不同可能结果发生的概率。”了解数据的分布有助于更好地模拟我们周围的世界。它可以帮助我们确定各种结果的可能性,或估计事件的可变性。所有这些使得理解不同的概率分布在数据科学和机器学习中非常有价值。均匀分布最直接的分布是均匀分布。均匀分布是一种概率分布,其中所有结果的可能性均等。例如,如果我们掷一个公平的骰子,落在任何数字上的概率都是1/6。这是一个离散的均匀分布。但并非所有均匀分布都是离散的——它们也可以是连续的。它们可以取指定范围内的任何实数值。a和b之间的连续均匀分布的概率密度函数(PDF)如下:让我们看看如何在Python中对它们进行编码:importnumpyasnpimportmatplotlib.pyplotaspltfromscipyimportstats#forcontinuousa=0b=50size=5000X_continuous=np.linspace(a,b,size)continuous_uniform=stats.uniform(loc=a,scale=b)continuous_uniform_pdf=continuous_uniform.pdf(X_continuous)#对于离散X_discrete=np.arange(1,7)discrete_uniform=stats.randint(1,7)discrete_uniform_pmf=discrete_uniform.pmf(X_discrete)#绘制两个表fig,ax=plt.subplots(nrows=1,ncols=2,figsize=(15,5))#discreteplotax[0].bar(X_discrete,discrete_uniform_pmf)ax[0].set_xlabel("X")ax[0].set_ylabel("概率")ax[0].set_title("离散均匀分布")#连续图ax[1].plot(X_continuous,continuous_uniform_pdf)ax[1].set_xlabel("X")ax[1].set_ylabel("概率")ax[1].set_title("连续均匀分布")plt.show()高斯分布离子高斯分布可能是最常听到和熟悉的分布。它有好几个名字:有人称它为钟形曲线,因为它的概率图看起来像一个钟,有人称它为高斯分布,因为德国数学家卡尔高斯首先描述了它,还有人称它为正态分布,因为早期的统计学家注意到它一遍又一遍地发生。正态分布的概率密度函数如下:σ是标准差,μ是分布的均值。请注意,在正态分布中,均值、众数和中位数都相等。当我们绘制一个正态分布的随机变量时,曲线关于均值对称——一半的值在中心的左边,一半在中心的右边。此外,曲线下的总面积为1。mu=0variance=1sigma=np.sqrt(variance)x=np.linspace(mu-3*sigma,mu+3*sigma,100)plt.subplots(figsize=(8,5))plt.plot(x,stats.norm.pdf(x,mu,sigma))plt.title("NormalDistribution")plt.show()表示正态分布。经验法则告诉我们,一定比例的数据落在一定数量的均值标准差范围内。这些百分比是:68%的数据落在平均值的一个标准差范围内。95%的数据落在平均值的两个标准差范围内。99.7%的数据落在平均值的三个标准差范围内。对数正态分布对数正态分布是对数服从正态分布的随机变量的连续概率分布。因此,如果随机变量X服从对数正态分布,则Y=ln(X)服从正态分布。这是对数正态分布的PDF:一个对数正态分布的随机变量只取正实数值。因此,对数正态分布会创建一条右偏曲线。让我们用Python绘制它:X=np.linspace(0,6,500)std=1mean=0lognorm_distribution=stats.lognorm([std],loc=mean)lognorm_distribution_pdf=lognorm_distribution.pdf(X)fig,ax=plt.subplots(figsize=(8,5))plt.plot(X,lognorm_distribution_pdf,label="μ=0,σ=1")ax.set_xticks(np.arange(min(X),max(X)))std=0.5均值=0lognorm_distribution=stats.lognorm([std],loc=mean)lognorm_distribution_pdf=lognorm_distribution.pdf(X)plt.plot(X,lognorm_distribution_pdf,label="μ=0,σ=0.5")std=1.5平均值=1lognorm_distribution=stats.lognorm([std],loc=mean)lognorm_distribution_pdf=lognorm_distribution.pdf(X)plt.plot(X,lognorm_distribution_pdf,label="μ=1,σ=1.5")plt.title("LognormalDistribution")plt.legend()plt.show()泊松分布泊松分布以法国数学家西蒙丹尼斯泊松命名。这是一个离散概率分布,这意味着它计算具有有限结果的事件-换句话说,它是一个计数分布。因此,泊松分布用于表示事件在指定时间段内可能发生的次数。如果事件以固定速率及时发生,则及时观察事件数量(n)的概率可以用泊松分布来描述。例如,客户可能以每分钟3位的平均速度到达咖啡馆。我们可以使用泊松分布来计算9名顾客在2分钟内到达的概率。下面是概率质量函数公式:λ是一个单位时间内的事件发生率——在我们的例子中,它是3。k是出现的次数——在我们的例子中,它是9。这里可以使用Scipy来完成计算的概率。fromscipyimportstatsprint(stats.poisson.pmf(k=9,mu=3))0.002700503931560479泊松分布的曲线类似于正态分布,λ代表峰值。X=stats.poisson.rvs(mu=3,size=500)plt.subplots(figsize=(8,5))plt.hist(X,density=True,edgecolor="black")plt.title("泊松Distribution")plt.show()指数分布指数分布是泊松点过程中事件之间时间的概率分布。指数分布的概率密度函数如下:λ为速率参数,x为随机变量。X=np.linspace(0,5,5000)exponential_distribtuion=stats.expon.pdf(X,loc=0,scale=1)plt.subplots(figsize=(8,5))plt.plot(X,exponential_distribtuion)plt.title("ExponentialDistribution")plt.show()二项式分布您可以将二项式分布视为实验成功或失败的概率。有些人也可能将其描述为抛硬币概率。具有参数n和p的二项式分布是n个独立实验序列中成功次数的离散概率分布,每个实验都提出是-否问题,每个都有自己的布尔结果:成功或失败。本质上,二项分布衡量的是两个事件发生的概率。一个事件以概率p发生,另一个事件以概率1-p发生。以下是二项式分布的公式:P=二项式概率=组合数x=n次试验中特定结果的数量p=单次试验成功的概率q=单次试验失败的概率n=试验次数可视化代码如下:X=np.random.binomial(n=1,p=0.5,size=1000)plt.subplots(figsize=(8,5))plt.hist(X)plt.title("BinomialDistribution")plt.show()Student'stdistributionStudent'stdistribution(或简称t分布)是在估计样本量较小且总体标准差是未知成员。它是由英国统计学家WilliamSealyGosset以笔名“student”开发的。PDF如下:n是一个称为“自由度”的参数,有时也称为“d.o.f”。对于更高的n值,t分布更接近于正态分布。从scipyimportstatsX1=stats.t.rvs(df=1,size=4)X2=stats.t.rvs(df=3,size=4)X3=stats.t.rvs(df=9,size=4)plt.subplots(figsize=(8,5))sns.kdeplot(X1,label="1d.o.f")sns.kdeplot(X2,label="3d.o.f")sns.kdeplot(X3,label="6d.o.f")plt.title("Student'stdistribution")plt.legend()plt.show()卡方分布卡方分布是伽玛分布的一个特例;对于k个自由度,卡方分布是某些独立标准正态随机变量的k平方和。PDF如下:这是一种流行的概率分布,常用于假设检验和置信区间构建。Python中的一些示例图:X=np.arange(0,6,0.25)plt.subplots(figsize=(8,5))plt.plot(X,stats.chi2.pdf(X,df=1),label="1d.o.f")plt.plot(X,stats.chi2.pdf(X,df=2),label="2d.o.f")plt.plot(X,stats.chi2.pdf(X,df=3),label="3d.o.f")plt.title("Chi-squaredDistribution")plt.legend()plt.show()掌握统计学和概率对于数据科学来说是必不可少的。本文展示了一些常见和常用的发行版,希望对您有所帮助。