精华内容
下载资源
问答
  • 交叉验证与训练集、验证集、测试集

    万次阅读 多人点赞 2018-02-06 15:19:20
    参考:李航–《统计学习方法》 ... 训练集、验证集、测试集 ...如果给定的样本数据充足,我们通常使用均匀随机抽样的方式将数据集划分成3个部分——训练集、验证集和测试集,这三个集合不能有交集,常见的比例是8

    参考:李航–《统计学习方法》
    https://www.jianshu.com/p/7e032a8aaad5
    https://zhuanlan.zhihu.com/p/20900216?refer=intelligentunit

    训练集、验证集、测试集

    如果给定的样本数据充足,我们通常使用均匀随机抽样的方式将数据集划分成3个部分——训练集、验证集和测试集,这三个集合不能有交集,常见的比例是8:1:1。需要注意的是,通常都会给定训练集和测试集,而不会给验证集。这时候验证集该从哪里得到呢?一般的做法是,从训练集中均匀随机抽样一部分样本作为验证集。

    训练集

    训练集用来训练模型,即确定模型的权重和偏置这些参数,通常我们称这些参数为学习参数。

    验证集

    而验证集用于模型的选择,更具体地来说,验证集并不参与学习参数的确定,也就是验证集并没有参与梯度下降的过程。验证集只是为了选择超参数,比如网络层数、网络节点数、迭代次数、学习率这些都叫超参数。比如在k-NN算法中,k值就是一个超参数。所以可以使用验证集来求出误差率最小的k。

    测试集

    测试集只使用一次,即在训练完成后评价最终的模型时使用。它既不参与学习参数过程,也不参数超参数选择过程,而仅仅使用于模型的评价。
    值得注意的是,千万不能在训练过程中使用测试集,而后再用相同的测试集去测试模型。这样做其实是一个cheat,使得模型测试时准确率很高。

    交叉验证

    之所以出现交叉验证,主要是因为训练集较小。无法直接像前面那样只分出训练集,验证集,测试就可以了(简单交叉验证)。
    需要说明的是,在实际情况下,人们不是很喜欢用交叉验证,主要是因为它会耗费较多的计算资源。一般直接把训练集按照50%-90%的比例分成训练集和验证集。但这也是根据具体情况来定的:如果超参数数量多,你可能就想用更大的验证集,而验证集的数量不够,那么最好还是用交叉验证吧。至于分成几份比较好,一般都是分成3、5和10份。

    交叉验证的实现

    首先我们给出下面的图
    这里写图片描述
    图上面的部分表示我们拥有的数据,而后我们对数据进行了再次分割,主要是对训练集,假设将训练集分成5份(该数目被称为折数,5-fold交叉验证),每次都用其中4份来训练模型,粉红色的那份用来验证4份训练出来的模型的准确率,记下准确率。然后在这5份中取另外4份做训练集,1份做验证集,再次得到一个模型的准确率。直到所有5份都做过1次验证集,也即验证集名额循环了一圈,交叉验证的过程就结束。算得这5次准确率的均值。留下准确率最高的模型,即该模型的超参数是什么样的最终模型的超参数就是这个样的。

    展开全文
  • 训练集、验证集、测试集以及交验验证的理解

    万次阅读 多人点赞 2018-08-11 08:16:36
    在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。 一、三者的区别 训练集(train set) —— 用于模型拟合的数据样本。 验证集(development set)—— 是模型训练过程中单独留出的...

         在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。

    一、三者的区别

    • 训练集(train set) —— 用于模型拟合的数据样本。
    • 验证集(development set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时,用以验证当前模型泛化能力(准确率,召回率等),以决定是否停止继续训练。

                     在神经网络中, 我们用验证数据集去寻找最优的网络深度(number of hidden layers),或者决定反向传播算法的停止点或者在神经网络中选择隐藏层神经元的数量;

                   在普通的机器学习中常用的交叉验证(Cross Validation) 就是把训练数据集本身再细分成不同的验证数据集去训练模型。

    • 测试集 —— 用来评估模最终模型的泛化能力。但不能作为调参、选择特征等算法相关的选择的依据。
    类别验证集测试集
    是否被训练到
    作用

    1)调超参数;

    2)监控模型是否发生过拟合(以决定是否停止训练)

    为了评估最终模型泛化能力
    使用次数多次使用,以不断调参仅仅一次使用
    缺陷模型在一次次重新手动调参并继续训练后所逼近的验证集,可能只代表一部分非训练集,导致最终训练好的模型泛化性能不够测试集为了具有泛化代表性,往往数据量比较大,测试一轮要很久,所以往往只取测试集的其中一小部分作为训练过程中的验证集

    一个形象的比喻:

        训练集-----------学生的课本;学生 根据课本里的内容来掌握知识。

        验证集------------作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

        测试集-----------考试,考的题是平常都没有见过,考察学生举一反三的能力。

    传统上,一般三者切分的比例是:6:2:2,验证集并不是必须的。

    二、为什么要测试集

    a)训练集直接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止过拟合)

    b)验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不能算是学习好的学生)。

    c) 所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力(期末考试)

    但是仅凭一次考试就对模型的好坏进行评判显然是不合理的,所以接下来就要介绍交叉验证法

    三、交叉验证法(模型选择)

     a) 目的

       交叉验证法的作用就是尝试利用不同的训练集/验证集划分来对模型做多组不同的训练/验证,来应对单独测试结果过于片面以及训练数据不足的问题。(就像通过多次考试,才通知哪些学生是比较比较牛B的)

    交叉验证的做法就是将数据集粗略地分为比较均等不相交的k份,即

    然后取其中的一份进行测试,另外的k-1份进行训练,然后求得error的平均值作为最终的评价,具体算法流程如下:

           举个例子:假设建立一个BP神经网络,对于隐含层的节点数目,我们并没有很好的方法去确定。此时,一般将节点数设定为某一具体的值,通过训练集训练出相应的参数后,再由交叉验证集去检测该模型的误差;

    然后再改变节点数,重复上述过程,直到交叉验证误差最小。

    b) 交叉验证算法的具体步骤如下

    1.      随机将训练数据等分成k份,S1, S2, …, Sk。

    2.      对于每一个模型Mi,算法执行k次,每次选择一个Sj作为验证集,而其它作为训练集来训练模型Mi,把训练得到的模型在Sj上进行测试,这样一来,每次都会得到一个误差E,最后对k次得到的误差求平均,就可以得到模型Mi的泛化误差。

    3.      算法选择具有最小泛化误差的模型作为最终模型,并且在整个训练集上再次训练该模型,从而得到最终的模型。

                   K折交叉验证,其主要 的目的是为了选择不同的模型类型(比如一次线性模型、非线性模型、),而不是为了选择具体模型的具体参数。比如在BP神经网络中,其目的主要为了选择模型的层数、神经元的激活函数、每层模型的神经元个数(即所谓的超参数)。每一层网络神经元连接的最终权重是在模型选择(即K折交叉验证)之后,由全部的训练数据重新训练。 

    目的在模型选择,而非模型训练调整参数。

    c) K值的选择

          K值的选取是一个偏差与方差的权衡:

      K=1时,所有数据用于训练,容易过拟合;

     K=N时,相当于留一法LOOCV  (Leave-one-out cross-validation ).; 

    通常建议K=10.,2017年的一项研究给出了另一种经验式的选择方法[3],作者建议  且保证 

    展开全文
  • 机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集?...交叉验证(一般取十折交叉验证:10-fold cross validation) k个子集,每个子集均做一次测试集,其...

     

    Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数: 默认是把数据集的75%作为训练集,把数据集的25%作为测试集。 2.交叉验证(一般取十折交叉验证:10-fold cross validation) k个子集,每个子集均做一次测试集,其余的作为训练集。 交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果。 3.训练数据,验证数据(注意区别交叉验证数据集),测试数据(在Coursera上提到) 一般做预测分析时,会将数据分为两大部分。一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。验证数据用于负责模型的构建。典型的例子是用K-Fold Cross Validation裁剪决策树,求出最优叶节点数,防止过渡拟合(Overfitting)。 所以: 训练数据(Test Data):用于模型构建 验证数据(Validation Data):可选,用于辅助模型构建,可以重复使用。 测试数据(Test Data):用于检测模型构建,此数据只在模型检验时使用,用于评估模型的准确率。绝对不允许用于模型构建过程,否则会导致过渡拟合。 references

     

     

    ——-十折交叉验证:10-fold cross validation——-

    英文名叫做10-fold cross-validation,用来测试算法准确性。是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。

    之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。

    展开全文
  • 交叉验证很多教材和文章概念也不统一,即可用于划分数据、也可用于模型选择及调参,也容易让大家误解。 为彻底搞明白这几个概念和用法,本文我们深度研究一下。 在本场 Chat 中,会讲到如下内容: 训练,验证...

    训练集(Train Set)、验证集(Validation Set)、测试集(Test Set)这三个名词在机器学习领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被混淆。

    而交叉验证很多教材和文章概念也不统一,即可用于划分数据集、也可用于模型选择及调参,也容易让大家误解。

    为彻底搞明白这几个概念和用法,本文我们深度研究一下。

    在本场 Chat 中,会讲到如下内容:

    1. 训练集,验证集,测试集概念、用法
    2. 交叉验证在不同教材及 sklearn 中的概念区别
    3. sklearn 交差验证方法划分数据集语法、参数解析、用法
    4. 不同数据条件下如何选择交差验证方法
    5. 运用交叉验证进行模型评估(语法、参数解析、用法)

    适合人群:机器学习初学者

    阅读全文: http://gitbook.cn/gitchat/activity/5dfca0dbcc57c30203cfbb10

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • #也可以通过传递交叉验证迭代器参数,使用其他交叉验证策略,例如: from sklearn.model_selection import ShuffleSplit n_samples=iris.data.shape[ 0 ] cv=ShuffleSplit(n_splits= 3 ,test_size= 0.3 ,random_...
  • 初学者对于训练集(train set)、测试集(test set)、验证集(validation set)这三个概念和应用非常容易搞混,这里我结合各种博文和书籍上的讲解进行总结: 训练集 参与训练,模型从训练集中学习经验,从而不断减小训练...
  • Cross-validation 交叉验证与训练集测试集划分 https://blog.csdn.net/yisuoyanyv/article/details/75127112
  • 那么为啥还需要一个测试集呢? 这就需要区分一下模型的各种参数了。事实上,对于一个模型来说,其参数可以分为普通参数和超参数。在不引入强化学习的前提下,那么普通参数就是可以被梯度下降所更新的,也就是训练集...
  • 该库包含许多用MATLAB编写的交叉验证测试集分类代码。 -> f_FeatureMtxtoAccur_LDAReg_KfoldCV此函数对输入数据集执行k倍交叉验证,并使用正则化LDA返回精度。 -> f_FeatureMtxtoAccur_LDAReg_LeaveOneOutCV该函数...
  • 大部分交叉验证仅分为训练集和测试集,每次循环一次,直至覆盖所有数据。这个可以采用sklern中cross_validiation_score 直接运行,如: 该方法的缺点之一是只能拆分成训练集和测试集,当需要验证集来调参数时,无...
  • 1. 简介在Andrew Ng的机器学习教程里,会将给定的数据分为三部分:训练数据(training set)、交叉验证数据(cross validation set)、测试数据(test set)。三者分别占总数据的60%、20%、20%。 那么...
  • k值交叉验证 交叉验证集Cross-Validation also referred to as out of sampling technique is an essential element of a data science project. It is a resampling procedure used to evaluate machine learning ...
  •  在人工智能机器学习中,很容易将“验证集”与“测试集”,“交叉验证”混淆。 一、三者的区别 训练集(train set) —— 用于模型拟合的数据样本。 验证集(development set)—— 是模型训练过程中单独留...
  • 验证集与测试集的区别

    万次阅读 多人点赞 2018-04-07 09:23:28
    在对机器学习算法进行学习和实践的时候,我们经常会遇到“验证集”和“测试集”,通常的机器学习书籍都会告诉我们,验证集和测试集不相交,验证集和训练集不相交,测试集和训练集不相交。也就是验证集与测试集似乎是...
  • 最后给大家介绍一种充分利用有限数据的方式:交叉验证法。 先用一个不恰当的比喻来说明3种数据集之间的关系: 训练集相当于上课学知识 验证集相当于课后的的练习题,用来纠正和强化学到的知识 测试集相当于期末...
  • 本文主要区分机器学习中的三种数据集,尤其是验证集和测试集,并介绍常用的交叉验证训练方法。 Training Set 训练集,即用于训练模型内参数(fit the model)的数据集。 Testing Set 即测试集,在使用训练集调整参数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,780
精华内容 19,512
关键字:

交叉验证是测试集还是验证集