要在Python中正确拟合Beta分布,我们可以使用scipy.stats
模块中的beta
分布函数。以下是完整的步骤:
导入必要的模块和函数
import numpy as np
from scipy.stats import beta
from scipy.optimize import minimize
准备数据
准备一个列表或数组来保存该分布的样本数据。假设我们的列表名为data
。
拟合 beta 分布
我们要通过拟合 beta 分布来找到已知数据最符合的分布参数(即 alpha 和 beta),可以通过最大化似然函数来实现这一点。
# 设置初始值
init_alpha = 1
init_beta = 1
# 定义似然函数,这里我们使用 beta.pdf 来构建似然函数
def log_likelihood(params, data):
alpha, beta = params
pdf_values = beta.pdf(data, alpha, beta, loc=0, scale=1)
log_pdf_values = np.log(pdf_values)
return -np.sum(log_pdf_values)
# 使用 minimize 函数来最大化似然函数
result = minimize(log_likelihood, [init_alpha, init_beta], args=(data,))
alpha_ml, beta_ml = result.x
这段代码中,我们首先设置了 beta 分布的初始值。然后,定义了一个似然函数,其参数为 alpha 和 beta,数据为 data
。我们使用 beta.pdf
函数来计算概率密度,然后取对数以计算似然函数。最后,使用 minimize
函数来最大化似然函数,得到最适合的参数值 alpha 和 beta。
生成分布曲线
有了 alpha 和 beta 参数之后,我们可以使用 beta.pdf
函数来生成分布曲线。以下是一段生成概率密度分布图的代码:
import matplotlib.pyplot as plt
# 生成分布曲线数据
x = np.linspace(0, 1, num=500)
y = beta.pdf(x, alpha=alpha_ml, beta=beta_ml)
# 绘制概率密度分布图
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(x, y, 'r-', lw=5, alpha=0.6, label='beta pdf')
# 添加标签和标题
ax.set_xlabel('x')
ax.set_ylabel('pdf(x)')
ax.set_title('Probability Density Function of Beta Distribution')
# 显示图形
plt.show()
这段代码中,我们首先生成 x
值,然后使用 beta.pdf
函数计算对应的 y
值。接着,我们使用 matplotlib
绘制 beta 分布的概率密度分布图,并添加标签和标题。最后,显示图形。
以上就是在 Python 中拟合 Beta 分布的完整攻略,包含了准备数据、拟合 Beta 分布,并生成分布曲线的步骤。