有些情况下,我并不真正对贝叶斯推断的完整后验感兴趣,而只是最大可能性(或对于适当选择的先验的最大后验),并且可能是Hessian。 PyMC3有这样做的功能,但find_MAP
似乎返回转换形式的模型参数,取决于它们的先前分布。有没有一种简单的方法来从这些未转换的值? find_hessian
的输出对我来说更不明显,但它最有可能也在转换的空间中。使用PyMC3计算最大似然率
2
A
回答
1
可能是简单的解决方案将是传递参数transform=None
,避免PyMC3执行转换,然后使用find_MAP
我让你,比如一个简单的模型。
data = np.repeat((0, 1), (3, 6))
with pm.Model() as normal_aproximation:
p = pm.Uniform('p', 0, 1, transform=None)
w = pm.Binomial('w', n=len(data), p=p, observed=data.sum())
mean_q = pm.find_MAP()
std_q = ((1/pm.find_hessian(mean_q))**0.5)[0]
print(mean_q['p'], std_q)
您是否考虑过使用ADVI?
0
我再次遇到这个问题,并找到了从转换后的值中获取未转换值的方法。以防万一别人需要这样做。它的要点是未转换的值本质上是可以在给定转换后的值的情况下评估的表达式。通过提供Model.fn()
函数,PyMC3在这方面有所帮助,该函数创建了一个按名称接受值的评估函数。现在,您只需将未转换的感兴趣变量提供给outs
参数。一个完整的例子:
data = np.repeat((0, 1), (3, 6))
with pm.Model() as normal_aproximation:
p = pm.Uniform('p', 0, 1)
w = pm.Binomial('w', n=len(data), p=p, observed=data.sum())
map_estimate = pm.find_MAP()
# create a function that evaluates p, given the transformed values
evalfun = normal_aproximation.fn(outs=p)
# create name:value mappings for the free variables (e.g. transformed values)
inp = {v:map_estimate[v.name] for v in model.free_RVs}
# now use that input mapping to evaluate p
p_estimate = evalfun(inp)
outs
还可以接收的变量的列表,evalfun
然后将输出以相同的顺序对应的变量的值。
相关问题
- 1. 计算各种ngram的最大似然估计值
- 2. (PY)星火并行化最大似然法计算
- 3. 最大似然fminsearch
- 4. 计算最大小时费率?
- 5. pymc3条件确定性似然函数
- 6. 错误最大似然估计,使用R
- 7. 使用最大内存效率的增量中值计算
- 8. 计算最大
- 9. 使似然函数最大化
- 10. 计算最大功率,使结果在极限内
- 11. 计算总CPU使用率
- 12. 使用javascript计算div最大高度
- 13. 计算最大的一组使用jQuery
- 14. 最大CPU使用率
- 15. 含义在对数似然对数。最大化算法
- 16. 覆盖率最大化,最小化项目使用率的算法?
- 17. 在10.功率/计算/功率计算
- 18. 计算CPU使用率统计
- 19. SOFTMAX选择概率与PyMC3
- 20. 最大似然估计量的准确度
- 21. 最大似然估计器C/C++类库
- 22. 最大似然估计 - 比较两个分布
- 23. 概率包似乎计算错误条件概率?
- 24. 如何使用对数似然度量与数学公式计算相似度?
- 25. 如何计算的摄像头最大支持的帧速率定分辨率
- 26. 计算最大日期
- 27. 计算移动最大
- 28. 计算最大边数
- 29. 使用ns2计算链接利用率
- 30. 随机算法概率最大化
我有,但在我的情况下,模型很简单,MAP + hessian很好地描述了后验分布(它接近于正常)。 MAP + hessian比ADVI或MC-sampling要快得多。当然,这是滥用pymc3(通过不采样),但他们的模型规范是伟大的,我想保留采样的选项,以防模型/数据的变化导致更复杂的后验。 – burnpanck