精华内容
参与话题
问答
  • cross validation 交叉验证

    千次阅读 2015-06-01 10:47:36
    在pattern recognition与machine learning的相关研究中,经常会将dataset分为training跟test这两个subsets,前者用以建立model,后者...交叉验证Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切

    在pattern recognition与machine learning的相关研究中,经常会将dataset分为training跟test这两个subsets,前者用以建立model,后者则用来评估该model对未知样本进行预测时的精确度,正规的说法是generalization ability。

    交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。

    基本思想是先在一个子集上做分析, 用其它子集用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证可以评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力(generalize)。



    交叉验证需要满足的条件


    1)训练集的比例要足够多,一般大于一半

    2)训练集和测试集从完整集合中均匀取样

    均匀取样的目的是希望减少training/test set与完整集合之间的偏差(bias),但却也不易做到。一般的作法是随机样,当样本数量足够时,便可达到均匀取样的效果。然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组training set与test set,直到test set的辨识率满意为止,但严格来说这样便算是作弊了。



    交叉验证主要分成以下几类:

    1)k-folder cross-validation:

    分割为k个子集,每个子集均做一次测试集,其余的作为训练集。交叉验证重复k次,将k次的平均交叉验证识别正确率作为结果。

    优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。

    2)K * 2 folder cross-validation

    是k-folder cross-validation的一个变体,对每一个folder,都平均分成两个集合s0,s1,我们先在集合s0训练用s1测试,然后用s1训练s0测试。

    优点是:测试和训练集都足够大,每一个个样本都被作为训练集和测试集。一般使用k=10

    3)least-one-out cross-validation(loocv)

    假设dataset中有n个样本,那LOOCV也就是n-CV,意思是每个样本单独作为一次测试集,剩余n-1个样本则做为训练集。
    优点:
    1)每一回合中几乎所有的样本皆用于训练model,因此最接近母体样本的分布,估测所得的generalization error比较可靠。
    2)实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
    但LOOCV的缺点则是计算成本高,为需要建立的models数量与总样本数量相同,当总样本数量相当多时,LOOCV在实作上便有困难,除非每次训练model的速度很快,或是可以用平行化计算减少计算所需的时间。


    十折交叉验证10-fold cross validation


    10-fold cross-validation用来测试算法准确性,是常用的测试方法。将数据集分成十分,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。
    之所以选择将数据集分为10份,是因为通过利用大量数据集、使用不同学习技术进行的大量试验,表明10折是获得最好误差估计的恰当选择,而且也有一些理论根据可以证明这一点。但这并非最终诊断,争议仍然存在。而且似乎5折或者20折与10折所得出的结果也相差无几。
    展开全文
  • cross validation交叉验证

    千次阅读 2014-09-16 10:06:01
    参考: http://blog.sina.com.cn/s/blog_49c7131d0100s7lc.html  ... ...交叉验证常见三种方式: 1.Hold-Out Method 原始数据分成两组,一组训练集,一组验证集,利用训练集训练分类器,验证集验
    参考:

    交叉验证常见三种方式:
    1.Hold-Out Method
    原始数据分成两组,一组训练集,一组验证集,利用训练集训练分类器,验证集验证模型,记录最后的分类准确率。
    优点:简单,易处理
    缺点:最终准确率与原始数据分组有很大关系。(训练集样本太少,不足以代表母体样本的分布。)
    2.K-fold Cross Validation(K-CV)
    分成K组,一般均分,将每个子集数据分别做一次验证集,其余的K-1组自己数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般从3开始取,一般k=10就足够了,样本特别少才取2。
    优点:避免过拟合和欠拟合
    缺点:K值的选取
    3.Leave-One-Out Cross Validation(LOO-CV)(如果样本条数为N,那这个就是N-CV)
    优点:1.每一回合中几乎所有的样本都用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠。2.实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
    缺点:计算成本超级高。
    展开全文
  • 交叉验证

    千次阅读 2018-12-18 15:27:30
    交叉验证其实就是为了检查模型的泛化行和稳定性,让模型的输出更加可靠。 因为当我们只将训练数据划分一次时,有可能划分的不好,所以模型的结果会有偏差,不可靠。所以,我们可以使用交叉验证。经常使用的是k-fold...

    交叉验证其实就是为了检查模型的泛化行和稳定性,让模型的输出更加可靠。

    因为当我们只将训练数据划分一次时,有可能划分的不好,所以模型的结果会有偏差,不可靠。所以,我们可以使用交叉验证。经常使用的是k-fold交叉验证,将数据划分k份,每次用一份做为验证集,其他的k-1份作为训练集来训练k个模型,然后对多个模型的结果取均值就是这个模型的输出。同时,我们还会看一下k的模型的具体输出值,看一下波动是否很大。

    在对分类任务进行交叉验证时,还要注意划分是样本类别的分布。python里面有sklearn.model_selection.StratifiedKFold可以处理分类任务的交叉验证。如果用k-fold划分,就有可能训练集和测试集的结果相差很大。因为有可能划分时,有一个块儿里面根本就没有某一类。

    以前一直有一个疑惑说,k折交叉验证会有k个模型,那我最后应该选择哪一个模型呢?

    现在发现是自己太傻了?‍♀️,交叉验证划分训练集只是为了验证模型的稳定性,并没有说要选择里面的某一个模型。最后,还是要用全部的训练数据去训练模型,然后得出模型的参数。

    展开全文
  • 机器学习 | 交叉验证

    千次阅读 2019-05-19 23:52:31
    3 Python实现交叉验证3.1 简单交叉验证3.2 S折交叉验证3.3 留一交叉验证4 参考 1 什么是交叉验证? 1.1 思想 基本思想: 将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价...

    1 什么是交叉验证?

    1.1 思想

    基本思想:

    • 将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。

    交叉验证是一种模型选择的方法!(引自李航统计学习方法)可以分为以下三种:

    • 简单交叉验证。即将数据按照一定比例 比如73开,分为训练集和测试集。
    • S折交叉验证。将已给数据切分为S个互不相交、大小相同的子集,将S-1个子集的数据作为训练集来训练模型,剩余的一个测试模型,重复S次,选择S次中平均测试误差最小的模型。
    • 留一交叉验证。即S=n。往往在数据缺乏的时候使用。因为数据很少没法再分了!

    注1:由于交叉验证是用来模型选择的,所以是将不同的模型,比如SVM,LR,GBDT等运用上述方法,然后比较误差大小,选择误差最小的模型!

    注2:上述三种方法是针对数据量不充足的时候采用的交叉验证方法,如果数据量充足,一种简单的方法就是将数据分为3部分:

    • 训练集。用来训练模型
    • 验证集。用于模型选择
    • 测试集。用于最终对学习方法的评估

    选择验证集上有最小预测误差的模型。

    注3:如果数据量为bigdata,这时候可以不用7/3开了,照样分成训练集,验证集,测试集三份。比如100万的数据量,完全可以将数据分成98:1:1,即验证集只要1万即可,测试集也只要1万即可,更多的数据用在训练集来训练模型!

    1.2 疑问

    一旦使用交叉验证,模型还需要划分训练集和测试集吗?

    回答:需要!保持测试集的纯净!对训练集进行简单或者K折交叉验证都ok!目的是评估模型在训练集上的效果,如果在训练集上都表现不好,那么这个问题就是一个不容易学习的问题,进而测试集上大概率也会表现得不好。但核心还是看模型在测试集上的表现效果,并根据测试集结果来评估模型的优劣!所以用简单或者K折交叉验证都ok,甚至不做也行,主要看测试集!

    回答2:如果是kaggle等比赛,由于测试集没有标签,只提供了训练集,这时候当然也有两种方式:即普通的划分以及K折交叉验证。但建议K折交叉验证,然后取每一折上测试集评估效果的均值来衡量模型的预测效果!因为这时候我们仅仅只有这个数据,所以希望尽可能多的利用数据的信息

    2 为什么要交叉验证?

    • 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。
    • 完整的利用数据信息!而不是简单的分成7 3 开!

    3 Python实现交叉验证

    3.1 简单交叉验证

    from sklearn.model_selection import train_test_split
    import pandas as pd
    df = pd.read_csv('data/telecom_churn.csv')
    print(df.shape)
    df.head()
    
    (3463, 20)
    
    subscriberID churn gender AGE edu_class incomeCode duration feton peakMinAv peakMinDiff posTrend negTrend nrProm prom curPlan avgplan planChange posPlanChange negPlanChange call_10000
    0 19164958 1 0 20 2 12 16 0 113.666667 -8.0 0 1 0 0 1 1 0 0 0 0
    1 39244924 1 1 20 0 21 5 0 274.000000 -371.0 0 1 2 1 3 2 2 1 0 1
    2 39578413 1 0 11 1 47 3 0 392.000000 -784.0 0 1 0 0 3 3 0 0 0 1
    3 40992265 1 0 43 0 4 12 0 31.000000 -76.0 0 1 2 1 3 3 0 0 0 1
    4 43061957 1 1 60 0 9 14 0 129.333333 -334.0 0 1 0 0 3 3 0 0 0 0
    X = df.drop(['subscriberID', 'churn'], axis=1)
    y = df['churn'].values
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 23)
    print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
    
    (2424, 18) (1039, 18) (2424,) (1039,)
    

    通过训练集来训练模型,然后看测试集表现来评估该模型!如何评估呢?看之前的博客:机器学习 | 评价指标

    3.2 S折交叉验证

    import warnings
    warnings.filterwarnings('ignore')
    
    from sklearn.model_selection import cross_val_score
    from sklearn.linear_model import LogisticRegression
    from sklearn.ensemble import GradientBoostingClassifier
    clf = LogisticRegression()
    gbdt = GradientBoostingClassifier()
    scores1 = cross_val_score(clf, X, y, cv=10, scoring='roc_auc')
    scores2 = cross_val_score(gbdt, X, y, cv=10, scoring='roc_auc')
    print('逻辑回归 10折交叉验证 平均AUC结果为: %.2f ' % scores1.mean())
    print('GBDT 10折交叉验证 平均AUC结果为: %.2f ' % scores2.mean())
    
    逻辑回归 10折交叉验证 平均AUC结果为: 0.92 
    GBDT 10折交叉验证 平均AUC结果为: 0.95 
    

    所以初步来看,在这个数据集上,通过10折交叉验证来看,GBDT的预测效果比LR要好!

    3.3 留一交叉验证

    print(df.shape)
    
    (3463, 20)
    
    from sklearn.model_selection import LeaveOneOut
    loo = LeaveOneOut()
    for train, test in loo.split(X, y):
        print('%s - %s' % (train.shape, test.shape))
    
    (3462,) - (1,)
    (3462,) - (1,)
    (3462,) - (1,)
    (3462,) - (1,)
    (3462,) - (1,)
    ......
    (3462,) - (1,)
    (3462,) - (1,)
    (3462,) - (1,)
    (3462,) - (1,)
    

    可以看到留一交叉验证,每一次把n-1的作为训练集,1作为验证集!即训练集样本量为n-1,测试集为1

    # 取训练集
    df.iloc[train, :].head()
    
    subscriberID churn gender AGE edu_class incomeCode duration feton peakMinAv peakMinDiff posTrend negTrend nrProm prom curPlan avgplan planChange posPlanChange negPlanChange call_10000
    0 19164958 1 0 20 2 12 16 0 113.666667 -8.0 0 1 0 0 1 1 0 0 0 0
    1 39244924 1 1 20 0 21 5 0 274.000000 -371.0 0 1 2 1 3 2 2 1 0 1
    2 39578413 1 0 11 1 47 3 0 392.000000 -784.0 0 1 0 0 3 3 0 0 0 1
    3 40992265 1 0 43 0 4 12 0 31.000000 -76.0 0 1 2 1 3 3 0 0 0 1
    4 43061957 1 1 60 0 9 14 0 129.333333 -334.0 0 1 0 0 3 3 0 0 0 0
    # 取测试集
    df.iloc[test, :].head()
    
    subscriberID churn gender AGE edu_class incomeCode duration feton peakMinAv peakMinDiff posTrend negTrend nrProm prom curPlan avgplan planChange posPlanChange negPlanChange call_10000
    3462 77861800 0 0 24 0 46 7 1 321.333333 -4.0 0 1 0 0 2 2 0 0 0 0

    4 参考

    展开全文
  • sklearn中的交叉验证Cross-Validation)

    万次阅读 多人点赞 2017-05-14 01:49:30
    这个repo 用来记录一些python技巧、书籍、学习链接等,...今天主要记录一下sklearn中关于交叉验证的各种用法,主要是对sklearn官方文档 Cross-validation: evaluating estimator performance进行讲解,英文水平好...
  • Cross-Validation(交叉验证)详解

    万次阅读 2017-08-21 17:22:03
    假设我们需要从某些候选模型中选择最适合某个学习问题的模型,我们该如何选择?以多元回归模型为例:,应该如何确定k的大小,使得该模型对解决相应的分类问题最为有效?如何在偏倚(bias)和方差(variance)之间...
  • 使用sklearn的cross_val_score进行交叉验证

    万次阅读 多人点赞 2018-06-15 18:21:36
    在构建模型时,调参是极为重要的一个步骤,因为只有选择最佳的参数才能构建一个最优的模型。...2、通过交叉验证的方法,逐个来验证。 很显然我是属于后者所以我需要在这里记录一下 sklearn 的 cross_val_sc...
  • 交叉验证 cross validation: 一:基本概念 交叉验证是机器学习在建立模型和验证模型参数时常用的方法。通常用于原始数据不是很充足时,使用交叉验证来重复的使用数据,把原始数据集进行切分组合成多组不同的训练...
  • cross-validation 交叉验证

    千次阅读 2012-10-09 19:50:25
    交叉验证 在机器学习、数据挖掘和模式识别等领域,需要训练大量的数据来得到一个准确的模型,当数据的数量有限时,就会出现不同的问题。为了解决这些问题,交叉验证的方法就出现了。 名词解释: l Holdout 当...
  • 交叉验证Cross Validation)

    万次阅读 多人点赞 2018-06-05 11:32:22
    交叉验证Cross Validation)常见的交叉验证方法如下:1、简单交叉验证将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此分类器...
  • 交叉验证Cross Validation)简介

    万次阅读 多人点赞 2014-05-27 11:56:55
    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先...
  • from sklearn import datasets from sklearn.cross_validation import train_test_split from sklearn.neighbors import ...# cross_validation交叉验证 iris = datasets.load_iris() X = iris.data...
  • 交叉验证 Cross-validation

    千次阅读 2017-12-21 16:24:44
    以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做为验证集(validation set),首先...
  • 交叉验证 交叉验证就是将原始数据集(dataset)划分为两个部分.一部分为训练集用来训练模型,另外一部分作为测试集测试模型效果. 作用: 1) 交叉验证是用来评估模型在新的数据集上的预测效果,也可以一定程度上减小...
  • 转载自https://zhuanlan.zhihu.com/p/258562541.原理1.1 概念交叉验证(cross-validation)主要用于模型训练或建模应用中,如分类预测、pcr、pls回归建模等。在给定的样本空间中,拿出大部分样本作为训练集来训练模型...
  • 如何使用交叉验证 Cross Validation

    万次阅读 2016-06-07 15:28:36
    在机器学习的相关研究中,如果是有监督的算法,需要将原始数据集分为训练集和测试集两个集合。训练集中的数据带有标签,用这些数据来训练出一个模型,告诉机器什么样的数据可以分成哪一类,然后用这个模型来预测测试...
  • 交叉验证cross validation)

    千次阅读 2018-07-17 22:44:59
    针对不同参数和结构的模型,他们的泛化能力我们为了评估无从可知,为了了解模型的泛化能力,我们引入了交叉验证。所以我们在划分数据集的时候,通常会将数据集划分为三个数据集,三个数据集分别是:训练集(train ...
  • 交叉验证Cross validation) 交叉验证用于防止模型过于复杂而引起的过拟合(作用) 如何交叉验证: 我这里主要介绍K交叉验证 1 将数据集分成K份 2 对于每一个模型(拿多项式回归举例, m=2为一个模型,m...
  • 交叉验证cross validation) 交叉验证是经常使用的模型性能评估方法,从而进行模型选择。对不同的模型参数进行训练得到的模型也不一样,所有交叉验证也可以用于模型参数选择。 当数据集充足时,进行模型选择的一...
  • 交叉验证(Cross Validation)

    千次阅读 2013-10-04 18:18:16
    交叉验证是机器学习、数据挖掘中经常要用到的技巧。很有必要很好的掌握它。所以试着写点这方面的理解,希望对大家有帮助。 文章分为两个部分: 一、交叉验证的原理; 二、分享一个好用的实现了大多数交叉验证的...
  • 交叉验证Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练...
  • 本文主要是对我们使用交叉验证可能出现的一个问题进行讨论,并提出修正方案。 本文地址:http://blog.csdn.net/shanglianlm/article/details/47207173
  • 一般k=10。所谓k折交叉验证就是将数据集等分为k分。进行k次训练,其中第k份作为测试集,其余k-1份作为训练集。算法的各个指标取k的均值。
  • What is Cross Validation(交叉验证)

    千次阅读 2015-11-23 20:11:53
    交叉验证(Cross-validation)主要用于模型训练或建模应用中,如分类预测、PCR、PLS回归建模等。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进行预测,并求这小部分...
  • 交叉验证Cross-Validation):以下简称交叉验证(Cross Validation)为CV.CV是用来验证分类器的性能一种统计分析方法,基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分做为训练集(train set),另一部分做...

空空如也

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

cross