5种常用的交叉验证技术,保证评估模型的稳定性

简介: 5种常用的交叉验证技术,保证评估模型的稳定性

Kaggle的数据科学黑客大会最有趣和最具挑战性的一件事是:在公共和私有的排行榜中,努力保持同样的排名。当我的结果在一个私有的排行榜进行验证时,我就失去了共有的排名。

image.png

你有没有想过是什么原因导致了这些排名的高差异?换句话说,为什么一个模型在私有排行榜上评估时会失去稳定性?

在本文中,我们将讨论可能的原因。我们还将学习交叉验证和执行它的各种方法。

模型的稳定性?

总是需要验证你的机器学习模型的稳定性。换句话说,你不能把这个模型与你的训练数据相匹配,并预测它的未来日期,然后希望它每次都能准确地给出结果。我之所以强调这一点是因为每次模型预测未来的日期,它都是基于看不见的数据,这些数据可能与训练数据不同。如果训练模型不能从你的训练数据中捕捉趋势,那么它可能会在测试集上过度拟合或不拟合。换句话说,可能会有高的方差或偏差。

让我们通过一个例子来进一步了解模型的稳定性。

在这个例子中,我们试图找出一个人购买汽车与否的关系,这取决于他的收入。为此,我们采取了以下步骤:

我们用一个线性方程建立了买车与否和个人收入之间的关系。假设你有2010年到2019年的数据,并试图预测2020年。您已经根据可用的列车数据训练了您的模型。

image.png

在第一个图中,我们可以说,该模型捕捉到了训练数据的每一个趋势,包括噪音。该模型的精度非常高,误差极小。这被称为过拟合,因为模型已经考虑了数据点的每一个偏差(包括噪声),而且模型太敏感,只能捕获当前数据集中出现的每一个模式。正是由于这个原因,可能会产生高偏差。

在第二个图中,我们只是找到了两个变量之间的最优关系,即低训练误差和更一般化的关系。

在第三个图中,我们发现该模型在列车数据上表现不佳,精度较低,误差%较大。因此,这种模式不会有很好的表现。这是不合适的典型例子。在这种情况下,我们的模型无法捕捉训练数据的潜在趋势。

在Kaggle的许多机器学习比赛中常见的做法是在不同的模型上进行迭代,以寻找一个性能更好的模型。然而,很难区分分数的提高是因为我们更好地捕捉了变量之间的关系,还是我们只是过度拟合了训练数据。为了更多地了解这一点,机器学习论坛上的许多人使用了各种验证技术。这有助于实现更一般化的关系,并维护模型的稳定性。

交叉验证是什么?

交叉验证是一种在机器学习中用于评估机器学习模型性能的统计验证技术。它使用数据集的子集,对其进行训练,然后使用未用于训练的数据集的互补子集来评估模型的性能。它可以保证模型正确地从数据中捕获模式,而不考虑来自数据的干扰。

交叉验证使用的标准步骤:

  • 它将数据集分为训练和测试两部分。
  • 它在训练数据集上训练模型。
  • 它在测试集中评估相同的模型。
  • 交叉验证技术可以有不同的风格。

交叉验证中使用的各种方法

Train_Test_Split

image.png

这是一种基本的交叉验证技术。在这种技术中,我们使用数据的一个子集作为模型训练的训练数据,并在另一组被称为测试集的数据上评估模型的性能,如图所示。误差估计然后告诉我们的模型在看不见的数据或测试集上的表现。这是一种简单的交叉验证技术,也被称为验证方法。这种技术存在差异大的问题。这是因为不确定哪些数据点会出现在测试集或训练集&这会导致巨大的方差,而且不同的集合可能会产生完全不同的结果。

n次交叉验证/ k次交叉验证

image.png

总有需要大量的数据来训练模型,将测试数据集的一部分可以离开不理解的模型数据的模式可能会导致错误,也可能导致增加欠拟合模型的测试数据。为了克服这个问题,有一种交叉验证技术,它为模型的训练提供了充足的数据,也为验证留下了充足的数据。K折叠交叉验证正是这样做的。

n次交叉验证涉及的步骤:

  1. 基于N- fold分割你的整个数据集。
  2. 对于数据集中的每n次折叠,在数据集的N-1次折叠上构建模型。然后,对模型进行检验,检验n次折叠的有效性
  3. 在预测中记录每次迭代的错误。重复这个步骤,直到每一个n -fold都作为测试集
  4. 你的N个记录错误的平均值被称为交叉验证错误,它将作为模型的性能度量。

例如:

假设数据有100个数据点。基于这100个数据点,你想预测下一个数据点。然后可以使用100条记录进行交叉验证。假设折叠次数(N) = 10。

  1. 100个数据点被分成10个桶,每个桶有10条记录。
  2. 在这里,根据数据和N值创建了10个折叠。现在,在10次折叠中,9次折叠会被用作你的训练数据并在10次折叠
  3. 测试你的模型。迭代这个过程,直到每次折叠都成为您的测试。计算你在所有折叠上选择的度规的平均值。这个度量将有助于更好地一般化模型,并增加模型的稳定性。

交叉验证(LOOCV)

在这种方法中,我们将现有数据集中的一个数据点放在一边,并在其余数据上训练模型。这个过程迭代,直到每个数据点被用作测试集。这也有它的优点和缺点。让我们来看看它们:

image.png

我们利用所有的数据点,因此偏差会很低

我们根据数据集中可用的数据点的数量重复n次交叉验证过程,这会导致更高的执行时间和更高的计算量。

由于我们只对一个数据点进行测试,如果该测试数据点是一个离群点,可能会导致较高的误差%,因此我们不能基于这种技术对模型进行推广。

分层n倍交叉验证

