跳到主要内容

五个零件 — 一件事要拆成什么,才谈得上「做得好不好」

这一章讲三件事: 一个任务要拆成哪五个零件;为什么「训练集上差距最小」是个陷阱; 以及一条完整流水线从加载数据到给出一个价,中间到底有多少道工序。

它在全书链条里的位置: 第 03 章给了会转的循环,但没回答「转向哪儿」。 这一章补上那把尺子,后面每一章的实验都按这五个零件摆开。

需要的基础: 第 03 章的训练五步。这一章的加州房价流水线就是那五步的一次完整落地。

1. 先看现象:「这个模型好不好」是句没法直接回答的话

你训了一个东西,它在你手头的数据上答得很准。它好不好?

这句话没法直接回答,因为它至少藏着四个反问: 在哪份数据上准?准到什么程度算准?这份数据能代表以后会遇到的数据吗? 换一批数据它还准吗?

书里的做法是把任务拆开。 它说:任何一个任务的实践都离不开五个零件—— 数据、模型、学习准则、优化算法(挪的具体走法)、评价指标1

这里要交代一句来源: 教科书全本里只讲三个(模型、学习准则、优化算法); 这本书面向实践,把「数据」和「评价指标」也纳入进来,形成五个2多出来的这两个,恰恰是实际项目里最花时间的两个。

全章主走查:加州房价预测
═════════════════════════════════════════════════════════════════
数据 20 640 条街区记录,每条 8 项描述 + 1 个房价中位数
模型 一条直线:8 个数各乘一个系数,再加一个常数
准则 均方误差(把预测和真值的差平方后取平均)
怎么挪 这个模型有现成公式能一步解出来,不用一步步挪
尺子 还是均方误差
─────────────────────────────────────────────────────────────────
§9 数据处理 8:2 切分,均值和标准差只在训练集上估计
§10 训练与评价 训练 0.2631 / 测试 0.2584,再把 8 个系数排序读一遍
§11 单条预测 真实 1.92 个十万美元档(约 19.2 万美元),预测 1.95
═════════════════════════════════════════════════════════════════

2. 第一个零件:数据,以及为什么要切成三份

结论先行:数据不是一坨,是三坨,而且三坨的用途互不相通。

书里给的划分是3:

  • 训练集 —— 用来更新参数。误差指的是预测和真实答案之间的差距,不是「算错了」的意思; 模型在训练集上的平均差距就叫训练误差。

  • 验证集 —— 用来挑那些不由训练决定的数。做法是拿同一份训练集、 在多组设置下各训一个,再到验证集上比,挑最好的一组。

  • 测试集 —— 用来估计模型面对没见过的数据时的表现。 这种「面对没见过的数据还能不能行」的能力叫泛化。

没有现成划分时怎么切? 书里给的经验值是先按 7:3 或 8:2 切出测试集, 再从剩下的训练数据里按同样比例划出验证集4

书里用一个提醒框专门强调了一条铁律:测试集只能在最后一步使用。 训练过程中绝不能让测试数据影响任何决策——包括调那些人定的数、改模型、换喂进去的那些描述, 否则评价结果会失真5

这条铁律为什么容易被违反? 因为违反它一点都不费劲: 你在测试集上跑一次,发现成绩不好,回去改了个设置,再跑一次—— 你已经把测试集的信息喂进模型了,而且不会有任何报错。

顺带把一个词交代掉: 你交给模型的那些描述就叫特征, 比如街区的中位收入、房龄。一条样本 = 一组特征 + 一个正确答案。

3. 第二个零件:模型,其实是「一族函数」

结论先行:选模型不是选一个函数,是选一个候选池。

书里的说法是:有了数据,下一步就是从一个候选函数的集合里, 挑出最贴近样本真实关系的那一个;这个集合被称为假设空间, 工程实现中往往写成带参数的形式6

最简单的一族:直线
────────────────────────────────────────────
f(x) = w₁x₁ + w₂x₂ + … + w_D x_D + b

