交叉验证
交叉验证是一种重采样技术,用于估计模型对未见过的数据的泛化能力。
概述
It makes better use of limited data and gives a more reliable performance estimate than a single train/test split.
深入探讨
单个训练/测试分割是脆弱的:您获得的分数在很大程度上取决于哪些行恰好落在测试集中。交叉验证通过轮换测试集的角色来解决这个问题。在 k 折交叉验证中,您将数据划分为 k 个相等的折叠,对其中的 k-1 个进行训练,对保留的折叠进行评估,然后重复 k 次,以便每一行都被精确测试一次。对 k 分数进行平均可以得到更稳定的估计值以及变异性的度量。常见的选择是 5 折或 10 折。变体包括分层 k 折(保留不平衡数据的类比例)、留一法(k 等于样本数)以及从不训练未来来预测过去的时间序列分割。
技术洞察
交叉验证对于模型选择和超参数调整来说是最强大的:您可以通过平均验证分数来比较配置,而不是过度拟合一个分割。一个关键的陷阱是数据泄漏——任何“看到”整个数据集的预处理(缩放、特征选择、插补)都必须适合每个折叠,而不是在分割之前,否则你的估计将出现乐观偏差。嵌套交叉验证将调整与最终评估分开,以避免这种泄漏。
战略影响
更清晰的判决
它可以帮助您将清晰的技术声明与营销语言分开。
成本与预算
在花费金钱或时间之前,您可以提出更好的实施问题。
团队与工作流程
具有共同理解的团队可以做出更好的产品、政策和学习决策。
交叉验证的未来
随着数据集和模型的增长,运行 k 个完整的训练周期变得昂贵,因此从业者越来越倾向于使用单个大型保留验证集进行深度学习,同时为小型或表格数据集保留交叉验证。默认情况下,自动化 ML 和 scikit-learn 的 GridSearchCV 和 Optuna 等工具将交叉验证融入到超参数搜索中。对更便宜的近似、防泄漏管道以及分组、分层和时间相关数据的正确验证的研究仍在继续。
现实世界的实施
在采用一种模型之前,使用 5 倍交叉验证来比较逻辑回归、随机森林和梯度提升。
在不平衡的欺诈检测数据集上应用分层 k 折叠,使每个折叠保持大致相同的稀有类别比例。
运行 GridSearchCV 或 RandomizedSearchCV,交叉验证每个超参数组合以选择最佳设置。
使用时间序列(滚动/前向链接)交叉验证来评估库存或需求预测器,而无需对未来数据进行培训。
风险与防护栏
不同的团队可能会以不同的方式使用同一术语,因此请尽早定义范围。
基准测试可能看起来很强大,但实际性能却参差不齐。
忽视数据质量和评估计划通常会产生脆弱的结果。
实施路线图
从您需要的结果的简单语言定义开始。
在测试之前选择一种成功指标和一种失败条件。
使用代表性数据运行小型试点,而不是完善的演示集。
记录交叉验证在哪些方面有帮助以及在哪些方面更简单的方法更好。
不断探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Cross-Validation quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常见问题
What is Cross-Validation?
交叉验证是一种重采样技术,用于估计模型对未见过的数据的泛化能力。它可以更好地利用有限的数据,并提供比单个训练/测试分割更可靠的性能估计。
在标准的 k 折交叉验证中,每个数据点用于测试多少次?
在 k 轮中,每个折叠都恰好作为测试集一次,因此每个样本都会被测试一次,并在其余样本上进行训练。
与单次训练/测试分割相比,k 折交叉验证的主要优点是什么?
与依赖一次任意分割相比,通过对多次折叠进行平均,交叉验证减少了性能估计的方差。
为什么普通的k折交叉验证不适合时间序列预测?
混洗按时间排序的数据会将未来泄漏到训练中,因此时间序列 CV 使用仅根据过去的观察进行训练的前向链分割。