R 中的交叉验证:使用、模型和测量

已发表: 2020-10-19

当您踏上数据科学和机器学习世界的旅程时,总是倾向于从模型创建和算法开始。 您倾向于避免学习或知道如何在真实数据中测试模型的有效性。

R 中的交叉验证是一种模型验证,它通过优先考虑数据子集并理解偏差或方差权衡来改进保留验证过程,以便在应用超出我们训练的数据时获得对模型性能的良好理解在。 本文将作为数据模型验证的自始至终指南,并阐明模型验证的必要性。

目录

学习模型的不稳定性

为了理解这一点,我们将使用这些图片来说明各种模型的学习曲线拟合:

资源

我们在这里展示了文章价格依赖于大小的学习模型。

我们在这些之间建立了一个线性变换方程来显示这些图。

从训练集点来看,第一个图是错误的。 因此,在测试集上,它的表现并不好。 所以,我们可以说这是“欠拟合”。 在这里,模型无法理解数据中的实际模式。

下图显示了价格对大小的正确依赖性。 它描述了最小的训练错误。 因此,这种关系是广义的。

在最后一个图中,我们建立了一个几乎没有训练误差的关系。 我们通过考虑数据点的每个波动和噪声来建立这种关系。 数据模型非常脆弱。 拟合会自行安排以最小化误差,从而在给定数据集中生成复杂的模式。 这被称为“过度拟合”。 在这里,训练集和测试集之间可能存在更大的差异。

在数据科学的世界中,在各种模型中,总有人在寻找性能更好的模型。 但有时,很难理解这种提高的分数是因为更好地捕捉到了关系,还是仅仅因为数据过度拟合。 我们使用这些验证技术来获得正确的解决方案。 因此,我们还通过这些技术获得了更好的泛化模式。

什么是过拟合和欠拟合?

机器学习中的欠拟合是指捕获不足的模式。 当我们在训练集和测试集上运行模型时,它的表现非常糟糕。

机器学习中的过度拟合意味着捕获噪声和模式。 这些不能很好地推广到没有经过训练的数据。 当我们在训练集上运行模型时,它表现得非常好,但在测试集上运行时表现不佳。

什么是交叉验证?

交叉验证旨在测试模型对未用于估计的新数据进行预测的能力,以便标记过度拟合或选择偏差等问题。 此外,还给出了关于数据库泛化的见解。

组织交叉验证的步骤

  1. 我们保留一个数据集作为样本。
  2. 我们使用数据集的另一部分进行模型训练。
  3. 我们使用保留的样本集进行测试。 这组有助于量化模型的引人注目的性能。

统计模型验证

在统计中,模型验证确认统计模型的可接受输出是从真实数据生成的。 它确保统计模型输出来自数据生成过程的输出,以便彻底处理程序的主要目标。

验证通常不仅对模型构建中使用的数据进行评估,而且还使用构建中未使用的数据。 因此,验证通常会测试模型的一些预测。

交叉验证有什么用?

交叉验证主要用于应用机器学习,以估计模型对未来数据的技能。 也就是说,我们使用给定的样本来估计模型在模型训练期间对未使用的数据进行预测时通常预期的表现。

交叉验证会减少过拟合吗?

交叉验证是防止过度拟合的强有力的保护措施。 这个想法是我们使用我们在训练集中使用的初始数据来获得许多较小的训练测试分割。 然后我们使用这些拆分来调整我们的模型。 在正常的 k-fold交叉验证中,我们将数据分成 k 个子集,然后称为折叠。

阅读:印度的 R 开发人员薪水

R中用于交叉验证的方法

数据科学家有许多方法用于交叉验证性能。 我们在这里讨论其中的一些。

1. 验证集方法

验证集方法是一种通过创建测试数据集来估计模型中错误率的方法。 我们使用另一组观察结果构建模型,也称为训练数据集。 然后将模型结果应用于测试数据集。 然后我们可以计算测试数据集的误差。 因此,它允许模型不会过度拟合。

代码:

我们编写了上面的代码来创建一个训练数据集和一个不同的测试数据集。 因此,我们使用训练数据集来构建预测模型。 然后将其应用于测试数据集以检查错误率。

2. 留一法交叉验证(LOOCV)

留一法交叉验证(LOOCV)是某种多维类型的 k 折交叉验证 这里的折叠数和数据集中的实例数是相同的。 对于每个实例,学习算法只运行一次。 在统计学中,有一个类似的过程称为折刀估计。

R 代码片段:

我们可以省略一些训练示例,这将为每次迭代创建一个相同大小的验证集。 这个过程被称为LPOCV(Leave P Out Cross Validation)

3. k 折交叉验证

在有限的数据样本中使用重采样程序来评估机器学习模型。

该过程从定义单个参数开始,该参数指的是给定数据样本要拆分的组数。 因此,这个过程被命名为 k-fold Cross-Validation

