深圳Yolo 视觉
深圳
立即加入
词汇表

交叉验证

了解交叉验证如何提高模型泛化能力并防止过拟合。探索如何使用 Ultralytics YOLO26 实现 K-Fold 评估以实现稳健的 ML。

交叉验证是一种稳健的统计重采样过程,用于评估在有限数据样本上 机器学习 (ML) 模型的性能。与将数据划分为单个训练集和测试集的标准留出法不同,交叉验证涉及将 数据集 划分为多个子集,以确保每个数据点都用于训练和验证。这种技术对于评估统计分析结果如何泛化到独立数据集至关重要,有助于检测模型可能记忆训练示例而非学习可泛化模式的 过拟合 问题。

K折交叉验证的机制

该技术最广泛使用的变体是K折交叉验证。在此过程中,整个数据集被随机划分为k个大小相等的组,即“折”。然后,训练过程重复k次。在每次迭代中,一个折作为验证数据用于测试模型,而剩余的k-1个折则作为训练数据

最终性能指标通常通过平均每次循环获得的分数来计算,例如准确率精确率平均精确度 (mAP)。这种方法显著减少了与单次训练-测试分割试验相关的方差,提供了对泛化误差更可靠的估计。它确保评估不会因测试数据的任意选择而产生偏差。

利用Ultralytics实施

交叉验证在处理较小数据集或进行严格的 超参数调优 时特别有用。尽管像 PyTorch 这样的现代深度学习框架简化了训练循环,但管理折叠需要仔细的数据准备。

以下示例演示了如何迭代预生成的yaml配置文件,以使用YOLO26模型进行5折交叉验证实验。这假设您已将数据集拆分为五个独立的配置文件。

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折交叉验证指南。

实际应用

交叉验证在数据稀缺、收集成本高昂或需要安全关键可靠性的行业中不可或缺。

  • 医疗诊断:medical image analysis中,罕见疾病的数据集通常很小。单一的验证分割可能会意外排除疑难病例或罕见病理。通过使用交叉验证,开发AI in healthcare的研究人员确保其诊断模型针对每个可用的患者扫描进行测试,验证系统在不同人群和设备类型中均能正常工作。
  • 精准农业:户外环境条件变化剧烈。针对crop disease detection训练的模型可能在晴天表现良好,但如果这些图像仅存在于训练集中,则在阴天可能会失效。交叉验证确保模型对这些变化具有鲁棒性,帮助农民依赖automated machine learning (AutoML)工具进行持续监测,无论天气状况如何。

模型开发的战略优势

将交叉验证整合到 AI 开发生命周期中,为 偏差-方差权衡提供了关键见解。

  1. 稳定性评估:如果性能指标在不同折之间差异显著,这表明模型对用于训练的特定数据点高度敏感,暗示存在高方差。
  2. 数据效率:它最大限度地利用有限数据,因为每个观测值最终都用于训练和验证。
  3. 超参数优化:它为选择最佳的 学习率批大小数据增强策略提供了可靠的基准,而无需“偷看”最终测试集。

区分相关概念

区分交叉验证与其他评估术语非常重要:

  • 对比留出验证: 留出法涉及单次分割(例如 80/20)。尽管它对于像 ImageNet 这样的大型数据集更快且适用,但对于较小的数据集,其统计稳健性不如交叉验证。
  • 对比自助法: 自助法 涉及有放回的随机抽样,而 K折交叉验证则无放回地划分数据(每个样本恰好在一个折中)。

管理来自多个折叠的工件、指标和模型可能很复杂。Ultralytics 平台 通过提供集中式实验 track,简化了这一过程,使团队能够轻松比较不同折叠的性能并可视化 模型评估洞察

让我们一起共建AI的未来!

开启您的机器学习未来之旅