如何在 python 中正确拟合 beta 分布?

  • Post category:Python

拟合beta分布的过程可以分为以下几步:

  1. 导入必要的库

拟合beta分布需要用到numpy和scipy两个库,在代码中应先导入这两个库:

import numpy as np
from scipy.stats import beta
  1. 生成随机数

可以使用numpy的random模块生成beta分布的随机数。其中,alpha和beta是分布的参数,可以根据需求自行设置。以下示例生成了1000个符合beta分布的随机数:

alpha, beta = 5, 3
data = np.random.beta(alpha, beta, size=1000)
  1. 拟合beta分布

使用scipy的fit方法可以拟合beta分布,其中无需手动设定beta分布的参数。以下代码示例对上述生成的随机数进行beta分布拟合:

params = beta.fit(data)
a, b, loc, scale = params

以上代码中,params即为拟合出来的beta分布的参数,分别为 $a$、$b$、$loc$、$scale$。

  1. 绘制图形

为了直观地观察拟合的效果,可以绘制beta分布的概率密度函数。以下示例代码绘制了上述拟合参数的beta分布的概率密度函数图:

import matplotlib.pyplot as plt

x = np.linspace(0, 1, 100)
pdf_fitted = beta.pdf(x, a, b, loc=loc, scale=scale)
plt.plot(x, pdf_fitted, 'r-', lw=5, alpha=0.6, label='PDF fitted')
plt.hist(data, density=True, histtype='stepfilled', alpha=0.2)
plt.legend()
plt.show()

以上代码中,$x$ 是 beta 分布函数的自变量。函数 $beta.pdf$ 方法可以根据拟合出来的分布的参数绘制相应的概率密度函数。在 $pdf_fitted$ 中,是用拟合参数计算出来的 $Beta(a,b,loc,scale)$ 分布的概率密度。而 $plt.hist$ 方法则以通过随机数生成的数据,进行直方图绘制。最后使用 $plt.show$ 方法呈现出来。

综上,拟合beta分布的完整代码示例如下:

import numpy as np
from scipy.stats import beta
import matplotlib.pyplot as plt

# 生成符合beta分布的随机数
alpha, beta = 5, 3
data = np.random.beta(alpha, beta, size=1000)

# 拟合beta分布
params = beta.fit(data)
a, b, loc, scale = params

# 绘制拟合的概率密度函数
x = np.linspace(0, 1, 100)
pdf_fitted = beta.pdf(x, a, b, loc=loc, scale=scale)
plt.plot(x, pdf_fitted, 'r-', lw=5, alpha=0.6, label='PDF fitted')
plt.hist(data, density=True, histtype='stepfilled', alpha=0.2)
plt.legend()
plt.show()