
简介这是一份与《机器学习实战》蜥蜴书第三版配套的实战源码和学习笔记适合已有Python编程基础、希望以项目实操方式掌握机器学习核心流程的读者。压缩包共108个文件约60.29MB核心是28个Jupyter Notebook.ipynb笔记辅以16个readme说明、14个sample数据样例、yml环境配置、png示意图等内容覆盖数据处理、特征选择、模型构建与评估完整链路并延伸至监督学习、无监督学习、深度学习与强化学习等算法专题。读者可以在Notebook中实时修改和运行代码对照书中案例拆解每一步的实现逻辑资源中附带的依赖配置文件、Dockerfile等还可帮助快速复现一致的运行环境减少环境搭建障碍。目前已有277人学习下载无论是系统学习、备赛还是搭建个人机器学习项目都可作为实用参考。需注意相关库版本迭代较快部分代码需按当前环境微调后运行。 搞机器学习的很少有人没听过“蜥蜴书”的大名。Aurélien Géron 那本《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow》因为封面上那只标志性的蜥蜴被国内学习者亲切地叫作“蜥蜴书”。第三版更新了不少内容而《机器学习实战蜥蜴书第三版实战源码.zip》这个压缩包几乎是每个想上手实战的人都会先下载的资料。但一个残酷的现实是很多人解压之后只是看了几眼然后就关掉了。源码不是这样用的。这篇文章我会以一个刷完第三版源码、并且带过几个新手的身份聊聊拿到这份 zip 之后该怎么折腾。内容包括目录结构、环境搭建、第一个 Notebook 的正确打开方式还有我实测中踩过的三个坑。如果你刚下载完还没动过或者曾经跑起来又中途卡住这篇应该能帮你省下不少时间。1. 拿到源码包先别急着双击这份zip里的目录信息量很大很多人的习惯是解压之后直奔notebooks文件夹然后随便点开一个.ipynb文件看到满屏代码瞬间压力山大然后默默关掉。我建议你把节奏放慢一点先整体看一遍目录。源码包的布局其实就是作者设计的学习路线图理解了这个结构你才知道该从哪下手。以第三版为例解压后你会看到下面这些核心内容目录 / 文件作用notebooks/全书每一章的 Jupyter Notebook 源码按章节编号命名datasets/各章用到的数据集有的需要联网下载有的本地直接提供requirements.txt官方锁定的 Python 依赖包版本清单Dockerfile如果你不想污染本地环境可以用 Docker 一键起一个可复现环境README.md项目说明包含环境安装指引和常见问题第三版相对第二版的变化很大最明显的是新增了 Transformer、自监督学习和扩散模型相关的章节同时把 TensorFlow 部分升级到了 Keras 2.x 的风格。如果你之前看过第二版再切到第三版时不要觉得代码“变陌生了”这不是错觉是作者刻意跟着生态在走。1.1 从一张目录图看清全书的代码主线notebooks文件夹里的编号对应书里的章节比如01_the_machine_learning_landscape.ipynb机器学习全景概述代码很少基本都是概念演示。02_end_to_end_machine_learning_project.ipynb第一个完整的端到端项目——加州房价预测这本书的精华章节之一。03_classification.ipynbMNIST 手写数字分类用 Scikit-Learn 的经典套路。10_neural_nets_with_keras.ipynbKeras 搭建神经网络从这里开始进入深度学习的主题。19_transformer_architectures.ipynbTransformer 架构第三版增补的重点内容。看到这个顺序你就明白了前几章是 Scikit-Learn 主导的传统机器学习中间开始切入神经网络最后是 Transformer 这类现代架构。它是一个从“基础”到“前沿”的递进过程不是零散的代码片段集合。1.2 为什么Jupyter Notebook是这本书的真正讲义第二版之后作者的源码就全面转向了 Jupyter Notebook而不是纯.py文件。我第一次刷的时候也不理解为什么不用脚本直接python train.py跑完不好吗后来才想明白这恰恰是这本书最聪明的地方。机器学习项目本身就是高度迭代的过程。你需要先加载数据看一眼数据分布决定要不要做特征工程然后训练一个基线模型再看结果再调参。每一步都可能产生新的判断这种探索式的流程用 Notebook 来表达是最自然的。Notebook 里每个 cell 都能独立运行你可以边读边跑看到中间变量长什么样甚至临时插入一个 cell 去验证自己的想法。这种“动手式阅读”体验是纯脚本给不了的。2. 跑通环境是第一个大坑依赖版本和虚拟环境决定成败如果你只是打开源码看了一眼就关掉那多半是卡在了环境搭建这一步。第三版的依赖比早期版本复杂不少TensorFlow、Scikit-Learn、Pandas、Jupyter这一套下来版本稍微不对就会报错。很多网上提问“为什么我运行第一章的代码就报ImportError” 十有八九都是环境问题。所以我的建议是先建虚拟环境再逐步安装依赖。别在系统 Python 里直接 pip install那是在给自己埋雷。2.1 用conda把Python环境和项目隔离最省事的方式是用 Anaconda 或 Miniconda 创建一个独立的环境。理由很简单这本书的依赖版本是锁定的而你可能还有别的项目需要用其他版本用虚拟环境隔离互不干扰。# 创建环境指定 Python 版本。第三版建议 Python 3.8~3.10经实测 3.9 最稳 conda create -n hml python3.9 # 激活环境 conda activate hml # 进入解压后的源码目录安装官方依赖清单 pip install -r requirements.txt # 安装 Jupyter并把内核注册到当前环境 pip install jupyter python -m ipykernel install --user --name hml --display-name Python (hml)到这里环境基本就绪。注意不要用conda install直接装requirements.txt里的包容易把依赖依赖关系搞乱。我习惯用pip install -r requirements.txt让 pip 按官方锁定版本解析。2.2 requirements.txt里的版本号千万不要轻易改动有一种情况很常见你新建环境后发现requirements.txt里的某个版本有点旧比如scikit-learn1.1.2你想着“升级到最新版应该没问题吧”然后自信地改成了latest。结果就是后续代码到处爆错。这里必须说清楚为什么版本不能乱动。书里大量代码是依据特定 API 写的比如sklearn.preprocessing.OneHotEncoder在旧版里有sparse参数新版变成了sparse_outputsklearn.metrics.plot_roc_curve在新版本中被移除。如果你升级了版本源码可能直接跑不通你不仅要改代码还要理解新旧 API 的差异这对新手来说成本太高。用第三版源码时我实测比较稳的组合是Python 3.9 Scikit-Learn 1.1.x TensorFlow 2.11 Pandas 1.5.x。你可以直接用官方给的requirements.txt别动版本号先把代码跑通再去研究新特性。3. 我建议的跑源码顺序先从第1章的端到端项目开始环境配好之后下一步不是从第一章第一个 Notebook 开始“按顺序”读而是先去跑第 2 章的02_end_to_end_machine_learning_project.ipynb。因为第 1 章基本是概念性的代码很少看完概念直接上手项目效率更高。启动 Notebook 后我用的是 Jupyter 的“逐单元格运行”策略从上到下一个 cell 一个 cell 地执行。不要整份Run All第一个原因是你需要观察每个中间结果第二个原因是如果后面某个 cell 报错你不至于完全不知道问题出在哪。3.1 第2章其实是一个完整的机器学习应用流程第 2 章的加州房价项目可以说把整个“机器学习应用流程”压缩进了一个 Notebook加载数据、数据探索、切分训练集测试集、特征工程、模型训练、交叉验证、误差分析、模型微调、最终评估。很多人学完这一章才对“项目流程”有了骨架感。比如加载数据那段源码里是这样写的import pandas as pd housing pd.read_csv(datasets/housing/housing.csv) housing.head()这段看起来简单但背后隐藏了一个容易忽略的点数据文件路径。如果你直接用源码里的相对路径必须在源码根目录下启动 Jupyter否则会找不到datasets文件夹。这算是我见过的最常见的“新手问题”之一。跑完这一章你基本就明白了一份合格的项目代码不是只有模型训练那几行数据清洗和特征工程往往占了七八成的工作量。3.2 从第2章之后源码笔记本里的“代码密度”会明显增加第 2 章后面第 3 章的 MNIST 分类、第 4 章的线性模型训练、第 6 章决策树代码量会逐步上升但依然保持在“看一遍能懂”的范围内。真正会让普通人感觉吃力的是从第 10 章 Keras 神经网络开始。这个时候代码里会出现大量模型定义、编译、训练的过程如果没有前面的基础很容易看着看着就断了。我的建议是在第 2 章之后按顺序将第 3、4、6 章的重点部分跑通先建立对 Scikit-Learn 的肌肉记忆。到第 10 章时再次深呼吸开始接触tf.keras.Sequential这类高层 API。别跳着学因为它们之间是有依赖关系的。4. 实测中遇到的三个真实问题API变动、数据集下载失败和内存不足这一部分想集中分享我在跑源码时踩过的三个坑。如果你卡住了大概率也是这三类问题。4.1 报错cannot import name plot_roc_curve一次典型的sklearn版本迁移我在某一次帮朋友排查环境时看到他运行第 3 章或第 9 章里的代码报错是这样的ImportError: cannot import name plot_roc_curve from sklearn.metrics这个报错很典型。plot_roc_curve是 Scikit-Learn 1.0 之前提供的函数后来官方建议改用RocCurveDisplay这种基于“展示器”的 API。如果你的requirements.txt里锁定的版本不是特别老那就可能出现这个问题。排查链路是这样先看sklearn.__version__确认版本然后再去官方文档确认这个版本的metrics模块里是否还有plot_roc_curve。如果版本比较旧可以直接安装指定版本让代码原样运行如果不想降级就把代码改成新的 APIfrom sklearn.metrics import RocCurveDisplay disp RocCurveDisplay.from_estimator(svm_clf, X_test, y_test) disp.plot()遇到类似ImportError我的经验是先不要硬搜“如何解决”而是确认当前环境版本然后对照官方文档中的 deprecated 说明。这本书的源码并不是百分之百适配所有环境版本所以学着看“迁移文档”也是一个重要技能。4.2 数据集下载卡在“Downloading”的本地化处理很多 Notebook 里会有类似这样的代码from pathlib import Path import urllib.request DOWNLOAD_ROOT https://raw.githubusercontent.com/ageron/handson-ml3/main/ housing_url DOWNLOAD_ROOT datasets/housing/housing.tgz当网络不好的时候这个 cell 会一直卡着或者下载到一半失败。遇到这种情况我建议你直接手动把datasets目录从源码包里解压出来放到当前项目根目录下。然后在代码里跳过下载步骤直接从本地读。比如把加载数据的部分改为housing pd.read_csv(datasets/housing/housing.csv)这是最省事的方案。如果网上有人分享了你需要的.tgz文件也可以下载后手动放到对应位置再从本地解压。核心思路就是不要让源码的网络请求卡死你的学习进度。4.3 跑深度模型时内存或显存不足到后面几章尤其是 Keras 那几节问题不再是版本而是硬件资源。你可能会看到类似ResourceExhaustedError: OOM when allocating tensor这样的报错。这意思是显存或者内存不够了模型和数据都塞不进去。我的处理办法分几步先看是不是数据集太大可以只加载前几百条样本测试流程再看是不是模型层数太多暂时把隐藏层神经元数量减半最后再考虑减少 batch size。这些改动不会影响你对代码逻辑的理解只是让代码在合理时间内跑完。model tf.keras.Sequential([ tf.keras.layers.Dense(30, activationrelu), tf.keras.layers.Dense(10) ]) model.compile(lossmse, optimizersgd) history model.fit(X_train_scaled, y_train, epochs20, batch_size32)把batch_size从 64 改成 32有时候问题就解决了。如果完全跑不动也可以把对应 Notebook 上传到在线代码平台用免费的 GPU 环境继续跑。总之不要因为硬件限制就放弃后面的内容。5. 把别人的源码变成自己的武器三条进阶学习建议把源码跑通这不算什么本事能合上 Notebook用自己的话把算法和流程重新实现一遍才算真正吸收了。很多人刷完一遍源码后觉得自己会了但真到面试或者做项目时又脑子空白就是因为一直在被动地“看代码”没有主动地“重构代码”。如果你也想利用好这份 zip我推荐下面三个学习阶段。5.1 用“盲写”检验自己是否真的理解第一个阶段是“照葫芦画瓢”——把 Notebook 从头到尾运行一遍看懂每个 cell 的输入输出。第二个阶段就要关掉答案了。比如你看到第 2 章的文字描述“切分训练集和测试集”先不要看代码自己试着写train_test_split。写不出来再回去看源码。这个方法很笨但非常有效。什么时候算过关就是你在没有源码的情况下只看着第 2 章的标题就能在空白 Notebook 里敲出一个完整的数据准备和模型训练流程。到那时候这份源码对你才真正有了价值。5.2 一份源码的知识管理方法我还建议你用表格或者笔记把全书章节涉及的核心算法整理成自己的速查表。比如章节核心算法/工具关键知识点第2章端到端项目训练集/测试集切分交叉验证误差分析第3章分类混淆矩阵精确率/召回率ROC曲线第6章决策树基尼不纯度剪枝第10章Keras神经网络层、损失函数、优化器、回调函数第19章Transformer自注意力位置编码预训练与微调做这张表的过程其实就是在帮你建立机器学习知识的地图。等到期末复习或者准备面试时看自己的速查表比重新翻书高效太多。我个人做完这件事之后最大的感受是那些当时觉得“懂了但说不出来”的概念比如交叉验证、正则化、学习率在整理的过程中慢慢都能用大白话讲清楚了。这也是这份源码包最被低估的用法——它不仅能跑代码还能帮你把知识点串成线。别只把它当成一个需要破解的 zip 压缩包把它当成一座可以反复挖掘的矿你每一次动手实践都会挖到一点新的东西。本文还有配套的精品资源点击获取