《贝叶斯方法:概率编程与贝叶斯推断》——1.6 补充说明
本节书摘来异步社区《贝叶斯方法:概率编程与贝叶斯推断》一书中的第1章,第1.6节,作者:【加】Cameron Davidson-Pilon(卡梅隆 戴维森-皮隆),更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.6 补充说明 1.6.1 从统计学上确定两个λ值是否真的不一样在短信接收例子中,我们直观地观测了λ1和λ2的先验信息并认为它们是不同的。这很公平,毕竟先验的位置基本离得非常远。但如果这并不是真相,有一部分分布其实是重合的呢?我们怎么才能让上面的结论更加的正式呢?
一种方法就是计算出P(λ1 λ2|data),即在获得观察数据的前提下,λ1的真实值比λ2小的概率。如果这个概率接近50%,那相当于抛硬币得到的结果,这样我们就不能确定它们是否真的不同。如果这个概率接近100%,那么我们就能确定地说这两个值是不同的。利用后验中的样本,这种计算非常简单——我们计算λ1后验中的样本比λ2后验中的样本小的次数占比:
print (lambda_1_samples lambda_2_samples) # Boolean array: True if lambda_1 is less than lambda_2. [Output]: [ True True True True ..., True True True True]The vector abs(lambda_1_samples - lambda_2_samples) 1 is a boolean, True if the values are more than 1 apart, False otherwise. How often does this happen? Use .mean()
# The ratio is the probability. Or, we can just use .mean: print (lambda_1_samples lambda_2_samples).mean() [Output]: 0.9998``` 结果很显然,有几乎100%的把握可以说这两个值是不等的。 我们也可以再问详细一点,比如:“两个值之间相差1、2、5、10的概率有多大?”
for d in [1,2,5,10]:
v = (abs(lambda_1_samples - lambda_2_samples) = d).mean() print "What is the probability the difference is larger than %d\ ? %.2f"%(d,v)
[Output]:
What is the probability the difference is larger than 1? 1.00
What is the probability the difference is larger than 2? 1.00
What is the probability the difference is larger than 5? 0.49
What is the probability the difference is larger than 10? 0.00`
读者们或许会对前面模型中转折点个数的扩充,即如果不止一个转折点会怎么样感兴趣,或者会对只有一个转折点的结论表示怀疑。下面我们把模型扩充至两个转折点(意味着会出现3个λi)。新模型跟之前的比较相像。
我们把这个模型也编译成代码,跟前面的代码看上去差不多。
lambda_1 = pm.Exponential("lambda_1", alpha) lambda_2 = pm.Exponential("lambda_2", alpha) lambda_3 = pm.Exponential("lambda_3", alpha) tau_1 = pm.DiscreteUniform("tau_1", lower=0, upper=n_count_data-1) tau_2 = pm.DiscreteUniform("tau_2", lower=tau_1, upper=n_count_data) @pm.deterministic def lambda_(tau_1=tau_1, tau_2=tau_2, lamb-da_1=lambda_1, lambda_2=lambda_2, lambda_3 = lambda_3): out = np.zeros(n_count_data) # number of data points out[:tau_1] = lambda_1 # lambda before tau is lambda_1 out[tau_1:tau_2] = lambda_2 out[tau_2:] = lambda_3 # lambda after (and including) tau # is lambda_2 return out observa-tion = pm.Poisson("obs", lambda_, value=count_data,observed=True) mod-el = pm.Model([observation, lambda_1, lambda_2, lambda_3, tau_1, tau_2]) mcmc = pm.MCMC(model) mcmc.sample(40000, 10000)
图1.6.1展示了5个未知数的后验。我们可以看到模型的转折点大致在第45天和第47天的时候取得。对此你怎么认为呢?我们的模型是否对数据过拟合呢?
确实,我们都可能对数据中有多少个转折点抱有疑惑的态度。例如,我就认为一个转折点好过两个转折点,两个转折点好过三个转折点,以此类推。这意味着对于应该有多少个转折点可以设置一个先验分布并让模型自己做决定!在对模型进行调整之后,答案是肯定的,一个转折点确实比较适合。代码在本章就不展示了,这里我只是想介绍一种思想:用怀疑数据那样的眼光审视我们的模型。
《贝叶斯方法:概率编程与贝叶斯推断》——导读 贝叶斯方法是一种常用的推断方法,然而对读者来说它通常隐藏在乏味的数学分析章节背后。关于贝叶斯推断的书通常包含两到三章关于概率论的内容,然后才会阐述什么是贝叶斯推断。不幸的是,由于大多数贝叶斯模型在数学上难以处理,这些书只会为读者展示简单、人造的例子。
《贝叶斯方法:概率编程与贝叶斯推断》一导读 贝叶斯方法是一种常用的推断方法,然而对读者来说它通常隐藏在乏味的数学分析章节背后。关于贝叶斯推断的书通常包含两到三章关于概率论的内容,然后才会阐述什么是贝叶斯推断。不幸的是,由于大多数贝叶斯模型在数学上难以处理,这些书只会为读者展示简单、人造的例子。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- 学堂专栏推荐:Lua与C#高效共享大量数据的一种方法
- 关于大循环编程方法
- Python 安装第三方库,超时报错--Read timed out 的两种解决方法(pip)
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V3 -- 远程方法调用 整合 Spring
- 网络编程 -- RPC实现原理 -- RPC -- 迭代版本V2 -- 本地方法调用 整合 Spring
- 关于Date(int, int, int)‘ is deprecated的处理解决方法
- C#【通用方法】保存/打开 对话框+读取文本文件到字符串
- C#,码海拾贝(20)——一般实矩阵的奇异值分解(Singular Value Decomposition)方法之C#源代码,《C#数值计算算法编程》源代码升级改进版
- 找不到msvcr100.dll怎么办?三种方法教你
- 《多核与GPU编程:工具、方法及实践》----3.6 monitor
- vi全局替换方法
- 37 Java基础 总结 完结篇 知识串讲 Java语言初识 基础语法 流程控制 方法 数组 面向对象 内部类 异常 常用类 集合框架 IO流 多线程 网络编程 GUI 注解
- 敏捷方法之极限编程(XP)和 Scrum区别
- String类之endsWith方法--->检测该字符串以xx为结尾
- 《C++多线程编程实战》——1.4 结构化编程方法
- 《贝叶斯方法:概率编程与贝叶斯推断》一第1章 贝叶斯推断的哲学1.1 引言
- 《贝叶斯方法:概率编程与贝叶斯推断》一1.6 补充说明
- 《贝叶斯方法:概率编程与贝叶斯推断》——1.1 引言
- 《贝叶斯方法:概率编程与贝叶斯推断》——1.3 概率分布
- PCA原理分析和Matlab实现方法(三)
- 《PostgreSQL服务器编程》一一1.7 定制排序方法
- 减小 APK 大小的有效方法是在 Android Studio 中对静态内容使用 Gzip
- IO编程之writelines方法
- java中方法的递归调用
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
- nmon_analyser 在Aix平台的使用方法
- C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)
- html5中play 方法和pause方法在video的应用