待定的数:D 个系数 w,再加一个常数 b
「挑一个函数」= 把这 D+1 个数定下来
────────────────────────────────────────────

这一族只能画直线(描述项一多就是一张平面)。 想拟合弯的关系怎么办? 书里给的第一招不是换模型,而是先把输入过一道非线性的变换、再做线性组合7。 后面第 5 节那个多项式回归用的就是这一招: 把一个数 x 变成 [x, x², …, x^M] 这一排数,再照直线那一套算。

这一招值得记住,因为它解释了后面很多事: 所谓「加一层」,本质上就是先做一次变换、再做一次线性组合。

4. 第三个零件:把「好」量化成一个越小越好的数

这一节是这一章的重心,也是全书最要紧的一个转折。

第一步很自然: 定义一个非负的函数,量预测值与真实答案的差距—— 这就是第 03 章说过的损失函数8

第二步开始出事,而且要先说清一个词:分布指的是「哪种数据出现得多、哪种出现得少」这一整套倾向。

理想情况下,我们想让损失在真实数据分布上的平均值最小;但这个分布拿不到, 只能用手头训练集上的平均损失当它的估计9。这个平均损失有个正式名字:经验风险

第三步是这一章要你带走的那句话。 书里写:通常最小化经验风险就能得到可用的模型, 但当模型容量过大或训练数据不足时,光最小化经验风险可能在训练集上几乎零误差、 到测试集上却表现很差10

这种「训练集上极好、没见过的数据上很差」的现象叫过拟合。

它的反面——模型太简单,连训练集都拟合不好——叫欠拟合

补救办法:在目标后面再加一项,专门惩罚参数走极端。 这一项叫正则化项,加上它之后的整个目标叫结构风险11:

结构风险 = 经验风险 + λ × (参数走得有多极端)
└ 训练集上 └ 这个系数由人来定
的平均差距

λ 越大 → 越不许参数走极端 → 模型越保守
λ = 0 → 退回到只看训练集

「参数走得有多极端」怎么量? 书里给了两种最直接的: 取所有参数绝对值之和,或者取平方和11这两种写法在效果上差别很大——差在哪里、代码上只改哪两处,第 14 章第 2 节讲。

5. 一组能看见过拟合的对照:多项式的阶数从 0 扫到 8

这一节把上一节那两个词变成图上看得见的东西。

书里造了一个 25 条样本的小数据集:目标函数是一条正弦曲线,再往每个答案上叠一点随机的扰动 ——这种故意加进去的扰动就叫噪声,用来模拟真实数据里那些说不清来源的偏差。

扰动的大小用标准差(一组数偏离它们平均值的典型幅度)来控制,这里取 0.1;15 条训练、10 条测试12。 然后用第 3 节那一招——把 x 升成 [x, x², …, x^M]——分别取 M = 0、1、3、8 去拟合13:

阶数曲线什么样叫什么
M = 0一条水平线,完全贴不上欠拟合
M = 1一条斜线,还是贴不上欠拟合
M = 3刚好捕捉到目标曲线的弯曲拟合最合理
M = 8曲线扭曲,把噪声也拟合了进去过拟合

把阶数从 0 扫到 8、同时画训练误差和测试误差,能看到三段变化14:

阶数 0~2 两条误差都高 ← 表达力不足
阶数 3~5 训练误差稳步下降 ← 甜区
阶数 6~8 训练误差贴近噪声地板 ← 已经在背数据
测试误差迅速反弹 ← 过拟合的标志

注意第三段那两条曲线的方向相反——这就是过拟合在图上的样子: 训练误差还在降,测试误差已经在涨。

再看正则化的效果: 同样取 8 阶,加一个很小的系数 0.0001, 加入惩罚项后的曲线明显更贴近真实曲线,过拟合得到有效抑制15同一个模型、同一份数据,只多了一项,结果就不一样了。

6. 第四、第五个零件:怎么挪,和拿什么尺子量

第四个零件:优化算法。

