交叉验证的方法and用途

  • 前言
  • 一、交叉验证是啥
  • 二、交叉验证的方法
  • 1.简单交叉验证
  • 2.K 折交叉验证 (K-Fold Cross Validation)
  • 3.留一交叉验证 (Leave-one-out Cross Validation, LOOCV)
  • 三、交叉验证的用途
  • 1.模型评估
  • 2.模型选择(超参数选择)



前言

交叉验证是检验机器/深度学习模型好坏的非常重要的环节,以下主要讲述方法和作用。


一、交叉验证是啥

交叉验证,就是重复的使用样本数据,首先把得到的样本数据划分成训练集和测试集,其中的组合可以有不同方式。
在每个组合中用训练集来训练模型,测试集来评估模型预测的好坏。

  所谓''交叉'':是由于样本划分是随机的,每次划分之后数据集的组合是不一样的,那么对于本组划分的数据进行训练和验证后,
下次训练和验证时,训练样本数据有可能会变成测试集中的数据,测试集中的数据可能变成训练集中的数据。

二、交叉验证的方法

1.简单交叉验证

这是一种最简单的验证方法:其随机地将样本数据分为两部分(比如: 70% 的训练集,30% 的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。(若需要验证集时,一般都是采用60% 20% 20%的比例)

2.K 折交叉验证 (K-Fold Cross Validation)

简单交叉验证的升级版(堪比鸡蛋灌饼升级版)且是最常用的。K 折交叉验证会把样本数据随机的分成 K 份,每次随机的选择 K-1份作为训练集,剩下的 1 份做测试集。当这一轮完成后,重新随机选择 K-1 份来训练数据。若干轮(小于 K)之后,选择损失函数评估最优的模型和参数。(若需要验证集时,一般都是将部分作为测试集,然后在剩余的数据集中分为K份,轮流的将每一份作为验证集,其他的作为训练集)

3.留一交叉验证 (Leave-one-out Cross Validation, LOOCV)

类似于K折交叉验证(特殊情况),就相当于只用一个样本数据作为测试集,其他的数据都作为训练集,并将此步骤重复 N 次(N 为数据集的数据数量)就得到了留一交叉验证。(图片借鉴于知乎:大学还要学理综)若需要验证集,类比K折交叉验证。

深度学习交叉验证 交叉验证分析_深度学习交叉验证

三、交叉验证的用途

前情提要:不同的用途下会把样本数据划分成不同子集。训练集、测试集 or 训练集、验证集、测试集

1.模型评估

注意:除了使用交叉验证进行模型评估之外,还可以采用性能指标进行模型评估,比如准确率、精确率、召回率等
模型评估提前已经与预有了模型,涉及不到模型选择,仅对模型进行评估便于后续优化,因此把样本分为训练集、测试集,其实你可以认为验证集在测试集中,因为他不需要验证集来选择超参数。

在进行模型评估时,采用交叉验证的方法用训练集训练、测试集检验模型预测的好坏,以便于优化模型。(与其说使用了交叉验证不如说是交叉测试(自己乱起的名字))

此方法相比于传统的模型评估的方式(划分出固定的训练集和测试集),交叉验证的优势在于:避免由于数据集划分不合理而导致的问题,比如模型在训练集上过拟合,这种过拟合不是可能不是模型导致的,而是因为数据集划分不合理造成的。这种情况在用小规模数据集训练模型时很容易出现,所以在小规模数据集上用交叉验证的方法评估模型更有优势。

2.模型选择(超参数选择)

交叉验证最关键的作用是进行模型选择,也可以称为超参数选择。

在模型选择中把样本数据分成训练集、验证集、测试集
训练集: 训练各个模型
验证集: 用训练集外的数据集检验模型的好坏,便于确定合适超参数,进而选出模型。
测试集: 选择出模型后检验模型的泛化能力(就是查看对于未知数据拟合的情况)。

过程:

首先在训练集和验证集上对多种模型选择(超参数选择)进行验证,选出平均误差最小的模型(超参数),注意是平均误差最小的,这里别忘记交叉验证是对模型进行多次训练和检验。选出合适的模型(超参数)后,可以把训练集和验证集合并起来,在上面重新把模型训练一遍,得到最终模型,然后再用测试集测试其泛化能力。

深度学习交叉验证 交叉验证分析_交叉验证_02