交叉验证

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

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

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

为什么交叉验证很重要?

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

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

常见交叉验证技术

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

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

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

MATLAB交叉验证

MATLAB®支持交叉验证和机器学习。可以将这些交叉验证技术中的一些用于分类学习者App(34)回归学习者App(3:42)

用于培训的分类学习者应用程序

用于训练、验证和调整分类模型的分类学习者应用程序。历史列表显示了各种分类器类型。

用于培训的回归学习者应用程序

用于训练、验证和调整回归模型的回归学习者应用程序。历史列表包括各种回归模型类型。

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

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

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

Baidu
map