书里说:学习准则一旦敲定,任务就变成了一个具体的求最优问题; 目标函数是凸函数时令偏导为零就能解出现成公式,不是凸函数时只能靠一步步逼近16

深度学习里最常用的一种走法就叫梯度下降:反复算出每个参数的梯度,再沿着让损失变小的那个方向挪一小步。

书里点了它最要命的一个性质:它对每步挪多远非常敏感——取得太大,损失会振荡甚至发散; 取得太小,又慢得没法忍17「每步挪多远」这个数就叫学习率。

收敛指的是损失不再明显下降、稳定在某个水平上,这个词后面全书都会用。 挪的步子具体该怎么定,第 12 章第 3 到第 6 节讲。

还有一个常配的小手段:提前停止。 训练时同步盯着验证集的成绩, 一旦长时间没改善就提前终止,避免模型在训练集上越走越远而丢掉泛化能力18

第五个零件:评价指标。 它在测试集上跑一遍模型,把预测和真实标签对照后算出一个分数。 回归任务常用连续值的指标,分类任务常用准确率这类19

这里有一条容易被跳过、但很关键的因果,书里用一条笔记写了出来: 评价指标和损失函数关系紧密但并不重合。 一般先依据业务需求定评价指标,再据此选一个尽量贴近的损失函数; 但许多评价指标不可微(比如准确率),没法直接拿来当训练目标, 此时只能选一个数学性质良好的替代品20

这句话解释了后面所有章节里的一个现象:训练时盯着一个数,汇报时给另一个数。 不是作者随意,是准确率这类指标没法求导。

7. 先在一个玩具上把流水线走一遍

结论先行:在上真数据之前,书里先用一个 150 条、自己按公式造出来的数据集把流程跑通。

数据是这么造的:取真实关系 y = 1.2x + 0.5,在区间内均匀采 x, 代入算出 y,再叠加标准差为 2 的噪声;一共 150 条,100 条训练、50 条测试21

注意这里的特殊之处:真实答案我们自己知道(1.2 和 0.5)。 所以训完之后可以直接看模型离真相有多远——这在真数据上永远做不到。

这个模型有现成公式能一步解出来,这个方法叫最小二乘法22。 跑出来的结果是23:

真实值 w = 1.2 b = 0.5
估计值 w = 1.1314… b = 0.4785…
────────────────────────────────────────
训练误差 1.5824
测试误差 1.7430

书里对这个差距给了解释:估计出的参数与真实值略有差距, 差距主要来自训练数据中的噪声和样本数量限制23

这两个误差数值得对照着看:1.5824 对 1.7430,测试比训练高约 10%。 这个幅度是正常的;第 5 节那种过拟合会让这个比例大得多。 顺带说一句:这里的噪声标准差是 2,而误差本身在 1.5 到 1.8 之间—— 换句话说,模型的误差主要来自噪声本身,而不是模型不够好。

8. 主走查前半:真数据长什么样,以及那个十万美元

从这一节起进入加州房价,一路走到第 11 节。

数据集:20 640 条记录,每条给出街区层面的 8 项描述, 外加该街区的房价中位数作为要预测的答案24

读这张表的第一件事是看单位。 书里逐个字段(表格里的一列,也就是一项描述)都标了单位:

字段含义单位
MedInc街区中位家庭收入$10 000(一万美元)
HouseAge街区房屋的中位年龄
AveRooms / AveBedrms每户平均房间数 / 卧室数
Population / AveOccup街区总人口 / 户均人口
Latitude / Longitude纬度 / 经度
MedHouseVal该街区房价中位数$100 000(十万美元)

最后那一行是这一章最容易读错的地方25: 要预测的那个数,单位是十万美元。 所以数据里的 4.526 指的是 45.26 万美元,不是 4.5 万。

这件事同时解释了另一个数: 第 10 节那个均方误差 0.26 看起来小得可疑, 但它是在「十万美元」这把刻度上算的—— 换算过去,大致相当于典型偏差在 5 万美元上下(0.26 开平方约 0.51,再乘十万, 再考虑书里那个 1/2 的系数,量级就在这里)。换一把刻度,同一个模型的「误差」数字就变了。

