pyprobml
probml/pyprobml加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你买了一本厚达 864 页的机器学习神书《Probabilistic Machine Learning》,翻到第 7 章关于变分推断的公式时,作者 Kevin Murphy 贴心地告诉你:"点击这里运行代码"。你一点击,浏览器里立刻跑出了一个变分自编码器的训练过程,所有参数都能改、所有步骤都能看——这就是 pyprobml 存在的意义。
pyprobml 是 Kevin Murphy 教授两卷本《Probabilistic Machine Learning》的官方配套代码库,目前在 GitHub 上已收获超过 7000 颗星。这个项目不是简单的"课后习题答案",而是覆盖了从线性回归到变分推断、从监督学习到因果发现的完整知识图谱,每一段代码都可以单独运行、修改、再实验。
图 1:《Probabilistic Machine Learning》书籍封面(MIT Press 出版)
要理解 pyprobml 为什么值得关注,首先要认识它的作者 Kevin Murphy。Kevin Murphy 是 Google Research 的研究科学家,此前在加州大学伯克利分校任教多年。他的学术生涯几乎见证了整个现代机器学习的发展历程——从经典的贝叶斯方法,到概率图模型,再到深度学习与概率编程的融合。
2022 年,Kevin Murphy 出版了《Probabilistic Machine Learning: An Introduction》,迅速成为领域内的标杆教材。这本书的独特之处在于它用"概率建模"这根红线,将传统机器学习(如线性模型、决策树)和现代深度学习(如神经网络、注意力机制)串联起来,给读者一个统一视角。Geoff Hinton、Daphne Koller、Chris Bishop 等顶级学者都为此书撰写了推荐语。
pyprobml 的代码正是服务于这本书的。每一张图(figure)旁边都有一个链接,指向对应的 Jupyter Notebook,读者可以直接在 Google Colab 中一键运行。Book 1 覆盖监督学习、无监督学习、概率模型基础;Book 2 则深入变分推断、因果推断、强化学习等高级主题。
pyprobml 不是一个"只能用一种框架"的代码库。Book 1 主要使用 NumPy、SciPy、Matplotlib、scikit-learn 等经典 Python 科学计算库,确保代码直观易懂。Book 2 则引入了 JAX(Google 的自动微分框架)和 TensorFlow 2,部分章节也用到 PyTorch。
这种"多框架并行"的策略有深意:同一个算法,用 NumPy 实现一遍帮助理解原理,用 JAX 实现一遍展示如何在大规模数据上高效运行。这种对比方式让学生既能理解底层逻辑,又能掌握工程实践。JAX 的核心优势在于其函数式编程风格和 XLA 编译,在 GPU/TPU 上可以获得极高的计算吞吐量。
项目还依赖 ArviZ(贝叶斯模型诊断)、NumPyro(Pyro 的 NumPy 后端)、BlackJAX(概率编程加速)等专业库,形成了完整的贝叶斯机器学习工具链。
pyprobml 的代码组织非常有特色——不是传统的 Python 包结构,而是以 Jupyter Notebook 为主。每个 Notebook 对应书中的一节,文件命名遵循 book{N}/chapterNN_NN_name.ipynb 的格式。例如 book1/figure_10_15.ipynb 就对应 Book 1 第 10 章第 15 张图。
pyprobml/
├── notebooks/
│ ├── book1/ # 约 400+ 个 Notebook,对应 Book 1 各章节
│ ├── book2/ # Book 2 进阶内容
│ ├── tutorials/ # Colab 入门教程
│ └── figures/ # 输出图片
├── scripts/ # 辅助脚本
├── tests/ # pytest 测试
└── requirements.txt
项目使用 GitHub Actions 进行持续集成,确保每个 Notebook 在推送后都能正常执行。开发者还维护了两个 Dashboard(Book 1 Dashboard 和 Book 2 Dashboard),追踪每个 Notebook 的运行状态。
对于大多数用户来说,"在浏览器里点一下就跑"是最友好的体验。pyprobml 提供了几种运行方式:
方式一(推荐):Google Colab
在 GitHub 上打开任意 Notebook,将域名从 github.com 改为 githubtocolab.com,即可在 Colab 中打开。Colab 预装了大部分依赖,还提供免费的 GPU/TPU 算力。项目中自带一个 Colab 入门教程,手把手教新人配置环境。
方式二:pip 安装
pip install -r https://raw.githubusercontent.com/probml/pyprobml/master/requirements.txt
方式三:本地 Jupyter
克隆仓库后安装依赖,在本地启动 Jupyter Lab 逐个运行 Notebook。
值得注意的是,项目自 2022 年 9 月起进入"维护模式"(maintenance mode),不再大幅新增内容,但会持续修复 Bug 和兼容性问题。这意味着代码库已经相当稳定,不是"正在快速迭代中的实验性项目"。
pyprobml 也存在一些需要了解的局限:
无容器化支持:项目没有提供 Dockerfile 或 docker-compose,无法一键部署到服务器。对于需要在私有集群上运行的用户,需要自行编写 Dockerfile,基于 Python 3.8+ 镜像安装 requirements.txt。
GPU 依赖:Book 2 中大量使用 JAX/TensorFlow,若无 NVIDIA GPU(推荐 CUDA 12+),运行会非常缓慢。CPU 模式下某些 Notebook 耗时可达数小时。
Colab 独占策略:很多 Notebook 假设运行在 Google Colab 环境中,包含 %pip install 等 magic 命令,直接在本地运行可能需要修改。
中文资料较少:目前项目的文档和讨论主要以英文为主,对中文用户有一定门槛。
pyprobml 的核心贡献不只是"提供了代码",而是建立了一座从理论到实践的桥梁。在机器学习领域,教科书和实际代码之间往往存在巨大鸿沟——书上的公式推算了 10 行,代码实现可能需要 200 行,中间还夹杂着各种工程 trick。pyprobml 弥合了这个鸿沟,让读者可以边学理论边做实验。
从更宏观的角度看,pyprobml 代表了"可复现机器学习研究"(Reproducible ML Research)的最佳实践。Kevin Murphy 团队不仅出版教材,还提供完整的代码、数据、运行状态追踪。这种开放态度对整个社区的教学和科研都有深远影响——目前已有数十所高校在教学中使用这本书和配套代码。
pyprobml 是概率机器学习领域最权威的实践资源之一。它配套 Kevin Murphy 的两卷本教材,以 Jupyter Notebook 为载体,覆盖从基础统计到前沿变分推断的完整知识体系。多框架支持(JAX/TensorFlow/PyTorch/scikit-learn)让不同背景的开发者都能上手。虽然不支持一键容器化部署,但 Google Colab 的免费算力和傻瓜式运行方式弥补了这一不足。推荐所有想系统学习概率机器学习的人——无论是高校学生、研究者还是工程师——都将 pyprobml 作为必读资源。
项目数据来源:GitHub (probml/pyprobml),截至 2026 年 9 月,约 7139 Stars,MIT 许可证。