美文网首页
深度学习-交叉验证

深度学习-交叉验证

作者: FrankXu0808 | 来源:发表于2019-11-19 16:04 被阅读0次

关于交叉验证,具体原理在各种科普文中都有,在这里简要提一下:

思想介绍

在使用训练集对参数进行训练的时候,经常会发现人们通常会将一整个训练集分为三个部分(比如mnist手写训练集)。一般分为:训练集(train_set),评估集(valid_set),测试集(test_set)这三个部分。这其实是为了保证训练效果而特意设置的。其中测试集很好理解,其实就是完全不参与训练的数据,仅仅用来观测测试效果的数据。而训练集和评估集则牵涉到下面的知识了。

因为在实际的训练中,训练的结果对于训练集的拟合程度通常还是挺好的(初始条件敏感),但是对于训练集之外的数据的拟合程度通常就不那么令人满意了。因此我们通常并不会把所有的数据集都拿来训练,而是分出一部分来(这一部分不参加训练)对训练集生成的参数进行测试,相对客观的判断这些参数对训练集之外的数据的符合程度。这种思想就称为交叉验证(Cross Validation) [1] 。

定义

交叉验证(Cross Validation),有的时候也称作循环估计(Rotation Estimation),是一种统计学上将数据样本切割成较小子集的实用方法,该理论是由Seymour Geisser提出的。

在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。

基本思想

交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来做为评价分类器的性能指标。

目的

用交叉验证的目的是为了得到可靠稳定的模型。在建立PCR 或PLS 模型时,一个很重要的因素是取多少个主成分的问题。用cross validation 校验每个主成分下的PRESS值,选择PRESS值小的主成分数。或PRESS值不再变小时的主成分数。

常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-fold cross validation),将数据集分成十份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。

交叉验证有时也称为交叉比对,如:10折交叉比对 。

常见形式

Holdout 验证

常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。

K-fold cross-validation

K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的 [3] 。

留一验证

正如名称所建议, 留一验证(LOOCV)意指只使用原本样本中的一项来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于和K-fold 交叉验证是一样的,其中K为原本样本个数。 在某些情况下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。

(以上cp by 百度百科)

其中有几个比较值得注意的细节,初学者可能会思考错误(比如我。。):

1.10折交叉验证最好是在源数据集被打乱后,进行10折分割,如果数据集没有被打乱过,那么在将数据集分成10折时应该采用分层抽样的方式,将样本分配到这10折当中。实际生成时只需要去生成valid集,剩余的当做train集,注意train集如果没有被打乱过,应该打乱一下。

2.10折交叉验证在具体运用到深度学习模型训练时,是将其中1折做valid,其余9折作为一个整体数据集做train,然后在训练一定的epoch后,得到一个当前数据集训练得到的验证精度。然后,注意,不能在这个已经训练过的神经网络的基础上,改变10折交叉验证的valid,再次进行训练,而应该在改变valid数据集是哪一折之后,重新开始神经网络的训练。也就是说,10折交叉验证要训练10次,这个10次不是指epoch,而是指要经过10次神经网络的训练,每次训练经过若干epoch,得到10个验证精度,取这10次训练的验证精度的平均值。

3.做10次10折交叉验证,要保证所有训练数据都做过一次valid数据。

相关文章

  • 深度学习-交叉验证

    关于交叉验证,具体原理在各种科普文中都有,在这里简要提一下: 思想介绍 在使用训练集对参数进行训练的时候,经常会发...

  • 机器学习笔记(一)——交叉验证

    交叉验证问题 什么是交叉验证     交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,...

  • 饭店流量预测

    lightgbm 模型 修改参数 交叉验证 【机器学习】Cross-Validation(交叉验证)详解. 在机器...

  • 如何进行变量筛选和特征选择(三)?交叉验证

    01 模型简介 交叉验证是机器学习中常用的一种验证和选择模型的方法,常用的交叉验证方法是K折交叉验证。将原始数据...

  • 深度学习知识点汇总-机器学习基础(15)

    2.15 交叉验证和k折交叉验证 交叉验证是为了提高模型的泛华能力。 方法主要有: 留一交叉验证 k折交叉验证 这...

  • R 交叉验证①

    什么是交叉验证?在机器学习中,交叉验证是一种重新采样的方法,用于模型评估,以避免在同一数据集上测试模型。交叉验证的...

  • 深度学习的交叉验证以及代码实现

    在机器学习里通常会把数据集分成训练集,验证集和测试集,但是在数据比较少的时候,分成三组就不太够用了。一个解决的方法...

  • 机器学习—交叉验证

    1、经验误差与过拟合 通常我们把分类错误的样本数占样本总数的比例称为"错误率”,学习器在训练集上的误差称为“经...

  • 嵌套交叉验证(Nested cross-validation)

    传统交叉验证和嵌套交叉验证的区别 在开始分享嵌套交叉验证前,首先以K-Fold为例,区分K-Fold交叉验证和嵌套...

  • 交叉验证

    交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进...

网友评论

      本文标题:深度学习-交叉验证

      本文链接:https://www.haomeiwen.com/subject/dctgictx.html