顺带一件事关伦理的背景: 书里说明,这个案例早期用的是波士顿房价数据集, 因涉及种族特征等伦理问题,已在 scikit-learn 1.2 版本中移除; 当前推荐的替代品就是加州房价26

9. 主走查续:切分与标准化,以及一条会让成绩虚高的坑

结论先行:8:2 切分,然后做特征缩放,而缩放的统计量只能从训练集来。

书里说这个实验流程较简单,按 8:2 切训练集和测试集即可,不再单独留验证集27

为什么要做缩放? 因为原始特征的量纲差异极大—— 收入的数字小、人口的数字大、经纬度还是带正负的角度; 直接喂给模型会让某些特征「喧宾夺主」27

书里提了两种缩放方式,并说明本案例用哪一种28:

  • 归一化 —— 把特征压到 0 到 1 之间;

  • 标准化 —— 让每一维特征的均值为 0、标准差为 1。本案例采用这一种。

然后是这一节的坑,书里同样用提醒框标了出来: 均值和标准差只能在训练集上估计,并用同一组统计量去变换测试集; 否则会造成测试集信息泄露,导致测试指标偏高29

这个坑和第 2 节那条铁律是同一件事的两种形态。 如果你拿全量数据算均值,那么测试集里那些样本的信息, 已经通过这个均值渗进了训练过程——成绩会好看,但那个好看是假的。

10. 主走查续:两个误差,和八个系数的排序

训练与评价,书里的实际输出是30:

train MSE: 0.2631
test MSE: 0.2584

这两个数有一处值得注意:测试误差比训练误差还低一点点。 这在第 7 节那个玩具上没出现(那里是 1.5824 对 1.7430)。 原因不神秘:20 640 条数据、只有 9 个待定的数,模型远没有能力去背数据, 所以两份数据上的表现基本一致,谁高谁低只是随机划分的抖动。

接着书里把 8 个系数按数值从小到大排出来读了一遍31:

Latitude −0.8974 ← 纬度,负得最多
Longitude −0.8688
AveRooms −0.2692
AveOccup −0.0406
Population −0.0050 ← 几乎没影响
HouseAge +0.1162
AveBedrms +0.3079
MedInc +0.8284 ← 中位收入,正得最多
bias +2.0765

书里对这组数的解读是:中位收入那一项的权重(乘在这一项上的那个系数)最大且为正,说明收入越高的街区房价越高; 经纬度的权重为负,该模型大致倾向于越往北、越往内陆给出更低的预测房价32

但书里紧接着自己打了个补丁,这句话很值得抄下来: 「这只是模型从标准化特征学到的粗略方向,并非严格的地理规律—— 如旧金山湾区虽在北部沿海,房价却很高」32

这是全书少见的、作者主动给自己的结论加边界的地方。 一条直线只能给出「整体倾向」,它没有能力表达「某几个区域是例外」。

11. 主走查末步:给一个街区报一个价

存下来、新建一个同结构的模型、读回参数,测试误差仍是 0.258433—— 这一步在验证「存取链路没丢东西」,和第 03 章第 5 节是同一件事。

然后对测试集里的第一条样本做一次预测,书里的输出是34:

真实房价:1.92
预测房价:1.95

照第 8 节那张单位表读:真实是 1.92 个十万美元档(约 19.2 万美元), 预测是 1.95 个十万美元档(约 19.5 万美元),差了约 3 000 美元。

书里对这一条的态度很克制: 这条样本的预测值与真实房价较为接近, 但模型的整体表现仍以测试集上的均方误差(约 0.26)为准35单条样本准不准说明不了什么——这句话在后面每一章的「模型预测」小节都成立。

主走查到此走完。 从 20 640 条原始记录出发,经过切分、缩放、求解、评价, 最后给出一个具体的价。这条流水线的形状,后面每一章都会重复。

12. 作者的判断与证据