在某些情况下,数据可能有很大的不平衡。对于这类数据,我们使用了不同的交叉验证技术,即分层n次交叉验证,即每一次交叉验证都是平衡的,并且包含每个类的样本数量大致相同。分层是一种重新安排数据的技术,以确保每一褶都能很好地代表数据中出现的所有类。

例如,在关于个人收入预测的dataset中,可能有大量的人低于或高于50K。最好的安排总是使数据在每个折叠中包含每个类的几乎一半实例。

时间序列的交叉认证

将时间序列数据随机分割为折叠数是行不通的,因为这种类型的数据是依赖于时间的。对这类数据的交叉验证应该跨时间进行。对于一个时间序列预测问题,我们采用以下方法进行交叉验证。

时间序列交叉验证的折叠以向前链接的方式创建。

image.png

例如,假设我们有一个时间序列,显示了一家公司2014年至2019年6年间的年汽车需求。折叠的创建方式如下:

Train 1— [2014]
Test 1— [2015]
Train2–[2014,2015]
Test2 — [2016]….so on

image.png

我们逐步地选择一个新的列车和测试集。我们选择一个列车集,它具有最小的观测量来拟合模型。逐步地,我们在每个折叠中改变我们的列车和测试集。

总结

在本文中,我们讨论了过拟合、欠拟合、模型稳定性和各种交叉验证技术,以避免过拟合和欠拟合。我们还研究了不同的交叉验证技术,如验证方法、LOOCV、n次交叉验证、n次分层验证等等。

目录
相关文章
|
10月前
|
机器学习/深度学习 监控
大模型开发:你如何在保持模型性能的同时减少过拟合的风险?
为应对大模型过拟合,采用正则化(L1/L2/Dropout)、早期停止训练以监控验证集性能,通过数据增强提升模型泛化能力,选择适合问题复杂度的模型,使用集成方法(如Bagging/Boosting)增强稳定性,以及利用预训练模型进行迁移学习。这些策略结合使用能有效降低过拟合风险,提高模型泛化性能。
394 2
|
2月前
|
机器学习/深度学习 PyTorch 测试技术
LossVal:一种集成于损失函数的高效数据价值评估方法
LossVal是一种创新的机器学习方法,通过在损失函数中引入实例级权重,直接在训练过程中评估数据点的重要性,避免了传统方法中反复重训练模型的高计算成本。该方法适用于回归和分类任务,利用最优传输距离优化权重,确保模型更多地从高质量数据中学习。实验表明,LossVal在噪声样本检测和高价值数据点移除等任务上表现优异,具有更低的时间复杂度和更稳定的性能。论文及代码已开源,为数据价值评估提供了高效的新途径。
98 13
LossVal:一种集成于损失函数的高效数据价值评估方法
|
3月前
|
机器学习/深度学习 数据采集 人工智能
《大模型训练成本高,如何在不牺牲性能的前提下破局》
在人工智能领域,大模型训练成本高昂,主要源于硬件设备、数据处理和算法优化的需求。降低训练成本的关键在于合理配置硬件资源、改进数据处理方法、优化算法和模型结构,以及采用分布式训练技术。通过这些措施,企业可以在不影响模型性能的前提下,显著减少计算资源、人力和时间的投入,实现更高效的模型训练。实践证明,综合运用这些方法能够有效降低成本,推动人工智能技术的可持续发展。
249 18
|
3月前
|
存储 人工智能 运维
大模型训练稳定性思考和实践
本次分享由阿里云智能集团高级技术专家张彭城主讲,聚焦大模型训练的稳定性问题。主要内容分为三部分:1) 大模型训练稳定性的关键挑战,包括大规模同步任务中的故障率高和恢复成本大;2) 阿里云大模型训练稳定性系统的介绍,涵盖健康检测、实时可观测系统及自愈系统;3) 实践分享,探讨集群网络故障定位与修复、性能优化等实际问题的解决方案。通过这些措施,确保大模型训练的高效与稳定。
|
4月前
|
机器学习/深度学习 监控
在进行多任务学习时,确保模型不会过度拟合单一任务而忽视其他任务
多任务学习(MTL)中,为避免模型过度拟合单一任务,可采取任务权重平衡、损失函数设计、正则化、早停法、交叉验证、任务无关特征学习、模型架构选择、数据增强、任务特定组件、梯度归一化、模型集成、任务选择性训练、性能监控、超参数调整、多任务学习策略、领域适应性和模型解释性分析等策略,以提高模型泛化能力和整体表现。
|
9月前
|
机器学习/深度学习 数据采集 前端开发
深入探讨模型泛化能力的概念、重要性以及如何通过交叉验证来有效评估和提升模型的泛化能力
【6月更文挑战第13天】本文探讨了机器学习中模型泛化能力的重要性,它是模型对未知数据预测的准确性。过拟合和欠拟合影响泛化能力,而交叉验证是评估模型性能的有效工具。通过K折交叉验证等方法,可以发现并优化模型,提高泛化能力。建议包括调整模型参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
719 7
|
4月前
|
自然语言处理 前端开发
如何评估一个基于MLM的模型在特定任务上的性能?
如何评估一个基于MLM的模型在特定任务上的性能?
|
10月前
|
数据采集 数据安全/隐私保护 开发者
|
7月前
|
监控 测试技术
在模型训练中,如何衡量和平衡通用性和特定任务需求的重要性?
在模型训练中,如何衡量和平衡通用性和特定任务需求的重要性?
114 2
|
7月前
|
机器学习/深度学习 监控
在进行多任务学习时,如何确保模型不会过度拟合单一任务而忽视其他任务?
在进行多任务学习时,如何确保模型不会过度拟合单一任务而忽视其他任务?