Cross-Validation
了解交叉验证如何提高模型泛化能力并防止过拟合。发现如何使用 Ultralytics YOLO26 实现 K-Fold 评估以获得稳健的 ML。
交叉验证是一种稳健的统计重采样程序,用于评估机器学习 (ML)模型在有限数据样本上的性能。与将数据拆分为单个训练集和测试集的标准留出法不同,交叉验证涉及将数据集划分为多个子集,以确保每个数据点都用于训练和验证。该技术对于评估统计分析的结果将如何推广到独立数据集至关重要,有助于检测过拟合,即模型可能记住训练样本而不是学习可推广的模式。
K 折交叉验证的机制#
该技术最广泛使用的变体是K折交叉验证。在此过程中,整个数据集被随机划分为 k 个大小相等的组或“折”。然后重复训练过程 k 次。在每次迭代中,单个折用作测试模型的验证数据,而其余的 k-1 折用作训练数据。
最终的性能指标通常通过对每个循环获得的分数(例如准确率、精确率或平均精度均值 (mAP))求平均值来计算。这种方法显着减少了与训练-测试拆分的单个试验相关的方差,从而提供了对泛化误差更可靠的估计。它确保评估不会因测试数据的任意选择而产生偏差。
使用 Ultralytics 进行实现#
在使用较小的数据集或执行严格的超参数调整时,交叉验证尤其有用。虽然像PyTorch这样的现代深度学习框架促进了训练循环,但管理折叠需要仔细的数据准备。
以下示例演示了如何使用YOLO26 model遍历用于 5 折交叉验证实验的预生成 YAML 配置文件。这假设你已经将数据集拆分为五个单独的配置文件。
from ultralytics import YOLO
# List of dataset configuration files representing 5 folds
fold_yamls = [f"dataset_fold_{i}.yaml" for i in range(5)]
for i, yaml_file in enumerate(fold_yamls):
# Load a fresh YOLO26 Nano model for each fold
model = YOLO("yolo26n.pt")
# Train the model, saving results to a unique project directory
results = model.train(data=yaml_file, epochs=20, project="cv_experiment", name=f"fold_{i}")有关深入了解自动化拆分生成的更多信息,请参阅关于K折交叉验证的指南。
实际应用#
在数据稀缺、收集成本高昂或需要安全关键可靠性的行业中,交叉验证是不可或缺的。
- **医学诊断:**在医学图像分析中,罕见病数据集通常很小。单个验证拆分可能会意外排除疑难病例或罕见病理。通过使用交叉验证,开发医疗领域的 AI 的研究人员确保针对每个可用的患者扫描测试其诊断模型,从而验证系统在各种不同人口统计学和设备类型下均能正常工作。
- **精细农业:**户外环境的环境条件差异很大。针对作物病害检测训练的模型可能在晴天表现良好,但在阴天时可能会失败(如果这些图像仅存在于训练集中)。交叉验证确保模型对此类变化具有鲁棒性,帮助农民依赖自动机器学习 (AutoML)工具进行持续监控,而不受天气条件的影响。
模型开发中的战略优势#
将交叉验证集成到AI 开发生命周期中,可以为偏差-方差权衡提供关键见解。
-
稳定性评估: 如果性能指标在不同折之间差异显著,则表明模型对用于训练的特定数据点高度敏感,暗示其具有高方差。
-
数据效率: 它最大化了有限数据的效用,因为每个观测值最终都用于训练和验证。
区分相关概念#
区分交叉验证与其他评估术语非常重要:
- **与留出验证的对比:**留出法涉及单个拆分(例如 80/20)。虽然速度更快且适用于像ImageNet这样的大型数据集,但对于较小的数据集,它在统计学上的稳健性不如交叉验证。
- 与自助法的对比:自助法涉及有放回的随机抽样,而 K 折交叉验证则在无放回的情况下对数据进行分区(每个样本恰好在一个折中)。
管理来自多个折的工件、指标和模型可能很复杂。Ultralytics 平台通过提供集中的实验跟踪简化了此过程,使团队能够比较不同折之间的性能并轻松可视化模型评估洞察。