书里给了证据的:

  • 过拟合随阶数出现——书里画了训练与测试两条误差曲线,分三段解读,趋势可核14;
  • 正则化能压住它——同一份数据、同为 8 阶,加与不加两条拟合曲线并排画出15;
  • 加州房价的两个误差与八个系数——都是实际打印输出3031

属于作者的解读、并且作者自己给了边界的:

  • 经纬度系数为负 = 越往北越往内陆越便宜——作者立刻补了一句「并非严格的地理规律」32这个补丁很重要:它把一个关于系数的观察和一个关于世界的断言分开了。

书里给了做法但没给量化对照的:

  • 跳过标准化会怎样——书里把它留成了动手练习,没有给出跳过之后的成绩36;
  • 异常样本对最小二乘法的影响——同样是思考题,正文没做实验37

判断(我们的,不是书里的):五个零件里最容易被跳过、代价也最大的是第一个。 后面二十章的篇幅分配是:模型结构占绝大多数,数据处理常常只有几行。 而真实项目里的比例正好相反。书里那两个提醒框(测试集只能最后用、 统计量只能从训练集来)加起来不到十行,却是这一章唯一两条「违反了不报错」的规则。 如果错,会错在: 这本书的定位是配套实操,数据工程本来就不在它的射程内; 要求它平衡篇幅是苛求。判据是:去数一数全书有几处实验专门讨论数据本身的质量。

13. 边界与局限

这一章没覆盖的:

没讲什么依据 / 为什么值得知道
交叉验证书里在第 3 章的动手练习里提了一句,正文没有实现
缺失值、异常值的处理书里选加州房价的理由之一就是「无缺失值」,等于绕开了这个问题
特征工程:造新特征、选特征全书没有
数据本身的偏差与伦理只在波士顿房价那条笔记里点到为止
除均方误差外的回归指标全书回归任务只用这一个

出门会撞见的名字:

  • 均方误差(MSE) 就是第 7 节那把尺子;注意书里带了一个 1/2 的系数, 这是为了求导时把平方的 2 约掉,和别处的定义差一个常数倍38;

  • 最小二乘法(least squares) 就是第 7 节那个「有现成公式一步解出来」的方法22;

  • 过拟合 / 欠拟合(overfitting / underfitting) 是第 4、5 节那两种失败;

  • ℓ1 / ℓ2 正则化 就是第 4 节末尾那两种量「参数有多极端」的写法,第 14 章展开;

  • 提前停止(early stopping) 是第 6 节那个「验证集不再改善就收手」的手段18;

  • 标准化(standardization) 是第 9 节那种「均值 0、标准差 1」的缩放28

14. 可带走的

  1. 一个任务拆成五个零件:数据、模型、把「好」量化、怎么挪、拿什么尺子量;
  2. 数据切三份,测试集只能在最后一步用——违反了不报错,只让成绩虚高;
  3. 模型是一族函数,训练是在这一族里挑一个;想拟合弯的,先把输入过一道变换;
  4. 只压训练集上的平均差距会翻车,所以要在目标后面再加一项罚参数走极端;
  5. 过拟合的图形特征是两条曲线方向相反:训练误差还在降,测试误差已经在涨;
  6. 评价指标和损失函数常常不是同一个,因为准确率这类指标不可微;
  7. 加州房价那一列的单位是十万美元——读表的第一件事就是看单位;
  8. 训练 0.2631 / 测试 0.2584,测试反而略低,因为 20 640 条数据配 9 个待定的数根本背不下来;
  9. 缩放用的均值和标准差只能从训练集来,否则测试集的信息会渗进训练;
  10. 单条样本预测得准说明不了什么,整体表现以测试集上的指标为准。

15. 原文地图

