最大似然估计

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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值