- 机器学习
- 深度学习
【免费下载链接】pyprobml
Python code for "Probabilistic Machine learning" book by Kevin Murphy
本文是 pyprobml 项目(《Probabilistic Machine Learning》一书的 Python 代码仓库)中 python_tutorials.md 的技术导读,围绕"如何学习 Python 与机器学习软件生态、如何在 Notebook 与 IDE 之间选择开发环境"展开。读完本文,你将获得一条从零上手 Python、掌握数据科学/ML 核心库、并能在 Colab 或本地 IDE 中运行 pyprobml 代码的完整路线图。
这份文档在 pyprobml 中的角色
pyprobml 仓库的代码按 notebooks/README.md 的组织约定分为三类:book1、book2目录存放与两本书章节对应的绘图 Notebook;tutorials目录存放与软件使用相关的教学 Notebook,与书本内容解耦;misc则是零散草稿。本文主角 python_tutorials.md 正是 tutorials 目录的入口文档之一,它与 software.md、jax_tutorials.md 一起构成了项目的"软件上手三件套":一份讲 Python/编辑器的入门资源,一份讲完整软件生态,一份专讲 JAX。
换句话说:仓库里 800 多个脚本和 Notebook 都建立在 Python 3 及一套数据科学/深度学习/概率编程工具链之上(README.md 明确说明代码使用 numpy、scipy、matplotlib、sklearn 等标准库,book 2 大量使用 JAX,book 1 部分使用 TensorFlow 2 和少量 PyTorch)。因此在深入复现任何公式、任何图之前,先建立正确的软件认知与开发环境是最高效的路径——这正是本指南存在的意义。
Python 学习资源路线图
原文档按"入门 → 数据科学 → 统计计算 → 可视化 → 高级工具"的顺序精选了 10 份资源,每份都有明确的适用场景。下表完整继承其推荐清单,并按仓库实际技术栈补充了学习重点:
| 资源 | 作者/性质 | 学习重点 |
|---|---|---|
| Dive into Python 3 | Mark Pilgrim 撰写的免费电子书 | 系统学习 Python 3 语言本身,适合零基础通读 |
| Fluent Python | Luciano Ramalho 的专著 | Python 语言进阶,深入理解数据模型、容器与惯用法 |
| Whirlwind tour of Python | Jake Vanderplas | 快速概览 Python 语法,适合有编程经验者快速热身 |
| Python Datascience Handbook | Jake Vanderplas 的免费书 | 数据科学全景:NumPy、Pandas、Matplotlib、Scikit-learn 四大件的标准用法 |
| Datascience from scratch | O'Reilly 出版 | 用最简 Python 代码从零实现标准 ML 方法,帮助理解算法本质而非调包 |
| Duke 的 BIOS821 课程 | Duke 大学公开课 | 用 Python 做数据分析的入门课 |
| Duke 的 STA663 课程 | Duke 大学公开课 | Python 统计计算,覆盖高性能数值计算实践 |
| scipy-lectures | 社区维护的 SciPy 教程 | SciPy 生态(数值、优化、统计)系统教程 |
| Book on matplotlib | Rougier 的可视化书 | 数据可视化,与仓库中大量 matplotlib 出图代码直接呼应 |
| JAX | Google 开源的数值库 | 加速版 NumPy + 自动微分,是 pyprobml book 2 的主力计算后端 |
从仓库源码结构看,这条学习路线与实际代码需求高度吻合:例如 scripts/gauss_utils.py、scripts/mix_gauss_lib.py 等脚本大量依赖 NumPy/SciPy 的矩阵运算与 SciPy 优化器,而 book 2 的hmc_2d_numpyro.py、linreg_bayes_svi_hmc_pyro.ipynb等则直接建立在 JAX/NumPyro 之上。因此"先学语言、再学数据科学栈、最后学 JAX 生态"的次序与仓库代码的演进方向一致。
Notebook 与 IDE:两种开发工作流的取舍
原文档用一段精炼的对比回答了初学者最常见的困惑:什么时候用 Notebook,什么时候用 IDE。
交互式开发:Jupyter / Google Colab
Notebook 的核心特征是"代码与结果混排",非常适合数据探索、公式推导和图谱复现。pyprobml 的官方实践是使用Google Colab:它免费提供 GPU/TPU,且预装了几乎所有需要的库。这一点在 requirements.txt 中写得很清楚——文件头注释"add only those modules/libraries that are pre-installed in colab",其中包含 jax、jaxlib、numpy、scipy、matplotlib、seaborn、scikit-learn、pandas、graphviz、arviz、pyyaml、h5py、requests 等。
仓库 README.md 给出了两个免安装本地环境的实用技巧:把 GitHub 上的 Notebook 页面域名从github.com改成githubtocolab.com即可在任意浏览器中直接以 Colab 打开;或安装 "Open in Colab" 浏览器扩展一键完成同样操作。tutorials 目录里的 colab_intro.ipynb 专门讲解 Colab 的使用细节。
工程化开发:IDE 的适用场景
原文档指出:当开发规模较大的软件项目时,应改用 IDE 将代码与运行结果分离。它列出的候选包括:
- JupyterLab:浏览器化的 IDE,适合延续 Notebook 习惯的用户;
- Spyder:面向科学计算的 Python IDE;
- PyCharm:JetBrains 出品的通用 Python IDE;
- VS Code:轻量编辑器,最大优势是支持本地编辑、远程虚拟机执行。
"本地编辑 + 远程执行"这条工作流在仓库中有完整的落地文档:gcp_ssh_vscode.md 演示了如何通过 SSH 从 VS Code 连接 GCP 虚拟机(如 Cloud TPU VM):点击左下角绿色图标新建 SSH Host,输入username@ip-address即可连接,之后可以克隆仓库、在 IDE 中编辑代码,并直接在 VS Code 内打开 Jupyter Notebook 做交互式开发。文档还给出了两个关键技巧:
- 在 Notebook 中执行
%run foo.py运行脚本文件,脚本产生的全部全局变量会直接进入 Notebook 命名空间,方便继续交互调试; - 在 VS Code 内启动 TensorBoard,由编辑器自动处理端口转发。
从文档到落地:pyprobml 的软件栈全景
将原文档的"软件学习"主题落到仓库实际,就是 software.md 所勾勒的三层生态:
数据科学与 ML 基础层
| 库 | 用途 |
|---|---|
| NumPy | 向量与矩阵计算 |
| SciPy | 科学计算、数学、统计、优化函数 |
| Matplotlib / Seaborn | 绘图 |
| Pandas / Xarray | 数据框与带名数组 |
| Scikit-learn | 除深度学习外的大量 ML 方法 |
| JAX | 加速版 NumPy + 自动微分 |
tutorials 目录为其中每一层都配了实战 Notebook:pandas_intro.ipynb、sklearn_intro.ipynb、einsums.ipynb(张量缩并记号)、graphviz_demo.ipynb(绘图/图模型可视化)。requirements.txt 中列出的 seaborn、graphviz、arviz(贝叶斯后验可视化)也与这一层直接对应。
深度学习层
software.md 把深度学习概括为"可微分函数组合 + 自动微分 + 优化器训练 + 服务部署",并列出 TensorFlow 2、JAX、PyTorch、MXNet 四大框架;仓库主体采用 TensorFlow 2 与 JAX,也欢迎 PyTorch 贡献。对应的教程资源包括:jax_intro.ipynb(Kevin Murphy 的 JAX 入门)、practical_jax_tips.ipynb(JAX 实战技巧)、haiku_intro.ipynb(DeepMind 的 DNN 库 Haiku)、text_preproc_jax.ipynb 与 text_preproc_torch.ipynb(文本预处理)、datasets.ipynb 与 tfds_intro.ipynb(TFDS/PyTorch 数据装载)。
值得强调的是 jax_tutorials.md 对 JAX 的定位:它通过编译到 XLA 在 CPU/GPU/TPU 上加速运行,接口几乎与 NumPy 一致,且继承了 autograd 的自动微分能力,可计算高阶导数、逐样本梯度与复杂代码的梯度。由于 JAX 是纯函数式、偏底层,书中选用 Flax 来编写 DNN;围绕 JAX 还生长出 Optax(优化器)、RLax(强化学习)、NumPyro/Distrax/BlackJax(概率编程与 HMC)等专向库。这些背景正是阅读 book 2 大量 JAX 代码前的必要铺垫。
概率编程层
software.md 指出:对 GMM、PCA 等简单模型可直接用 scikit-learn;更复杂的概率模型则需要"概率编程语言"(PPL)。仓库聚焦 PyMC3 与 NumPyro,同时覆盖 TFP、Pyro、PyStan 等方案;对全离散变量的 PGM 则使用 Pgmpy、Pomegranate。tutorials 目录提供了 numpyro_intro.ipynb 与 pyro_intro.ipynb 两份上手材料,可与 notebooks/misc 及 book1/book2 中的贝叶斯推断示例配合学习。
把路线图变成行动
综合原文档、README.md 与 tutorials 目录,建议的实践路径如下:
- 零成本起步:对照上文 Python 资源表快速掌握语言与数据科学四大件;然后直接打开 tutorials 目录中的任意 Notebook(如 jax_intro.ipynb),通过 colab_intro.ipynb 了解 Colab 环境,即可在线运行,无需本地安装。
- 本地复现:按 README.md 的说明安装依赖——已装好 JAX、TensorFlow、Torch 的前提下,执行
pip install -r requirements.txt;或用git clone --depth 1拉取仓库后手动安装(--depth 1可避免拉取庞大历史)。需要保存图片时,先设置环境变量FIG_DIR与DUAL_SAVE=1,供savefig函数写入 PDF/PNG。 - 规模化开发:当从"跑通 Notebook"走向"维护较大项目"时,切换为 VS Code + 远程虚拟机(gcp_ssh_vscode.md)或 JupyterLab/Spyder/PyCharm,用 IDE 管理代码、用 Notebook 保留交互式探索。
- 按需深入:针对概率建模场景,把 jax_tutorials.md、numpyro_intro.ipynb、pyro_intro.ipynb 作为主攻方向;涉及云端高性能计算时,再查阅 colab_gcp_tpu_tutorial.md(Colab/GCP/TPU 技巧)与 tpu_colab_tutorial.ipynb。
简而言之,python_tutorials.md 是 pyprobml 官方推荐的"学什么、用什么工具"的起点:先用免费资源补齐 Python 与数据科学基础,再依托仓库 tutorials 目录中 20 余个软件教学 Notebook 逐层吃透 JAX、深度学习与概率编程栈,最终在 Notebook(探索)与 IDE(工程)之间找到适合自己项目的平衡点。
- 机器学习
- 深度学习
【免费下载链接】pyprobml
Python code for "Probabilistic Machine learning" book by Kevin Murphy
相关推荐
开发者必看:mmlw-e5-large-openmind模型部署与优化指南
开发者必看:mmlw e5 large openmind模型部署与优化指南 mmlw e5 large openmind是一款基于XLMRoberta架构的多语
终极指南:如何让旧Mac免费升级到最新macOS系统
终极指南:如何让旧Mac免费升级到最新macOS系统 还在为你的旧Mac无法升级到最新macOS系统而烦恼吗?是否因为苹果官方停止支持而考虑更换设备?别急着淘汰
操作系统固件驱动开发Windows 11 如何彻底精简?Win11Debloat 禁用遥测、卸载预装应用的三步教程
Windows 11 如何彻底精简?Win11Debloat 禁用遥测、卸载预装应用的三步教程 Win11Debloat 是一个 PowerShell 开源脚本
桌面应用CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考