美文网首页
交叉验证

交叉验证

作者: Emma_Ma | 来源:发表于2015-12-08 09:36 被阅读5178次

交叉验证 (Cross validation)

有时亦称循环估计, 是用来验证分类器的性能的一种统计分析方法。它用于分析机器学习算法的泛化能力(generalization). 其基本思想是将原始数据(data set)进行分组,一部分作为训练集(training set),一部分作为测试集 (testing set)。首先利用训练集对分类器进行训练,再利用测试集来测试得到的模型(model),以此来作为评价分类性能的指标。
交叉验证一般要尽量满足:
1)训练集的比例要足够多,一般大于一半
2)训练集和测试集要均匀抽样

常见的交叉验证类型:

1.Double Cross Validation (记为2-CV)

做法是将数据集分成两个相等大小的子集,进行两回合的分类器训练。在第一回合中,一个子集作为training set,另一个便作为testing set;在第二回合中,则将training set与testing set对换后,再次训练分类器,而其中我们比较关心的是两次testing sets的辨识率。不过在实务上2-CV并不常用,主要原因是training set样本数太少,通常不足以代表母体样本的分布,导致testing阶段辨识率容易出现明显落差。此外,2-CV中分子集的变异度大,往往无法达到“实验过程必须可以被复制”的要求。

2.K-folder cross-validation

将原始数据分成K个子集(一般是均分),将每个子集数据分别做一次测试集 (testing test),其余的K-1组子集数据作为训练集(trainning test),这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取。交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果。
优点:所有的样本都被作为了训练集和测试集,每个样本都被验证一次。10-folder通常被使用。

3. K * 2 folder cross-validation

是k-folder cross-validation的一个变体,对每一个folder,都平均分成两个集合s0,s1,我们先在集合s0训练用s1测试,然后用s1训练s0测试。
优点是:测试和训练集都足够大,每一个个样本都被作为训练集和测试集。一般使用k=10

4. least-one-out cross-validation(LOOCV)

留一法。假设dataset中有N个样本,那LOOCV也就是N-CV,即每个样本单独作为一次测试集,剩余N-1个样本则做为训练集所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标。相比于前面的K-CV,LOO-CV有两个明显的优点.
优点:1)每一回合中几乎所有的样本皆用于训练model,因此最接近原始样本的分布,估测所得的generalization error比较可靠。
2)实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
缺点:
计算成本高,为需要建立的models数量与总样本数量相同,当总样本数量相当多时,LOOCV在实作上便有困难,除非每次训练model的速度很快,或是可以用平行化计算减少计算所需的时间。

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

3-fold cross validation

EA 与 k-CV 正确的搭配方法,是将 dataset 分成 k 等份的 subsets 后,每次取 1份 subset 作为 test set,其余 k-1 份作为 training set,并且将该组 training set 套用到 EA 的 fitness function 计算中(至于该 training set 如何进一步利用则没有限制)。因此,正确的 k-CV 会进行共 k 次的 EA 演化,建立 k 个classifiers。而 k-CV 的 test 辨识率,则是 k 组 test sets 对应到 EA 训练所得的 k 个 classifiers 辨识率之平均值。

K-floder-CV matlab实现

在matlab中,可以利用:indices=crossvalind('Kfold',x,k);来实现随机分包的操作,其中x为一个N维列向量(N为数据集A的元素个数,与x具体内容无关,只需要能够表示数据集的规模),k为要分成的包的总个数,输出的结果indices是一个N维列向量,每个元素对应的值为该单元所属的包的编号(即该列向量中元素是1~k的整随机数),利用这个向量即可通过循环控制来对数据集进行划分。
例:[M,N]=size(data);
//数据集为一个M*N的矩阵,其中每一行代表一个样本

indices=crossvalind('Kfold',data(1:M,N),10);
//进行随机分包 for k=1:10//交叉验证k=10,10个包轮流作为测试集

test = (indices == k);
//获得test集元素在数据集中对应的单元编号

train = ~test;
//train集元素的编号为非test元素的编号

train_data=data(train,:);
//从数据集中划分出train样本的数据

train_target=target(:,train);
//获得样本集的测试目标,在本例中是实际分类情况

test_data=data(test,:);
//test样本集

test_target=target(:,test);[HammingLoss(1,k),RankingLoss(1,k),OneError(1,k),Coverage(1,k),Average_Precision(1,k),Outputs,Pre_Labels.MLKNN]=MLKNN_algorithm(train_data,train_target,test_data,test_target);
//要验证的算法 end
//上述结果为输出算法MLKNN的几个验证指标及最后一轮验证的输出和结果矩阵,每个指标都是一个k元素的行向量

相关文章

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

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

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

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

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

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

  • 十一、交叉验证和网格搜索

    1交叉验证 1)评估方法一般有留出法,交叉验证法,自助法,这里我们介绍交叉验证法。2)k折交叉验证法:将数据集D划...

  • 算法笔记(20)交叉验证及Python代码实现

    常用交叉验证法包括K折叠交叉验证法(K-fold cross validation)、随机拆分交叉验证法(shuf...

  • 交叉验证

    1. 既有趣、又有益的交叉验证 validate your machine learning in a bette...

  • 交叉验证

    交叉验证 问题 我们在训练数据的时候通常把原数据分成 训练集以及测试集两份。当我们使用训练集训练出模型后再使用测试...

  • 交叉验证

    1、为什么要进行交叉验证? 目的:为了得到可靠稳定的模型 交叉验证是一种模型选择方法,其将样本的一部分用于训练,另...

  • 交叉验证

    为什么使用交叉验证? 在许多实际应用中数据是不充足的。交叉验证的基本思想:重复的使用数据。把给定的数据进行切分,将...

  • 交叉验证

    交叉验证 (Cross validation) 有时亦称循环估计, 是用来验证分类器的性能的一种统计分析方法。它用...

网友评论

      本文标题:交叉验证

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