数据科学家经常在应用机器学习中使用交叉验证来估计机器学习模型在未使用数据上的特征。

理解起来比较简单。 它通常会导致对模型技能的偏差较小或过度拟合的估计,例如简单的训练集或测试集。

一般程序由几个简单的步骤组成:

  1. 我们必须混合数据集以使其随机化。
  2. 然后我们将数据集分成大小相似的 k 组。
  3. 对于每个唯一组:

我们必须将一个组作为一个特定的测试数据集。 然后我们将所有剩余的组视为一个完整的训练数据集。 然后我们在训练集上拟合一个模型并确认结果。 我们在测试集上运行它。 我们记下评估分数。

R代码片段:

4. 分层 k 折交叉验证

分层是对数据的重新排列,以确保每个折叠都是有益的代表。 考虑一个二元分类问题,每类有 50% 的数据。

在处理偏差和方差时,分层 k 折交叉验证是最好的方法。

R 代码片段:

5. 对抗性验证

基本思想是检查特征相似性的百分比及其在训练和测试之间的分布。 如果它们不容易区分,那么分布无论如何都是相似的,并且一般的验证方法应该可行。

在处理实际数据集时,有时测试集和训练集有很大不同。 内部交叉验证技术生成分数,而不是在测试分数的范围内。 在这里,对抗性验证开始发挥作用。

它检查有关特征分布的训练和测试中的相似度。 此验证的特点是合并训练集和测试集,标记零或一(零 - 训练,一测试),以及分析二进制分数的分类任务。

我们必须创建一个新的目标变量,训练集中的每一行为 1,测试集中的每一行为 0。

现在我们结合训练和测试数据集。

使用上面新创建的目标变量,我们拟合一个分类模型并预测每一行在测试集中的概率。

6.时间序列的交叉验证

时间序列数据集不能随机拆分,因为时间段会弄乱数据。 在时间序列问题中,我们执行如下所示的交叉验证

对于时间序列交叉验证,我们以转发链的方式创建折叠。

例如,如果对于 n 年,我们有一个特定产品的年度消费者需求的时间序列。 我们做这样的折叠:

折叠 1:训练组 1,测试组 2

fold 2:训练组 1,2,测试组 3

fold 3:训练组 1,2,3,测试组 4

fold 4:训练组 1,2,3,4,测试组 5

5折:训练组1、2、3、4、5,测试组6

.

.

.

fold n:训练组 1 到 n-1,测试组 n

逐步选择新的训练集和测试集。 最初,我们从一个训练集开始,该训练集具有拟合模型所需的最少观察次数。 逐渐地,随着每一折,我们改变我们的训练和测试集。

R 代码片段:

h = 1 意味着我们考虑了提前 1 步预测的误差。

学习世界顶尖大学的数据科学课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

如何衡量模型的偏差方差?

通过 k-fold Cross-Validation ,我们获得了各种 k 模型估计误差。 对于理想模型,误差总和为零。 为了使模型返回其偏差,所有误差的平均值被取并缩放。 该模型认为较低的平均值是可观的。

对于模型方差计算,我们取所有误差的标准差。 如果标准偏差很小,我们的模型不会随着训练数据的不同子集而变化。

重点应该是在偏差和方差之间取得平衡。 如果我们减少方差并控制模型偏差,我们可以在一定程度上达到平衡。 它最终会为更好的预测建立一个模型。

另请阅读: Python 中的交叉验证:您需要知道的一切

包起来

在本文中,我们讨论了交叉验证及其在 R 中的应用。我们还学习了避免过度拟合的方法。 我们还讨论了不同的过程,例如验证集方法、LOOCV、k-fold Cross-Validation和分层 k-fold,然后是在 Iris 数据集上执行的每种方法在 R 中的实现。

什么是 R 编程?

R 编程是一种计算语言和软件设置,可用于数学分析、图形表示和报告。 它是由 Ross Ihaka 和 Robert Gentleman 在新西兰奥克兰大学发明的,目前 R 开发核心团队正在开发它。 R 编程是一个在 GNU 许可下开放可用的软件,并且可以使用用于多个操作系统的预编译二进制版本。

哪里需要交叉验证?

当我们无法将模型拟合到机器学习中的训练数据上时,我们无法保证模型能够在真实数据上有效运行。 为此,我们必须保证我们的模型从数据中提取了正确的模式并且不会产生过多的噪声。 为此,我们使用交叉验证方法。 我们可以保证我们的模型具有正确的数据模式,并且不会通过交叉验证产生过多的噪声。

R的应用有哪些?

R 编程用于广泛的行业。 统计人员和学生使用 R 进行统计计算和分析。银行、医疗保健、制造、IT 部门、金融、电子商务和社交媒体等不同部门都使用 R 编程语言。 R 甚至用于记录保存和人口普查处理等政府目的。