第6讲 数据集、泛化与过拟合:简介#
预计整个模块学习时长: 105 分钟
学习目标:
说出数据与数据集的四个不同特征。
说出至少四种导致数据不可靠的成因。
判断什么时候该丢弃缺失数据、什么时候该插补。
区分直接标签与派生标签。
说出两种提升人工评分标签质量的做法。
解释为什么要把数据集拆成训练集、验证集和测试集,并指出数据划分中一个潜在问题。
解释过拟合,并说出它的三种可能成因。
解释正则化的概念,具体包括:
偏差与方差(对离群值的过度适应……)
$L_2$ 正则化,包括 Lambda(正则化系数)
早停(Early stopping)
解读不同类型的损失曲线;在损失曲线中识别收敛与过拟合。
先修要求:
本模块假设你已经熟悉以下模块中介绍的概念:
本章内容
第6.1节 数据集、泛化与过拟合简介
整个课程最有分量的一讲,从两个「引导性」问题开场:项目里最值得优先改进的是哪一块?数据准备通常占掉多少时间?答案都指向同一件事——数据。这一节先把模块的学习目标摊开(数据的四个特征、数据不可靠的至少四种成因、缺失值该丢还是该插、直接标签与派 …
第6.2节 数据集的数据特征
机器学习模型的天花板,往往不是算法,而是喂给它的那份数据。这一节先把数据集的基本面向铺开:可能装哪些类型的数据、需要多少量才够用、质量与可靠性该怎么衡量,以及数据不可靠时最常见的五种成因。往后进入最实际的问题——不完整样本该怎么办:什么时候 …
6.3 数据集的标签
标签就是模型最后要学出来的那个「答案」——答案选得对不对,往往比模型选得对不对更能决定成败。这一节先把直接标签与派生标签拆开讲:直接标签是数据集里原样躺着的那个答案,派生标签则是像「最近买过自行车」这样只能近似答案的信号;接着转向人工生成数 …
第6.4节 数据集的类别不平衡问题
真实世界的数据往往一边倒:信用卡交易里的欺诈可能连 0.1% 都不到,罕见病毒的感染者可能不到 0.01%,模型在这种分布下连少数类长什么样都学不好。这一节先对比类别平衡与类别不平衡的数据集,说明不平衡为什么难训(小批次里可能一个少数类样本 …
第6.5节 数据集的划分
模型训练完成不等于模型真正可用。这一节讲数据该怎么切:先看最朴素的两分法——训练集加测试集,并指出它的致命缺陷(反复拿测试集调超参数,模型会悄悄地把测试集本身也拟合进去);再引出第三份数据验证集,给出「训练 → 在验证集上评估 → 据此调整 …
第6.6节 数据集的转换
模型只认浮点数,可你的数据里躺着的大多是字符串和五花八门的原始值。这一节讲清数据进模型前的最后一道工序:先把非浮点特征(比如街道名这样的字符串)转成浮点表示,再对大多数本来就是浮点数的特征做归一化,把它们收敛到受约束的区间里以改善训练;顺带 …
第6.7节 模型的泛化
模型在训练集上刷出高分,跟模型在真实世界里真能用,是两件事。这一节用一个「外星游客学语言」的故事把这件事讲透:泛化指的是模型面对全新、没见过的数据依然能给出高质量预测的能力,可训练数据永远只是真实世界的极小切片;一旦模型死板地记住了已见数据 …
第6.8节 模型的过拟合现象
模型在训练集上近乎满分,换到新数据却一塌糊涂——这就是过拟合。这一节用一组「健康树与病树」的散点图把这个现象讲透:一个过于复杂的模型能把训练集里的每棵树都分对,可同一套边界套到测试集的新样本上就错误百出;再把欠拟合、拟合、过拟合摆到一张曲线 …
第6.9节 模型的复杂度
复杂的模型不一定更好。这一节接着上一节那批树做实验:把那套把训练集分得漂亮的复杂形状换成一条直线,结果在新数据上的预测反而更准;再把这个偏好追溯到奥卡姆剃刀,点出「复杂模型赢训练集、简单模型赢测试集」这条关键结论。然后引出正则化——模型要同 …
第6.10节 $L_2$ 正则化
上一节说正则化是给复杂度加惩罚,可复杂度到底怎么量、惩罚要加多狠,这一节给出答案。先用一个六权重的小例子把 $L_2$ 正则化算给你看:越接近零的权重影响越小,个别大权重却能独揽九成以上的复杂度;而 $L_2$ 正则化会把权重往零推,却永远 …
第6.11节 解读损失曲线
训练时盯着损失曲线,是判断模型状态最直接的办法。问题是曲线画出来未必好看——它可能剧烈振荡、突然跳升、训练与测试走势背离,或者干脆卡在原地抖个不停。这一节不推公式,直接摊开四张真实的损失曲线,训练「看图下判断」的直觉:曲线振荡,先查数据再降 …
第6.12节 过拟合模块随堂测验(10分钟)
五道题、答对四道即通过——这一节用课程原版随堂测验把「数据集、泛化与过拟合」整章串起来验收一遍:先考平稳数据集怎么认(贝多芬交响曲的音符目录算平稳,西雅图降雨量、垃圾邮件高频词、影院每日售票量都不算),再考缺失值该删还是该补(2500 条里 …