评估和改进模型的预测性能

交叉验证是一种模型评估技术机器学习算法在对未经训练的新数据集进行预测时的性能。这是通过对已知数据集进行分区来完成的,使用一个子集来训练算法,并使用剩余的数据进行测试。

每一轮的交叉验证包括将原始数据集随机划分为训练集和一个测试组。然后使用训练集来训练监督式学习利用算法和测试集对其性能进行评价。这个过程重复了几次,平均交叉验证误差被用作一个性能指标。

为什么交叉验证很重要?

当训练一个模型时,重要的是不要用太复杂或太简单的算法过拟合或过拟合。您对训练集和测试集的选择对于降低这种风险至关重要。然而,划分数据集以最大限度地提高学习和测试结果的有效性是困难的。这就是交叉验证开始实施的地方。交叉验证提供了几种对数据进行不同分割的技术,以找到模型的最佳算法。

交叉验证也有助于选择性能最好的模型通过使用测试数据集计算误差,这没有被用来训练。测试数据集帮助计算模型的准确性,以及它将如何泛化未来的数据。

常见的交叉验证技术

交叉验证有许多技术可用。最常见的有:

  • k-fold:将数据随机分成k个大小大致相同的子集(或折叠)。其中一个子集用于验证使用其余子集训练的模型。这个过程重复k次,每个子集只被用于验证一次。所有k个分区的平均误差报告为ε。这是交叉验证最流行的技术之一,但是执行起来需要很长时间,因为模型需要反复训练。下图演示了这个过程。
  • 坚持:将数据按指定比例随机划分为两个子集,以进行训练和验证。该方法只执行一次训练和测试,减少了在大型数据集上的执行时间,但在小数据集上解释报告的错误时要谨慎。
  • Leaveout:使用k-fold方法对数据进行分区,其中k等于数据中的观察总数,所有数据将作为测试集使用一次。也称为留一交叉验证(LOOCV)。
  • 重复随机业者:创建多个随机数据分区,使用蒙特卡罗所有运行的方法论和聚合结果。这种技术的想法与k-fold类似,但每个测试集都是独立选择的,这意味着一些数据点可能被用于多次测试。
  • 分层:对数据进行分区,使训练集和测试集在响应或目标中具有大致相同的类比例。
  • Resubstitution:不对数据进行分区,所有数据用于模型的训练。通过将结果与实际值进行比较来评估误差。这种方法通常会对性能产生过于乐观的估计,如果有足够的数据,应该避免使用这种方法。

交叉验证可能是一个计算密集的操作,因为训练和验证要进行多次。然而,降低模型过拟合或欠拟合的风险是模型开发的关键步骤。因为每个分区集都是独立的,所以您可以并行执行此分析,以加快处理速度。对于较大的数据集,建议使用保留或重新替换等技术,而其他技术更适合较小的数据集,如k-fold和重复随机子抽样。

交叉验证与MATLAB

MATLAB®金宝app支持交叉验证和机器学习。可以使用其中一些交叉验证技术分类学习者应用回归学习者应用

Classification Learner应用程序,用于培训、验证和调整分类模型。历史列表显示了各种分类器类型。

回归学习者应用程序培训,验证和调整回归模型。历史记录列表包括各种回归模型类型。

为了加速计算密集型操作,您可以在多核计算机、gpu和集群上执行并行计算并行计算工具箱™

有关使用交叉验证的更多信息机器学习问题,请参见统计和机器学习工具箱™深度学习工具箱™使用MATLAB。

参见:统计和机器学习工具箱,机器学习,监督式学习,特征选择,正则化,线性模型,ROC曲线

机器学习的挑战:选择最佳分类模型和避免过拟合

机器学习问题的提问和回答:所有关于模型验证