数据与特征
训练/验证/测试集划分(train/validation/test split)
/ TRAYN val-ih-DAY-shun TEST split /
设想一位老师,想知道学生是真的学会了,还是只是背了下来。诀窍是:用一套题目来教,再用谁都没见过的题目来评分。划分数据集也是同样的道理:我们把它切成几堆相互独立的部分,好分辨真学习与死记硬背。
通常分成三堆。训练集(training set)是模型用来学习的部分——它会调整自身去拟合这些例子。验证集(validation set)是开发过程中用的「模拟考」,用来比较各种方案、调节旋钮(即超参数 hyperparameter),却不去偷看那场期末大考。测试集(test set)被锁起来,只在最后碰一次,用以诚实地估计模型面对从未见过的数据时会有怎样的表现。一种常见的粗略划分是训练70%、验证15%、测试15%,但具体比例会因情况而异。
为何重要:如果你用模型学过的那些例子来给它打分,它靠死记就能得到近乎满分——这个陷阱叫过拟合(overfitting)——可一遇到新东西就毫无用处。这种划分是让我们对模型真实能力保持诚实的基本纪律。头号铁律:测试集必须始终封存。哪怕只在它上面调过一次参数,你报出来的分数就成了过分乐观的虚构。
你有1万张已标注的X光片。你在7000张上训练,调试时观察各个模型变体在留出的1500张上的表现,等最终选定模型后,才在最后那1500张上跑一次——把这个分数作为真实的准确率报告出去。
三堆封存的数据:在训练集上学,在验证集上选,在测试集上只评判一次。
划分必须尊重数据本身的结构。对时间序列,要按日期划分(过去用于训练,未来用于测试);对成组的数据(同一位病人的许多照片),要把同一组整个留在一边——否则测试集会泄露信息,把模型衬托得过于好看。
又称
另见