主题原书章原文位置
五要素与三要素的关系第2章 机器学习概述text/03-ch02.txt:41(搜「任何机器学习任务的实践」) · text/03-ch02.txt:16(搜「三要素」)
三份数据与铁律第2章 机器学习概述text/03-ch02.txt:97(搜「训练集」) · text/03-ch02.txt:109(搜「测试集只能在最后一步使用」)
假设空间与非线性基函数第2章 机器学习概述text/03-ch02.txt:115(搜「有了数据」) · text/03-ch02.txt:127(搜「非线性基函数」)
经验风险与结构风险第2章 机器学习概述text/03-ch02.txt:140(搜「理想情况下」) · text/03-ch02.txt:150(搜「经验风险最小化就能得到可用的模型」)
优化算法与学习率第2章 机器学习概述text/03-ch02.txt:163(搜「学习准则一旦敲定」) · text/03-ch02.txt:167(搜「它对学习率非常敏感」)
评价指标与损失的关系第2章 机器学习概述text/03-ch02.txt:176(搜「用于衡量模型的实际效果」) · text/03-ch02.txt:181(搜「并不重合」)
玩具数据集与最小二乘第2章 机器学习概述text/03-ch02.txt:251(搜「150 个样本」) · text/03-ch02.txt:491(搜「w_pred」)
阶数扫描与正则化第2章 机器学习概述text/03-ch02.txt:698(搜「阶数从低到高的三段变化」) · text/03-ch02.txt:754(搜「更贴近真实」)
加州房价字段与单位第2章 机器学习概述text/03-ch02.txt:873(搜「共有 20 640 条记录」) · text/03-ch02.txt:898(搜「该街区房价中位数」)
切分、标准化与泄露第2章 机器学习概述text/03-ch02.txt:925(搜「按 8:2 切分训练集和测试集」) · text/03-ch02.txt:936(搜「并用同一组统计量变换测试集」)
两个误差与八个系数第2章 机器学习概述text/03-ch02.txt:1009(搜「train MSE」) · text/03-ch02.txt:1021(搜「Latitude」)
单条预测第2章 机器学习概述text/03-ch02.txt:1059(搜「真实房价」) · text/03-ch02.txt:1062(搜「均方误差」)

