贝叶斯思维:统计建模的Python学习法学习之道这本书以及Think系列其他书籍的一个前提是:只要懂得编程,你就能用这个技能去学习其他的内容 。
绝大多数贝叶斯统计的书使用数学符号并以数学概念的形式表示数学思想,比如微积分。但本书使用了Python代码而不是数学,离散近似而不是连续数学。结果就是原本需要积分的地方变成了求和,概率分布的大多数操作变成了简单的循环。
我认为这样的表述是易于理解的,至少对于有编程经验的人们来说是这样的。当作建模选择时也非常实用,因为我们可以选取最合适的模型而不用担心偏离常规分析太多。
另外,这也提供了一个从简化模型到真实问题的平滑发展路线,第3章就是一个好示例。它由一个关于骰子的简单例子开始,那是基本概率的一个主题;紧接着谈到了一个我从Mosteller《50个挑战的统计学难题》(Fifty Challenging Problems in Probability)一书中借用的火车头问题;最后是德军坦克问题,这个第二次世界大战中成功的贝叶斯方法应用案例。
建模和近似本书中多数章节的灵感都是由真实世界里的问题所激发的,所以涉及了一些建模知识,在应用贝叶斯方法(或者其他的分析方法)前,我们必须决定真实世界中的哪些部分可以被包括进模型,而哪些细节可以被抽象掉。
例如,第7章中那个预测冰球比赛获胜队伍的例子,我将进球得分建模为一个泊松过程,这预示着在比赛的任何时段进球机会都是相等的,这并不完全符合实际情况,但就大多数目的来说可能就够了。
第12章中,问题是对SAT得分进行解释(SAT是用于全美大学的入学标准测试)。我以一个假设所有SAT试题难度相同的简化模型开始,但其实SAT的试题设计中既包括了相对容易,也包括了相对较难的试题。随后提出了第二个反映这一设计目的的模型,结果显出两个模型在最终效果上没有大的差别。
我认为在解决问题的过程中,明确建模过程作为其中一部分是重要的,因为这会提醒我们考虑建模误差(也就是建模当中简化和假设带来的误差)。
本书中的很多方法都基于离散分布,这让一些人担心数值误差,但对于真实世界的问题,数值误差几乎从来都小于建模误差。
再者,离散方法总能允许较好的建模选择,我宁愿要一个近似的良好的模型也不要一个精确但却糟糕的模型。
从另一个角度看,连续方法常在性能上有优势,比如能以常数时间复杂度的解法替换掉线性或者平方时间复杂度的解法。
总的来说,我推荐这些步骤的一个通用流程如下。
1.当研究问题时,以一个简化模型开始,并以清晰、好理解、实证无误的代码实现它。注意力集中在好的建模决策而不是优化上。
2.一旦简化模型有效,再找到最大的错误来源。这可能需要增加离散近似过程当中值的数量,或者增加蒙特卡洛方法中的迭代次数,或者增加模型细节。
3.如果对你的应用而言性能就已经足够了,则没必要再优化。但如果要做,有两个方向可以考虑:评估你的代码以寻找优化空间,例如,如果你缓存了前面的计算结果,你也许能避免重复冗余的计算;或者可以去发现找到计算捷径的分析方法。
这一流程的好处是第一、第二步较快,所以你能在投入大量精力前研究多个可替代的模型。
另一个好处是在第三步,你可以从一个大体正确的可参考实现开始进行回归测试。也就是,检查优化后的代码是否得到了同样的结果,至少是近似的结果。
第1章 贝叶斯定理 1.1 条件概率1.2 联合概率1.3 曲奇饼问题1.4 贝叶斯定理1.5 历时诠释1.6 M&M豆问题1.7 Monty Hall难题1.8 讨论第2章 统计计算 2.1 分布2.2 曲奇饼问题2.3 贝叶斯框架2.4 Monty Hall难题2.5 封装框架2.6 M&M豆问题2.7 讨论2.8 练习第3章 估计第4章 估计进阶第5章 胜率和加数第6章 决策分析第7章 预测第8章 观察者的偏差第9章 二维问题第10章 贝叶斯近似计算第11章 假设检验第12章 证据第13章 模拟第14章 层次化模型第15章 处理多维问题作者简介译者简介关于封面译后记
相关资源:《贝叶斯思维:统计建模的Python学习法》(Think Bayes)的高清电子书和代码