交叉验证

从数据中进行推断、估计和决策

你不能用模型的训练误差来评判它;它已经见过那些数据,所以可以靠死记硬背来作弊。你需要的是它在从未见过的数据上的误差。但单独留出一个测试集会浪费数据,而且给出的估计很不稳定。交叉验证同时解决了这两个问题。

在k 折交叉验证中,把数据分成 k 个大小相等的折。在其中 k−1 折上训练,在留出的那一折上验证,然后轮换,使每一折恰好充当一次验证集。对这 k 个验证误差取平均,就能稳定地估计模型的泛化能力。

交叉验证就像参加几场模拟考试来预测你的真实考试成绩。如果你只给自己已经背下答案的问题评分,你就会严重高估自己,所以你每次都要预留出一批全新的问题,并在这些问题上给自己打分,然后轮换保留哪一批。对你在所有模拟考试中的分数进行平均,能够比任何单一的模拟考试更稳定地预测你当天的表现。

在机器学习中的应用交叉验证是机器学习从业者在不自欺欺人的前提下选择模型和超参数的方法。它高效地利用所有数据来估计泛化误差(偏差—方差分解所关注的那个量)。它也是对抗数据泄露的第一道防线:这种隐蔽的 bug 会让测试分布的信息悄悄混入训练,产生漂亮却完全虚假的验证分数。
▶ 交叉验证
← 偏差-方差分解评估指标 →