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

  • Post category:Python

要在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 分布,并生成分布曲线的步骤。