评估与指标

留出法与交叉验证(holdout vs cross-validation)

/ HOLD-out vurs kross-val-ih-DAY-shun /

你没法公平地用模型学过的那批样本去给它打分——那就好比用「学生早已拿到答案的那几道原题」去考他们。所以你得扣下一部分数据。留出法把这件事只做一次:把数据切开,比方说80%用来训练、20%搁在一边,然后只在那块没碰过的20%上给模型打分。简单、快,而且在你数据充裕时,这就是对的做法。

交叉验证是它更彻底的表亲,用于数据稀缺、单单一次切分可能恰好走运或恰好倒霉的场合。在k折交叉验证里,你把数据切成k个相等的份——比方说5份。你用其中4份训练、在第5份上测试,然后轮换,让每一份都轮流当一次测试集。每个样本都恰好当一次测试案例,最后你把这5个分数平均起来。回报是一个更稳定、更可信的估计,外加一份「分数会因为你扣下了哪批数据而抖动多少」的感觉。

权衡很清楚。留出法便宜,但它的判决可能系于一次切分的运气;交叉验证可靠得多,但要付出k倍的计算量,因为你把模型整整训练了k遍。对于非常大的数据集或昂贵的模型,单单一次大的留出通常就够了。藏在两者之下的更深一条规则是:任何你用来做决定的数据——挑模型、调参数——都被污染了,所以一个真正最终的、从未碰过的测试集,应该留到最后的最后。

面对100份病历,单单一次80/20的留出只在20个人身上测试——一个特殊的病人就能让分数大幅摆动。5折交叉验证则在全部100人身上测试(每次20个,共五轮),并报告平均值,从而对「模型究竟泛化得如何」给出一个更稳的判读。

交叉验证让每个样本都当一次测试案例,把单次切分的运气平均掉。

一个微妙而代价高昂的错误:如果你反复用同一个留出集或交叉验证集去调模型,那个集合就悄悄不再是公平的测试了——你已经通过自己的选择把信息泄露进去了。要另留一个独立的、从不触碰的测试集,用于最终那一锤定音的判决。

又称
留出法交叉验证交叉驗證holdoutk-fold cross-validationk折交叉验证k折交叉驗證