Footnotes

  1. 出处:「第2章 机器学习概述」第 41 段(text/03-ch02.txt:41,搜「任何机器学习任务的实践」)。原文逐条列出五个要素:数据、模型、学习准则、优化算法、评价指标。

  2. 出处:「第2章 机器学习概述」第 16 段(text/03-ch02.txt:16,搜「三要素」)。这是书里的一条笔记:《神经网络与深度学习》第 2.2 节将机器学习抽象为「模型、学习准则、优化算法」三要素,本书面向实践,因此把「数据」和「评价指标」也纳入进来,形成五要素的框架。

  3. 出处:「第2章 机器学习概述」第 97 段(text/03-ch02.txt:97,搜「训练集」)。原文三条并列:训练集用来更新参数、其上的平均损失称为训练误差(也称经验误差或经验风险);验证集用于超参数选择;测试集用来评估真实泛化能力。

  4. 出处:「第2章 机器学习概述」第 104 段(text/03-ch02.txt:104,搜「数据划分时存在一个权衡」)。原文:训练数据越多参数估计越稳,测试数据越多性能评估越可信;没有现成划分时可大致按 7:3 或 8:2 先切出测试集。

  5. 出处:「第2章 机器学习概述」第 109 段(text/03-ch02.txt:109,搜「测试集只能在最后一步使用」)。原文接着说:训练过程中绝不能让测试数据影响任何决策,包括调超参、改模型、做特征工程,否则评价结果会失真。

  6. 出处:「第2章 机器学习概述」第 115 段(text/03-ch02.txt:115,搜「有了数据」)。原文把候选函数集合称为假设空间,并写成参数化形式。

  7. 出处:「第2章 机器学习概述」第 127 段(text/03-ch02.txt:127,搜「非线性基函数」)。原文:将输入先经过非线性基函数,再做线性组合,就把线性模型扩展为非线性模型。

  8. 出处:「第2章 机器学习概述」第 137 段(text/03-ch02.txt:137,搜「想说一个模型」)。原文说明损失函数是一个非负实数函数,量化预测值与真实标签的差距,常见的有 0-1 损失、平方损失、交叉熵损失等。

  9. 出处:「第2章 机器学习概述」第 140 段(text/03-ch02.txt:140,搜「理想情况下」)。原文:我们希望让损失在真实数据分布上的期望最小,但实际工作中拿不到真实分布,只能用手头训练集上的平均损失作为它的经验估计。

  10. 出处:「第2章 机器学习概述」第 150 段(text/03-ch02.txt:150,搜「经验风险最小化就能得到可用的模型」)。原文:但当模型容量过大或训练数据量不足时,光最小化经验风险,可能在训练集上几乎零误差,到测试集上却表现差——这就是过拟合。

  11. 出处:「第2章 机器学习概述」第 153 段(text/03-ch02.txt:153,搜「最直接的正则化是约束参数本身」)。原文写明 p = 1 或 2 分别对应两种范数,λ 为正则化系数,加到经验风险上得到结构风险。 2

  12. 出处:「第2章 机器学习概述」第 554 段(text/03-ch02.txt:554,搜「取自变量区间」)。原文:高斯噪声标准差 0.1,生成 15 个训练样本和 10 个测试样本。

  13. 出处:「第2章 机器学习概述」第 670 段(text/03-ch02.txt:670,搜「图中四条拟合曲线」)。原文逐条说明 M = 0、1 欠拟合,M = 3 拟合最合理,M = 8 过拟合。

  14. 出处:「第2章 机器学习概述」第 698 段(text/03-ch02.txt:698,搜「阶数从低到高的三段变化」)。原文三段:阶数 02 欠拟合;35 训练误差稳步下降;6~8 训练误差贴近噪声地板但测试误差迅速反弹。 2

  15. 出处:「第2章 机器学习概述」第 754 段(text/03-ch02.txt:754,搜「更贴近真实」)。实验设定见第 729 段(text/03-ch02.txt:729,搜「多项式阶数」):阶数 8、正则化系数 0.0001。 2

  16. 出处:「第2章 机器学习概述」第 163 段(text/03-ch02.txt:163,搜「学习准则一旦敲定」)。原文:若目标函数是凸函数,令偏导为零即可解出解析解;非凸时则要交给一阶/二阶迭代算法逼近极小点。

  17. 出处:「第2章 机器学习概述」第 167 段(text/03-ch02.txt:167,搜「它对学习率非常敏感」)。原文:取得太大,损失会振荡甚至发散;取得太小,收敛又极慢。

  18. 出处:「第2章 机器学习概述」第 170 段(text/03-ch02.txt:170,搜「提前停止」)。原文把它称作一类「轻量正则化」:训练时同步观察验证集指标,一旦长时间没有改善就提前终止迭代。 2

  19. 出处:「第2章 机器学习概述」第 176 段(text/03-ch02.txt:176,搜「用于衡量模型的实际效果」)。原文:回归任务常用均方误差等连续值指标,分类任务则常用准确率、召回率、F1 等。

  20. 出处:「第2章 机器学习概述」第 181 段(text/03-ch02.txt:181,搜「并不重合」)。原话:一般先依据业务需求确定评价指标,再据此选择尽量贴近的损失函数;但许多评价指标不可微(如准确率),无法直接用作训练目标,此时只能选用一个数学性质良好的替代品。

  21. 出处:「第2章 机器学习概述」第 251 段(text/03-ch02.txt:251,搜「150 个样本」)。真实函数的参数见第 245 段(text/03-ch02.txt:245,搜「真实函数的参数缺省值」):w = 1.2、b = 0.5;噪声标准差在调用处写作 noise=2。

  22. 出处:「第2章 机器学习概述」第 442 段(text/03-ch02.txt:442,搜「这种直接利用解析解得到参数的方法」)。原文把它称为最小二乘法,并把可选的 ℓ2 正则化系数一并暴露在函数参数里。 2

  23. 出处:「第2章 机器学习概述」第 491 段(text/03-ch02.txt:491,搜「w_pred」)。实际输出为 w_pred: 1.1314142942428589 b_pred: 0.47851675748825073train error: 1.5823547840118408;测试误差见第 505 段(text/03-ch02.txt:505,搜「test error」)。对差距的解释见第 494 段(text/03-ch02.txt:494,搜「差距主要来自训练数据中的噪声」)。 2

  24. 出处:「第2章 机器学习概述」第 873 段(text/03-ch02.txt:873,搜「共有 20 640 条记录」)。原文:每条记录给出街区层面的 8 个特征以及该街区房价中位数作为标签。

  25. 出处:「第2章 机器学习概述」第 898 段(text/03-ch02.txt:898,搜「该街区房价中位数」)。字段表里这一行的单位栏写明 $100 000;中位家庭收入那一行的单位见第 882 段(text/03-ch02.txt:882,搜「街区中位家庭收入」),单位是 $10 000。

  26. 出处:「第2章 机器学习概述」第 901 段(text/03-ch02.txt:901,搜「因涉及种族特征等伦理问题」)。原文说明当前推荐的替代品就是加州房价数据集:样本量更大、无缺失值,并可通过 scikit-learn 一键加载。

  27. 出处:「第2章 机器学习概述」第 925 段(text/03-ch02.txt:925,搜「按 8:2 切分训练集和测试集」)。原文接着说明原始特征量纲差异极大,直接喂给模型会让某些特征喧宾夺主,因此训练前需要做特征缩放。 2

  28. 出处:「第2章 机器学习概述」第 931 段(text/03-ch02.txt:931,搜「常见的特征缩放方式有两种」)。原话:归一化把特征压到 [0, 1] 区间;标准化让每维特征均值为 0、标准差为 1;本案例采用标准化。 2

  29. 出处:「第2章 机器学习概述」第 936 段(text/03-ch02.txt:936,搜「并用同一组统计量变换测试集」)。原文接着说:否则会造成测试集信息泄露,导致测试指标偏高。

  30. 出处:「第2章 机器学习概述」第 1009 段(text/03-ch02.txt:1009,搜「train MSE」)。实际输出为 train MSE: 0.2631test MSE: 0.2584 2

  31. 出处:「第2章 机器学习概述」第 1021 段(text/03-ch02.txt:1021,搜「Latitude」)。这是书里把 8 个权重按数值从小到大排序后的实际打印输出,末行 bias 为 +2.0765。 2

  32. 出处:「第2章 机器学习概述」第 1031 段(text/03-ch02.txt:1031,搜「权重最大且为正」)。原文的补丁原话是:这只是模型从标准化特征学到的粗略方向,并非严格的地理规律——如旧金山湾区虽在北部沿海,房价却很高。 2 3

  33. 出处:「第2章 机器学习概述」第 1049 段(text/03-ch02.txt:1049,搜「reloaded test MSE」)。

  34. 出处:「第2章 机器学习概述」第 1059 段(text/03-ch02.txt:1059,搜「真实房价」)。实际输出两行:真实房价 1.92、预测房价 1.95。

  35. 出处:「第2章 机器学习概述」第 1062 段(text/03-ch02.txt:1062,搜「均方误差」)。原话:这条样本的预测值与真实房价较为接近;模型的整体表现仍以前面测试集上的均方误差(约 0.26)为准。

  36. 出处:「第2章 机器学习概述」第 1066 段(text/03-ch02.txt:1066,搜「若跳过」)。这是动手练习 2.6,书里只提出问题、没有给出跳过标准化后的实际成绩。

  37. 出处:「第2章 机器学习概述」第 1071 段(text/03-ch02.txt:1071,搜「当训练数据中混入异常样本时」)。这是书里的思考题,正文没有做对应实验。

  38. 出处:「第2章 机器学习概述」第 387 段(text/03-ch02.txt:387,搜「求导时约掉平方的」)。代码注释原文写明:带 1/2 系数,与损失定义一致,求导时约掉平方的 2。