描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302654858丛书名: 数据科学与大数据技术
《Python贝叶斯建模与计算》旨在帮助贝叶斯初学者成为中级从业者。本书使用了PyMC3、TensorFlow Probability和Arviz等多个软件库的实践方法,重点是应用统计学的实践方法,并参考了基础数学理论。
《Python贝叶斯建模与计算》旨在帮助贝叶斯初学者成为中级从业者。本书使用了PyMC3、TensorFlow Probability和Arviz等多个软件库的实践方法,重点是应用统计学的实践方法,并参考了基础数学理论。
本书首先回顾了贝叶斯推断的概念。第2章介绍了贝叶斯模型探索性分析的现代方法。基于这两个基本原理,接下来的章节介绍了各种模型,包括线性回归、样条、时间序列和贝叶斯加性回归树。其后几章讨论的主题包括:逼近贝叶斯计算,通过端到端案例研究展示如何在不同环境中应用贝叶斯建模,以及概率编程语言内部构件。最后一章深入讲述数学理论或扩展对某些主题的讨论,作为本书其余部分的参考。
《Python贝叶斯建模与计算》由PyMC3、ArviZ、Bambi和TensorFlowProbability等软件库的贡献者撰写。
第1章 贝叶斯推断 1
1.1 贝叶斯建模 1
1.1.1 贝叶斯模型 2
1.1.2 贝叶斯推断介绍 2
1.2 一个自制采样器,不要随意尝试 5
1.3 支持自动推断,反对自动建模 9
1.4 量化先验信息的方法 12
1.4.1 共轭先验 13
1.4.2 客观先验 15
1.4.3 最大熵先验 17
1.4.4 弱信息先验与正则化先验 20
1.4.5 先验预测分布用于评估先验选择 21
1.5 练习 21
第2章 贝叶斯模型的探索性分析 25
2.1 贝叶斯推断前后的工作 25
2.2 理解你的假设 26
2.3 理解你的预测 28
2.4 诊断数值推断 32
2.4.1 有效样本量 33
2.4.2 潜在尺度缩减因子( ) 35
2.4.3 蒙特卡罗标准差 35
2.4.4 轨迹图 37
2.4.5 自相关图 38
2.4.6 秩图 38
2.4.7 散度 40
2.4.8 采样器的参数和其他诊断方法 42
2.5 模型比较 43
2.5.1 交叉验证和留一法 44
2.5.2 对数预测密度的期望 47
2.5.3 帕累托形状参数 47
2.5.4 解读帕累托参数 较大时的p_loo 48
2.5.5 LOO-PIT 49
2.5.6 模型平均 50
2.6 练习 51
第3章 线性模型与概率编程语言 55
3.1 比较两个或多个组 55
3.2 线性回归 63
3.2.1 一个简单的线性模型 65
3.2.2 预测 67
3.2.3 中心化处理 68
3.3 多元线性回归 70
3.4 广义线性模型 74
3.4.1 逻辑回归 75
3.4.2 分类模型 76
3.4.3 解释对数赔率 81
3.5 回归模型的先验选择 82
3.6 练习 85
第4章 扩展线性模型 87
4.1 转换预测变量 87
4.2 可变的不确定性 90
4.3 引入交互效应 91
4.4 鲁棒的回归 93
4.5 池化、多级模型和混合效应 97
4.5.1 非池化参数 98
4.5.2 池化参数 100
4.5.3 组混合与公共参数 102
4.6 分层模型 104
4.6.1 后验几何形态很重要 107
4.6.2 分层模型的优势 112
4.6.3 分层模型的先验选择 114
4.7 练习 114
第5章 样条 117
5.1 多项式回归 117
5.2 扩展特征空间 118
5.3 样条的基本原理 120
5.4 使用Patsy软件库构建设计矩阵 123
5.5 用PyMC3拟合样条 125
5.6 选择样条的结点和先验 127
5.7 用样条对二氧化碳吸收量建模 129
5.8 练习 134
第6章 时间序列 137
6.1 时间序列问题概览 137
6.2 将时间序列分析视为回归问题 138
6.2.1 时间序列的设计矩阵 143
6.2.2 基函数和广义加性模型 144
6.3 自回归模型 147
6.3.1 隐AR过程和平滑 152
6.3.2 (S)AR(I)MA(X) 154
6.4 状态空间模型 157
6.4.1 线性高斯状态空间模型与卡尔曼滤波 158
6.4.2 ARIMA模型的状态空间表示 161
6.4.3 贝叶斯结构化的时间序列 164
6.5 其他时间序列模型 168
6.6 模型的评判和先验选择 168
6.7 练习 170
第7章 贝叶斯加性回归树 173
7.1 决策树 173
7.2 BART模型 176
7.3 BART模型先验 177
7.3.1 先验的独立性 177
7.3.2 树结构 的先验 177
7.3.3 叶结点值μij和树数量m的先验 178
7.4 拟合贝叶斯加性回归树 178
7.5 自行车数据的BART模型 178
7.6 广义BART模型 180
7.7 BART的可解释性 181
7.7.1 部分依赖图 182
7.7.2 个体条件期望图 183
7.8 预测变量的选择 185
7.9 PyMC3中BART的先验选择 187
7.10 练习 188
第8章 逼近贝叶斯计算 191
8.1 超越似然 191
8.2 逼近的后验 192
8.3 用ABC逼近拟合一个高斯 194
8.4 选择距离函数、?和统计量 195
8.4.1 选择距离函数 196
8.4.2 选择? 197
8.4.3 选择统计量 199
8.5 g-and-k分布 199
8.6 逼近移动平均 203
8.7 在ABC场景中做模型比较 205
8.7.1 边际似然与LOO 205
8.7.2 模型选择与随机森林 209
8.7.3 MA模型的模型选择 209
8.8 为ABC选择先验 211
8.9 练习 211
第9章 端到端贝叶斯工作流 213
9.1 工作流、上下文和问题 213
9.2 获取数据 216
9.2.1 抽样调查 216
9.2.2 试验设计 216
9.2.3 观察性研究 216
9.2.4 缺失数据 217
9.2.5 应用示例:收集航班延误数据 217
9.3 构建不止一个模型 218
9.3.1 在构建贝叶斯模型前需要问的问题 218
9.3.2 应用示例:选择航班延误的似然 218
9.4 选择先验和预测先验 220
9.5 推断和推断诊断 222
9.6 后验图 223
9.7 评估后验预测分布 224
9.8 模型比较 225
9.9 奖励函数和决策 228
9.10 与特定受众分享结果 230
9.10.1 分析流程的可重复性 231
9.10.2 理解受众 232
9.10.3 静态视觉辅助 233
9.10.4 可重复的计算环境 234
9.10.5 应用示例:展示航班延误模型和结论 234
9.11 试验性示例:比较两个组 235
9.12 练习 239
第10章 概率编程语言 241
10.1 PPL的系统工程视角 241
10.2 后验计算 242
10.2.1 计算梯度 243
10.2.2 示例:近实时推断 244
10.3 应用编程接口 245
10.3.1 示例:Stan和Slicstan 246
10.3.2 示例:PyMC3和PyMC4 247
10.4 PPL驱动的转换 248
10.4.1 对数概率 248
10.4.2 随机变量和分布转换 250
10.4.3 示例:有界和无界随机变量之间的采样比较 251
10.5 操作图和自动重参数化 252
10.6 异常处理 255
10.7 基础语言、代码生态系统、模块化 257
10.8 设计PPL 258
10.9 应用贝叶斯从业者的注意事项 265
10.10 练习 265
第11章 附加主题 267
11.1 概率背景 267
11.1.1 概率 268
11.1.2 条件概率 269
11.1.3 概率分布 270
11.1.4 离散随机变量及其分布 271
11.1.5 连续随机变量和分布 275
11.1.6 联合、条件和边际分布 279
11.1.7 概率积分转换 282
11.1.8 期望 284
11.1.9 转换 285
11.1.10 极限 286
11.1.11 马尔可夫链 288
11.2 熵 290
11.3 Kullback-Leibler散度 292
11.4 信息标准 294
11.5 深入介绍LOO 296
11.6 Jeffrey先验求导 297
11.6.1 关于θ的二项似然的Jeffrey先验 298
11.6.2 关于 的二项似然的Jeffrey先验 299
11.6.3 二项似然的Jeffrey后验 299
11.7 边际似然 300
11.7.1 调和平均估计器 300
11.7.2 边际似然和模型比较 301
11.7.3 贝叶斯因子与WAIC和LOO 303
11.8 移出平面 304
11.9 推断方法 307
11.9.1 网格方法 307
11.9.2 Metropolis-Hastings 308
11.9.3 哈密顿蒙特卡罗 310
11.9.4 序贯蒙特卡罗 314
11.9.5 变分推断 315
11.10 编程参考 317
11.10.1 选择哪种编程语言 317
11.10.2 版本控制 317
11.10.3 依赖项管理和包仓库 317
11.10.4 环境管理 318
11.10.5 文本编辑器、集成开发环境、笔记 318
11.10.6 本书使用的专用工具 319
词汇表 321
参考文献(在线提供) 325
贝叶斯统计这个名字取自长老会牧师兼业余数学家托马斯·贝叶斯(Thomas Bayes,1702—1761),他最先推导出了贝叶斯定理,该定理于其逝世后的1763年发表。但真正开发贝叶斯方法的第一人是Pierre-Simon Laplace(1749—1827),因此将其称为拉普拉斯统计也许更合理。尽管如此,我们将遵循斯蒂格勒的同名法则,在本书的其余部分使用传统的贝叶斯方法命名。从贝叶斯和拉普拉斯(以及许多其他人)的开创性时代至今,发生了很多事情,特别是开发了很多新想法,其中大部分是由计算机技术推动和/或实现的。本书旨在提供一个关于此主题的现代视角,涵盖从基础知识到使用现代贝叶斯工作流和工具等各方面内容。
本书旨在帮助贝叶斯初学者成为中级从业者。这并不代表你读完本书后会自动达到中等水平,但希望本书能够引导你朝富有成效的方向发展。如果你通读这本书,认真做练习,把书中的想法应用于自己的问题,并继续向他人学习,那么将更容易进步。
要特别指出,本书面向对应用贝叶斯模型解决数据分析问题感兴趣的贝叶斯从业者。通常,学术界和工业界是有区别的。但本书没有做这样的区分,因为无论是大学生还是就职于公司的机器学习工程师,都能从本书中受益。
我们的目标是:阅读本书后,你不仅能够熟悉贝叶斯推断,而且能轻松地对贝叶斯模型进行探索性分析,包括模型比较、模型诊断、模型评估和结果交流等。我们计划从现代计算的角度讲授这些内容。对我们来说,如果采用计算方法,贝叶斯统计会更易于理解和应用。例如,我们更关注实证检查假设被推翻的原因,而不试图从理论上证明假设是正确的。这也意味着我们会使用许多可视化的表达手段。通读后,建模方法的其他含义将会逐步变得清晰。
如本书标题所表明的,书中使用Python编程语言。更具体地说,本书将主要使用PYMC3[138]和TensorFlow Probability(TFP)[47]作为模型构建和推断的主要概率编程语言(PPL),并使用ArviZ作为探索性分析贝叶斯模型的主要软件库[91]。本书并未对所有Python PPL进行详尽评述和比较,因为选择较多而且发展迅速。反之,我们专注于贝叶斯分析的实践方面。编程语言和软件库只是用于达到目的的手段。
虽然本书选择的编程语言是Python及少量软件库,但书中涵盖的统计和建模概念基本与编程语言和软件库无关,可以应用于许多计算机编程语言,如R、Julia和Scala等。因此,虽不了解Python但掌握上述编程语言的读者,也可以从本书中受益。当然,如果能够在自身熟悉的编程语言中找到等效的软件库或代码进行实践则最好。此外,我们鼓励将本书中的Python示例代码转换为其他编程语言或框架。有意者请与我们联系。
知识准备
为使本书帮助初学者向中级从业者转变,希望读者能事先接触乃至掌握贝叶斯统计的基本概念(如先验、似然和后验),以及一些基本统计概念(如随机变量、概率分布、期望等)。对于技艺生疏的读者,第11章回顾了基本统计概念。有关这些概念的更深入解释,参见Understanding Advanced Statistical Methods[158]和Introduction to Probability[21]。后者更具理论性,但两者都比较重视应用。
如果你因实践或训练对统计学有很好的理解,但从未接触过贝叶斯统计学,也可以将本书作为对该主题的入门读物,只是开始几章(主要是前两章)的节奏会有点快,可能需要通读数次。
我们希望你能够熟悉一些数学概念,如积分、导数和对数的性质等,写作水平最好能够达到技术高中或者科学、技术、工程和数学专业的大学第一学年以上的水平。若需要复习这些数学概念,推荐3Blue1Brown的系列视频。这里不要求做过多数学练习,但要求使用代码和交互式计算环境来理解和解决问题。本书中出现数学公式是为了帮助你更好地理解贝叶斯统计建模。
本书假定读者具备一定的计算机编程能力。使用Python语言时,还会使用一些专门的软件库,特别是概率编程语言。在阅读本书之前,至少利用概率编程语言拟合一个模型,对你会有帮助,但也不是必须的。关于如何设置本书所需要的计算环境或Python参考,可以阅读GitHub中的README.md,了解如何设置编码环境。
阅读方法
我们将使用模拟模型来解释一些重要概念,而不会让数据模糊了主要概念;然后使用真实数据集来近似一些实践中会面临的真实问题,如采样问题、重参数化、先验/后验校准等。鼓励你阅读本书时,在交互式编程环境中运行这些模型。
强烈建议你阅读并使用各种软件库的在线文档。尽管我们已经尽最大努力使本书涵盖海量信息,从而自成一体,但在网上还有大量关于这些工具的文档,参考这些文档有助于学习本书,并帮助你独立使用这些工具。
第1章回顾、简介贝叶斯推断中的基本和核心概念。该章中的概念将在本书其余部分被反复提及和应用。
第2章介绍了贝叶斯探索性分析(Exploratory Analysis of Bayesian)模型。介绍了许多属于贝叶斯工作流但并非推断本身的概念。该章中的概念将在本书其余部分被反复应用和提及。
第3章开始介绍特定模型架构。介绍了线性回归(Linear Regression)模型,并为接下来的5章奠定了基础。第3章还全面介绍了本书使用的主要概率编程语言:PyMC3和TFP。
第4章扩展了线性回归模型,并讨论了更高级的主题,如鲁棒回归、分层模型和模型重参数化。本章使用PyMC3和TFP。
第5章介绍了基函数,并着重介绍了线性模型的扩展——样条,使我们能够构建更灵活的模型。本章使用PyMC3。
第6章侧重于时间序列模型,包括从时间序列建模为回归模型,以及更复杂的模型[如ARIMA和线性高斯状态空间(Gaussian State Space)模型]等内容。本章使用TFP。
第7章介绍了名为贝叶斯加性回归树的非参数模型。本章讨论了这个模型的可解释性和变量的重要性。本章使用PyMC3。
第8章聚焦于逼近贝叶斯计算(Approximate Bayesian Computation,ABC)框架,该框架有助于解决没有明确似然函数的问题。本章使用PyMC3。
第9章概述了端到端的贝叶斯工作流。本章展示了商业应用中的观测性研究和科研环境中的试验性研究。本章使用PyMC3。
第10章深入探讨了概率编程语言,展示了各种不同的概率编程语言。
第11章为阅读其他章节提供辅助,各主题之间相关度不高,因此可以有选择地阅读。
强调内容
本书对文本突出强调的方式是用粗体。粗体文本表示强调新概念或概念的重点。当提到特定代码时,也会突出显示,如pymc3.sample。
代码
书中的代码块用阴影框标记,左侧带有行号,并使用章节编号后跟代码块编号进行引用,如代码清单0.1所示。
代码清单0.1
1 for i in range(3):
2 print(i**2)
0
1
4
每次看到代码块时都会想查看运行结果。结果通常体现为一张图、一个数字、一份代码输出或一个表格。反之,书中大部分图都有相关的代码,有时会省略一些代码以节省篇幅,但你可以在GitHub库(https://github.com/BayesianModelingandComputationInPython)中访问完整代码。该库还包括一些用于练习的附加材料。其中的笔记还可能包含其他图、代码或输出,这些内容未出现在书中但用于开发书中所见模型。GitHub中还包含说明,指导如何根据已有设备创建标准计算环境。
方框
本书使用方框简要提及重要的统计、数学或(Python)编程概念。书中还会提供参考资料,供你继续学习相应主题。
中心极限定理(Central Limit Theorem)
在概率论中,中心极限定理规定:在某些情况下,添加独立随机变量时,即使原始变量本身不呈正态分布,但它们的适当归一化总和也会趋于正态分布。
设X1,X2,X3,…独立同分布,平均值为μ,标准差为σ。当n →∞时,有:
Introduction to Probability [21]一书介绍了许多概率基础理论,可用于实践。
代码导入
在本书中,导入Python包时使用代码清单0.2所示的约定。
代码清单0.2
1 # 基本的
2 import numpy as np
3 from scipy import stats
4 import pandas as pd
5 from patsy import bs, dmatrix
6 import matplotlib.pyplot as plt
7
8 # 贝叶斯模型探索性分析
9 import arviz as az
10
11 # 概率编程语言
12 import bambi as bmb
13 import pymc3 as pm
14 import tensorflow_probability as tfp
15
16 tfd = tfp.distributions
17
18 # 计算后端
19 import theano
20 import theano.tensor as tt
21 import tensorflow as tf
本书还会使用ArviZ样式:az.style.use(“arviz-grayscale”)。
由于本书是黑白印刷,本书中的彩图为方便读者阅读,以彩插形式放在封底二维码,读者可自行下载。
与本书互动
本书的受众不是贝叶斯读者,而是贝叶斯从业者。我们将提供材料,帮助练习贝叶斯推断和贝叶斯模型探索性分析。由于利用计算和代码是现代贝叶斯从业者所需要的核心技能,因此将提供示例,以供你在多次尝试中建立思维。对于本书代码,我们期望你阅读、执行、修改,并再次执行多次。我们只能在本书中展示有限示例,但你可以使用计算机自己制作无数的示例。通过这种方式,你不仅可以学习统计概念,还可以学习如何使用计算机将这些概念应用于实践。
计算机还将使你摆脱印刷文本的限制,例如缺乏颜色、缺乏动画和并排比较。现代贝叶斯从业者利用监视器和快速可计算“双重检查”提供的灵活性,本书专门创建了示例以允许相同级别的交互性。每章的末尾都设有练习,用于测试学习和实践成果。练习按难易程度标记为简单(E)、中等(M)和困难(H),可根据需要酌情解答。
本书参考文献可下载封底二维码获取。
致谢
感谢我们的朋友和同事,他们牺牲了大量时间和精力来阅读早期书稿,提出了建设性的反馈,帮助我们改进了本书,也帮助我们修复了书中的许多错误。非常感谢:
Oriol Abril-Pla、Alex Andorra、Paul Anzel、Dan Becker、Tomás Capretto、Allen Downey、Christopher Fonnesbeck、Meenal Jhajharia、Will Kurt、Asael Matamoros、Kevin Murphy以及Aki Vehtari。
评论
还没有评论。