🎯双图神经网络模型:最大后验推理和线性纠错码解码器 | 🎯重复结构和过约束问题超图推理模型 | 🎯无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 | 🎯里程计和全球导航卫星系统空间机器人周身感应三维姿态图算法模型 | 🎯共轭梯度算法手机端行人轨迹(航位)预先推算图模型
在贝叶斯统计中,最大后验概率估计是未知量的估计,等于后验分布的众数。最大后验概率可用于根据经验数据获得未观测量的点估计。它与最大似然估计方法密切相关,但采用增强优化目标,该目标将先验分布(量化通过对相关事件的先验知识获得的额外信息)与想要估计的数量相结合。因此,最大后验概率估计可以看作是最大似然估计的正则化。
后验分布的分母(所谓的边际似然)始终为正,并且不依赖于 \theta,因此在优化中不起作用。观察到,当先验 g 均匀时(即 g 是常数函数),\theta 的最大后验概率估计与最大似然估计一致。
我们可以使用任何优化技术,可能是微积分,最好是梯度上升,以计算参数的最优值,该最优值将最大化后验,即 \theta参数现在也将伴随先验置信和似然性,并且会比 最大似然估计更好。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fmin
from scipy.stats import norm
data = np.array([
1.677, 3.812, 1.463, 2.641, 1.256, 1.678, 1.157, 1.146, 1.323, 1.029,
1.238, 1.018, 1.171, 1.123, 1.074, 1.652, 1.873, 1.314, 1.309, 3.325,
1.045, 2.271, 1.305, 1.277, 1.114, 1.391, 3.728, 1.405, 1.054, 2.789,
1.019, 1.218, 1.033, 1.362, 1.058, 2.037, 1.171, 1.457, 1.518, 1.117,
1.153, 2.257, 1.022, 1.839, 1.706, 1.139, 1.501, 1.238, 2.53, 1.414,
1.064, 1.097, 1.261, 1.784, 1.196, 1.169, 2.101, 1.132, 1.193, 1.239,
1.514, 2.764, 1.853, 1.267, 1.015, 1.789, 1.099, 1.253, 1.418, 1.494,
4.015, 1.459, 2.175, 2.044, 1.551, 4.095, 1.396, 1.262, 1.351, 1.121,
1.196, 1.391, 1.305, 1.141, 1.157, 1.155, 1.261, 1.048, 1.918, 1.889,
1.068, 1.811, 1.198, 1.361, 1.261, 4.093, 2.925, 1.133, 1.573
])
def pareto_log_likelihood(alpha, data):
if alpha <= 0:
return -np.inf
n = len(data)
log_likelihood = n * np.log(alpha) - (alpha + 1) * np.sum(np.log(data))
return log_likelihood
def log_prior(alpha):
mean = 2.5
std = 3
log_prior_prob = norm.logpdf(alpha, loc=mean, scale=std)
return log_prior_prob
initial_guess = 2
alpha_map = fmin(lambda alpha: -log_posterior(alpha, data), x0=[initial_guess], disp=False)[0]
print("MAP estimate for alpha:", alpha_map)
alpha_values = np.linspace(0.1, 10, 100)
log_posterior_values = [log_posterior(alpha, data) for alpha in alpha_values]
plt.figure(figsize=(10, 6))
plt.plot(alpha_values, log_posterior_values, label='Log-Posterior (MAP) Function')
plt.axvline(alpha_map, color='r', linestyle='--', label=f'MAP estimate (α={alpha_map:.2f})')
plt.scatter([alpha_map], [log_posterior(alpha_map, data)], color='red')
plt.title('Log-Posterior (MAP) Function for Different α values')
plt.xlabel('α (Alpha)')
plt.ylabel('Log-Posterior')
plt.legend()
plt.grid(True)
plt.show()