Matplotlib 用样本绘制概率密度函数

您所在的位置:网站首页 各种概率分布的图像怎么画 Matplotlib 用样本绘制概率密度函数

Matplotlib 用样本绘制概率密度函数

2024-05-01 09:04| 来源: 网络整理| 查看: 265

Matplotlib 用样本绘制概率密度函数

在数据分析和可视化方面,Matplotlib是Python最广泛使用的包之一。它提供了各种绘图功能,可以方便地绘制各种图形,并且可以根据实际需要对细节进行调整。本文将介绍如何使用Matplotlib绘制概率密度函数某个随机变量的样本。

阅读更多:Matplotlib 教程

什么是概率密度函数

概率密度函数是一个描述随机变量概率分布的函数。可以理解为一个连续的函数在某个区间内的取值概率。在数学上,概率密度函数是一个非负的函数,且总积分为1。通过概率密度函数可以计算随机变量在某个范围内的概率。

\int_{-\infty}^{+\infty} f(x) dx = 1

例如,正态分布的概率密度函数是:

f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x – \mu)^2}{2\sigma^2}}

其中,\mu是均值,\sigma是标准差。正态分布表示的是一个具有对称性、峰型呈钟形分布的随机变量。

如何绘制概率密度函数

在使用Matplotlib绘制概率密度函数之前,我们首先需要了解一些概率统计的知识。

在概率统计中,我们经常使用样本来估计总体的概率分布。样本是从总体中选择出来的一部分数据,它可以反映出总体的一些特征。在绘制概率密度函数时,我们需要首先将样本进行直方图的绘制,然后将直方图转化为概率密度函数。

绘制直方图 import matplotlib.pyplot as plt import numpy as np # 生成随机数 np.random.seed(0) x = np.random.randn(1000) # 绘制直方图 fig, ax = plt.subplots() ax.hist(x, bins=30, density=True) ax.set_xlabel('x') ax.set_ylabel('Probability density function') ax.set_title('Histogram with density function') plt.show()

上述代码会生成一个包含1000个从正态分布中采样的随机数序列。我们将这些随机数绘制为直方图,其中bins参数表示直方图中条形的数量。

绘制概率密度函数

在绘制直方图之后,我们需要将其转化为概率密度函数。

import matplotlib.pyplot as plt import numpy as np from scipy import stats # 生成随机数 np.random.seed(0) x = np.random.randn(1000) # 绘制直方图 fig, ax = plt.subplots() ax.hist(x, bins=30, density=True, alpha=0.5, label='Histogram') # 绘制概率密度函数 xmin, xmax = ax.get_xlim() x_axis = np.linspace(xmin, xmax, 1000) y_axis = stats.norm.pdf(x_axis, loc=0, scale=1) ax.plot(x_axis, y_axis, label='PDF') ax.set_xlabel('x') ax.set_ylabel('Probability density function') ax.set_title('Histogram and probability density function') ax.legend() plt.show()

上述代码块中,我们在直方图上叠加了一条概率密度函数的曲线。概率密度函数有不同的形式,这里我们使用了正态分布的概率密度函数计算方式来进行绘图。可以看出,概率密度函数更为平滑,更符合实际情况。同时我们可以看出直方图和概率密度函数有一定的相似性,但概率密度函数更适合用于分布的可视化。

如何选择概率密度函数

在绘制概率密度函数时,我们需要选择一个合适的概率密度函数。常用的概率密度函数有正态分布、泊松分布、指数分布等。选择不同的概率密度函数会对结果进行不同的呈现。选择合适的概率密度函数需要考虑数据的实际情况,例如数据的分布情况以及数据所处的领域等。

正态分布

正态分布是概率密度函数最常用的一种分布。它具有良好的可视化效果并且应用广泛。正态分布定义了一个平均值和标准差,因此可以通过平均值和标准差来描述数据的分布情况。如果数据近似于正态分布,则使用正态分布作为概率密度函数可以产生较好的效果。

import matplotlib.pyplot as plt import numpy as np from scipy import stats # 生成随机数 np.random.seed(0) x = np.random.randn(1000) # 绘制直方图和概率密度函数 fig, ax = plt.subplots() ax.hist(x, bins=30, density=True, alpha=0.5, label='Histogram') xmin, xmax = ax.get_xlim() x_axis = np.linspace(xmin, xmax, 1000) # 绘制正态分布 mu, std = stats.norm.fit(x) pdf = stats.norm.pdf(x_axis, mu, std) ax.plot(x_axis, pdf, label='Normal distribution') ax.set_xlabel('x') ax.set_ylabel('Probability density function') ax.set_title('Histogram and probability density function') ax.legend() plt.show() 指数分布

指数分布适用于表示独立随机事件之间的时间间隔。指数分布的概率密度函数呈指数下降。如果数据分布在非负实数域内,而且数据的增长率与时间的长度成比例,那么可以选择指数分布作为概率密度函数。

import matplotlib.pyplot as plt import numpy as np from scipy import stats # 生成随机数 np.random.seed(0) x = np.random.exponential(size=1000) # 绘制直方图和概率密度函数 fig, ax = plt.subplots() ax.hist(x, bins=30, density=True, alpha=0.5, label='Histogram') xmin, xmax = ax.get_xlim() x_axis = np.linspace(xmin, xmax, 1000) # 绘制指数分布 loc, scale = stats.expon.fit(x) pdf = stats.expon.pdf(x_axis, loc, scale) ax.plot(x_axis, pdf, label='Exponential distribution') ax.set_xlabel('x') ax.set_ylabel('Probability density function') ax.set_title('Histogram and probability density function') ax.legend() plt.show() 泊松分布

泊松分布适用于描述单位时间内随机事件的数量,例如网络流量、访问量等。泊松分布的概率密度函数呈单峰分布,具有非负整数值。

import matplotlib.pyplot as plt import numpy as np from scipy import stats # 生成随机数 np.random.seed(0) x = np.random.poisson(lam=4, size=1000) # 绘制直方图和概率密度函数 fig, ax = plt.subplots() ax.hist(x, bins=30, density=True, alpha=0.5, label='Histogram') xmin, xmax = ax.get_xlim() x_axis= np.linspace(xmin, xmax, 1000) # 绘制泊松分布 mu = x.mean() pdf = stats.poisson.pmf(x_axis, mu) ax.plot(x_axis, pdf, label='Poisson distribution') ax.set_xlabel('x') ax.set_ylabel('Probability density function') ax.set_title('Histogram and probability density function') ax.legend() plt.show() 总结

在本文中,我们介绍了如何使用Matplotlib在Python中绘制概率密度函数。首先需要绘制数据的直方图,然后将其转化为概率密度函数。我们介绍了多种常见的概率密度函数,包括正态分布、指数分布和泊松分布。选择合适的概率密度函数可以更好地描述数据的分布情况,并且更好地进行可视化展示。Matplotlib作为Python的一种重要工具,在数据分析和可视化方面具有广泛的应用场景。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3