import numpy as np # 导入NumPy库,用于生成随机数据和数学操作
import matplotlib.pyplot as plt # 导入Matplotlib库,用于绘制图表
from scipy.stats import norm # 导入SciPy库中的正态分布模块
from scipy.optimize import minimize # 导入SciPy库中的参数优化函数
# 创建一个模拟数据集,这里假设数据服从正态分布
np.random.seed(42) # 设置随机种子,以便结果可重复
data = np.random.normal(loc=0, scale=1, size=100) # 生成一个包含100个数据点的正态分布样本
# 定义负对数似然函数,我们要最小化这个函数
def negative_log_likelihood(params, data):
mu, sigma = params # 解包参数(均值和标准差)
ll = -np.sum(norm.logpdf(data, loc=mu, scale=sigma)) # 计算负对数似然值
return ll
# 初始参数猜测值
initial_guess = [0, 1] # 初始猜测的均值和标准差
# 使用最小化函数来估计参数
result = minimize(negative_log_likelihood, initial_guess, args=(data,)) # 通过最小化负对数似然函数来估计参数
estimated_mu, estimated_sigma = result.x # 从结果中提取估计的均值和标准差
# 打印估计结果
print("估计的均值:", estimated_mu)
print("估计的标准差:", estimated_sigma)
# 绘制直方图
plt.hist(data, bins=20, density=True, alpha=0.6, color='g', label='Histogram') # 创建直方图
# 生成估计的正态分布曲线
x = np.linspace(min(data), max(data), 100) # 生成一系列用于绘制曲线的数据点
estimated_normal = norm.pdf(x, loc=estimated_mu, scale=estimated_sigma) # 计算估计的正态分布概率密度函数值
plt.plot(x, estimated_normal, 'r--', label='Estimated Normal Distribution') # 绘制估计的正态分布曲线
# 设置图表标签和标题
plt.xlabel('Value') # X轴标签
plt.ylabel('Probability') # Y轴标签
plt.legend() # 添加图例
plt.title('Histogram and Estimated Normal Distribution') # 设置图表标题
# 显示图表
plt.show()
最大似然估计
最新推荐文章于 2024-09-15 22:31:42 发布