交叉验证是模型比较选择的一种常用方法,本文对此进行总结梳理。

1.交叉验证的基本思想

交叉验证(cross validation)的基本思想就是重复地利用同一份数据。

2.交叉验证的作用

1)通过划分训练集和测试集,一定程度上减小了过拟合;
2)重复使用数据,尽可能多的从样本集上得到有用的信息。

3.交叉验证的主要方法

3.1 简单交叉验证

简单交叉验证,又称为留出法(hold-out),是指直接将样本集划分成两个互斥的计划,其中一个作为训练集(training set),另外一个作为测试集(testing set)。在训练集中进行学习训练,使用测试集来计算测试误差。
注意:
1)训练集和测试集中的数据分布要尽量与原始样本集一致,因此需要使用分层抽样(stratified sampling)的方式划分。
2)单次划分得到的结果进行学习产生的模型往往不够稳定可能,因此需要多次随机划分、重复进行实验评估后计算平均值来作为评估结果。
3)常用的划分比例为7:3或者8:2。

3.2 K折交叉验证

K折交叉验证(K-fold cross validation),是指将数据集划分成K个大小相近的互斥子集,每次选取其中的一个子集作为测试集,其他K-1个子集作为测试集,这样就可以得到K种选择结果,从而可以进行K次学习和预测,最终返回这K次测试结果的均值。

注意:
1)评估结果的稳定性很大程度上取决于K的取值,最常用的取值为10,其次为5和20等;
2)每个子集尽量保持数据分布一致,因此需要使用分层抽样
3)和简单交叉验证一样,数据集的划分结果会可能影响模型最终的结果,为了减少这种划分带来的差异,可以重复进行p次划分,进行p次K折交叉验证,最终取这p次的平均评估结果。

3.3 留一交叉验证

留一交叉验证法,简称留一法(Leave-One-Out,LOO),它是一种特殊的K折交叉验证,K=样本数N。因为每次只保留一个样本进行测试,因此,留一法不受随机样本划分的影响,构建的模型与原始样本集构建的模型很相似,因此,其评估结果也认为很准确。但是其缺陷是,当样本集很大时,训练N个模型的计算开销将非常大。因此,在数据量相对缺乏时,可以采用。

4.参考与感谢

[1] 机器学习
[2] Python数据分析与数据化运营

模型构建<3>:交叉验证的更多相关文章

  1. SVM学习笔记(二):什么是交叉验证

    交叉验证:拟合的好,同时预测也要准确 我们以K折交叉验证(k-folded cross validation)来说明它的具体步骤.{A1,A2,A3,A4,A5,A6,A7,A8,A9} 为了简化,取 ...

  2. 吴恩达机器学习笔记34-模型选择和交叉验证集(Model Selection and Train_Validation_Test Sets)

    假设我们要在10 个不同次数的二项式模型之间进行选择: 显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型.我们需 ...

  3. 验证和交叉验证(Validation & Cross Validation)

    之前在<训练集,验证集,测试集(以及为什么要使用验证集?)(Training Set, Validation Set, Test Set)>一文中已经提过对模型进行验证(评估)的几种方式. ...

  4. 斯坦福大学公开课机器学习:advice for applying machine learning | model selection and training/validation/test sets(模型选择以及训练集、交叉验证集和测试集的概念)

    怎样选用正确的特征构造学习算法或者如何选择学习算法中的正则化参数lambda?这些问题我们称之为模型选择问题. 在对于这一问题的讨论中,我们不仅将数据分为:训练集和测试集,而是将数据分为三个数据组:也 ...

  5. 用交叉验证改善模型的预测表现-着重k重交叉验证

    机器学习技术在应用之前使用“训练+检验”的模式(通常被称作”交叉验证“). 预测模型为何无法保持稳定? 让我们通过以下几幅图来理解这个问题: 此处我们试图找到尺寸(size)和价格(price)的关系 ...

  6. Spark机器学习——模型选择与参数调优之交叉验证

    spark 模型选择与超参调优 机器学习可以简单的归纳为 通过数据训练y = f(x) 的过程,因此定义完训练模型之后,就需要考虑如何选择最终我们认为最优的模型. 如何选择最优的模型,就是本篇的主要内 ...

  7. Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

    Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross valida ...

  8. 【scikit-learn】交叉验证及其用于參数选择、模型选择、特征选择的样例

     内容概要¶ 训练集/測试集切割用于模型验证的缺点 K折交叉验证是怎样克服之前的不足 交叉验证怎样用于选择调节參数.选择模型.选择特征 改善交叉验证 1. 模型验证回想¶ 进行模型验证的一个重要目 ...

  9. 小白学习之pytorch框架(6)-模型选择(K折交叉验证)、欠拟合、过拟合(权重衰减法(=L2范数正则化)、丢弃法)、正向传播、反向传播

    下面要说的基本都是<动手学深度学习>这本花书上的内容,图也采用的书上的 首先说的是训练误差(模型在训练数据集上表现出的误差)和泛化误差(模型在任意一个测试数据集样本上表现出的误差的期望) ...

随机推荐

  1. Mysql 监控性能状态 QPS/TPS【转】

    QPS(Query per second) 每秒查询量 TPS(Transaction per second)每秒事务量 这是Mysql的两个重要性能指标,需要经常查看,和Mysql基准测试的结果对比 ...

  2. jQuery-对标签元素 文本操作-属性操作-文档的操作

    一.对标签元素文本操作 1.1 对标签中内容的操作 // js var div1 = document.getElementById("div1"); div1.innerText ...

  3. redhat6.5文件共享

    以下操作均需要root用户 a端: 固定nfs端口 #vi /etc/sysconfig/nfs 将里面的RQUOTAD_PORT.LOCKD_TCPPORT.LOCKD_UDPPORT.MOUNTD ...

  4. npm 下载node-zookeeper包

    环境:centos7(lunix) 1.安装nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install. ...

  5. 关于vc++ 6.0 编译器,点打开文件时自动关闭

    装好VC++ 6.0后,点打开文件时编译器会自动关闭掉,然后在网上找到各位大神写的资料,果然是因为之前有安装vs2010冲突的缘故,然后http://download.csdn.net/source/ ...

  6. 追MM与设计模式

    1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅 ...

  7. CF312B 【Archer】

    容易算出这人第一次胜利的概率,第二次的,第三次的…… 好像可以无限乘下去 但是这题精度卡到1e-6 不妨设一个eps,当这次胜率小于eps时,就break掉,反正它已经不影响答案了 我设的是eps=1 ...

  8. PHP array_diff 计算数组的差集

    array_diff (PHP 4 >= 4.0.1, PHP 5) array_diff — 计算数组的差集 说明 array array_diff ( array $array1 , arr ...

  9. **CI中使用IN查询(where_in)

    注意别漏了$this->db->get(); /** * 匹配用户手机号,返回匹配的用户列表 * @param $column_str 'user_id, user_name, user_ ...

  10. hdu 3951 硬币围成一圈(博弈)

    n个硬币围成一个环 每次只能取1-K个硬币 最后取完者胜 假如5个硬币 每次取1-2个情况1 先手取1个 后手取剩下4个中间2个 破坏了连续 虽然最后剩2个,但先手只能取一个 然后后再取一个 后手胜 ...