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次分层验证等等。

目录
相关文章
|
1月前
|
机器学习/深度学习 监控
大模型开发:你如何在保持模型性能的同时减少过拟合的风险?
为应对大模型过拟合,采用正则化(L1/L2/Dropout)、早期停止训练以监控验证集性能,通过数据增强提升模型泛化能力,选择适合问题复杂度的模型,使用集成方法(如Bagging/Boosting)增强稳定性,以及利用预训练模型进行迁移学习。这些策略结合使用能有效降低过拟合风险,提高模型泛化性能。
74 2
|
1月前
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
565 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
10天前
|
机器学习/深度学习 数据采集 前端开发
深入探讨模型泛化能力的概念、重要性以及如何通过交叉验证来有效评估和提升模型的泛化能力
【6月更文挑战第13天】本文探讨了机器学习中模型泛化能力的重要性,它是模型对未知数据预测的准确性。过拟合和欠拟合影响泛化能力,而交叉验证是评估模型性能的有效工具。通过K折交叉验证等方法,可以发现并优化模型,提高泛化能力。建议包括调整模型参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
56 7
|
25天前
|
数据采集 数据安全/隐私保护 开发者
|
3天前
|
测试技术 持续交付
提升软件测试效率与准确性的策略探究
【5月更文挑战第50天】 在快速发展的数字时代,高质量的软件产品是企业竞争力的关键。本文聚焦于软件测试流程的优化,旨在探讨如何通过采用先进的测试工具、实施自动化测试策略以及持续集成和交付(CI/CD)来提升测试效率与准确性。通过对当前软件测试领域的挑战进行深入分析,并结合最新的技术趋势,本文提出了一系列创新的测试方法,以帮助测试团队更高效地发现和修复缺陷,确保软件产品的质量和可靠性。
|
28天前
|
数据采集 机器学习/深度学习
|
27天前
|
机器学习/深度学习 监控 数据可视化
模型评估
“【5月更文挑战第27天】”
24 2
|
1月前
|
机器学习/深度学习 算法 数据挖掘
如何评估模型性能以进行模型选择?
【5月更文挑战第4天】如何评估模型性能以进行模型选择?
44 5
|
23天前
|
监控 jenkins 测试技术
提升软件测试效率与准确性的策略分析
【5月更文挑战第31天】 在软件开发生命周期中,测试工作占据了举足轻重的地位。本文旨在探讨提高软件测试效率和准确性的有效策略。通过对自动化测试工具的选择、测试用例的优化设计、持续集成系统的整合以及性能测试的关键指标分析,本文提出了一系列创新的方法和实践建议。这些策略不仅能够减少人力资源消耗,还能显著提高软件产品的质量和稳定性。
|
1月前
|
机器学习/深度学习 算法
如何评估使用PyBrain训练的模型性能
使用PyBrain训练模型的性能评估包括:混淆矩阵(TP, TN, FP, FN, 准确率)、性能度量(准确率, 错误率)、泛化能力、数据集划分(训练集与测试集误差)以及其他指标如计算速度和鲁棒性。评估过程需综合考虑多种方法,并依据业务需求和模型类型选择合适的方式。
20 3

相关实验场景

更多