5.2.2 变分推断实例:高斯分布近似
def p(x):
return ((0.3 * np.exp(-(x-0.3)**2))+0.7*np.exp(-(x-2.)**2/0.3))/1.2113eps = np.finfo(float).eps #一个大于0的极小值ε,保证在进行对数计算时大于0.
def lossfun(params):
samplesize = 500 #蒙特卡洛法的采样数
# q-高斯分布的均值与标准差
u = params[0]
sigma = params[1]
# 从q分布中采样
ss = norm.rvs(loc=u,scale=sigma,size = samplesize)
# q中所采样本在p分布的概率密度
pp1 = p(ss) * 0.999 + eps
# q中所采样本在q分布的概率密度
pp2 = norm.pdf(ss,loc=u,scale=sigma) * 0.999 + eps
dd = np.log(pp2)-np.log(pp1)
return dd.sum()/samplesize
最后更新于