您好,欢迎访问三七文档
先说下我和邵是云的聊天情况:她的意思其实一开始所有样本也是先分为了两个部分,一个大的部分是训练集,一个小的部分是测试集,然后只是在训练集里面分为常规训练集和一个效验集,且是交叉验证的方式,都全部交叉验证搞完了,再最后单独测试那个小部分的测试集样本?就是你说的trainingaccuracy(常规训练集),crossvalidationrate(效验集)andtestaccuracy(测试集),她说这是标准的方式,而如果全体数据用来训练和交叉验证其实就是把所有的样本全部分为了训练集和效验集,所以就没有testaccuracy一说。常用的精度测试方法有交叉验证,例如10倍交叉验证(10-foldcrossvalidation),将数据集分成十分,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10倍交叉验证求均值,例如10次10倍交叉验证,更精确一点。当训练样本数目过少,采用“交叉验证法”(crossvalidation).交叉验证法分两种1:K重交叉验证法:该方法是最为普遍的计算推广误差的方法之一。其过程为:将训练样本集随机分为K个集合,通常分为K等份,对其中的K-1个集合进行训练,得到一个决策函数,并用决策函数对剩下的一个集合进行样本测试。该过程重复K次,取K次过程中的测试错误的平均值作为推广误差。2:留一法:该方法可以说是K重交叉验证法的极端情况,即K=L,L为整个训练样本集的大小。该过程为:对于第i个训练样本,将其取出,对剩下L-1个样本进行训练,得到决策函数,并用其测试第i个训练样本,该过程重复L次,用此方法求出的误差对于实际中的测试误差来说几乎是无偏的。(注意当样本过少,即使交叉验证效果也不会理想,一般样本应在100以上.)k-foldvalidation中文就是k-折交叉验证(确认)其中的k是用户自己定的但它必须比原始的训练集中的元素个数n要小,即k=n.著名的loo(leaveoneout,留一法)就是k-foldvalidation的一个特例即loo中的k=n.k-foldvalidation经常被用来训练NN,SVM等来确定一个最优的参数它的基本思想就是将原始的训练集分成两部分:训练集2(为了与原始训练集相区别,本处称之为训练集2)与验证集从原始训练集中选择n/k个元素组成验证集剩下的(k-1)*n/k个元素用来做训练集2然后用训练集2来训练NN,SVM等,用验证集来验证所得分类器(此处以分类为例,对回归应该也一样)的错误码率然后再次选择另外n/k个元素组成验证集剩下的做为训练集2循环,直到所有元素n/k个元素全部被选择一遍为止比较以上每次循环所得分类器的错误率把所得错误率最低的那个参数认为是最优的参数-foldcross-validation不是什么参数都可以调的它可以调的只是离散的参数,比如网络hiddennode的个数对于连续的参数没法调网络的权值是通过learningalgorithm来调节的只是用validationset来控制是否overtrain跟k-foldcross-validation没有什么关系除此之外k-foldcross-validation主要是干什么:根据一个样本集k次validation之后的误差的平均值来估计一个已经训练好的网络的泛化误差结构风险最小化VC维在有限的训练样本情况下,当样本数n固定时,此时学习机器的VC维越高学习机器的复杂性越高。VC维反映了函数集的学习能力,VC维越大则学习机器越复杂(容量越大)。所谓的结构风险最小化就是在保证分类精度(经验风险)的同时,降低学习机器的VC维,可以使学习机器在整个样本集上的期望风险得到控制。推广的界(经验风险和实际风险之间的关系,注意引入这个原因是什么?因为训练误差再小也就是在这个训练集合上,实际的推广能力不行就会引起过拟合问题还。所以说要引入置信范围也就是经验误差和实际期望误差之间的关系):期望误差R(ω)≤Remp(ω)+Φ(n/h)注意Remp(ω)是经验误差也就是训练误差(线性中使得所有的都训练正确),Φ(n/h)是置信范围,它是和样本数和VC维有关的。上式中置信范围Φ随n/h增加,单调下降。即当n/h较小时,置信范围Φ较大,用经验风险近似实际风险就存在较大的误差,因此,用采用经验风险最小化准则,取得的最优解可能具有较差的推广性;如果样本数较多,n/h较大,则置信范围就会很小,采用经验风险最小化准则,求得的最优解就接近实际的最优解。可知:影响期望风险上界的因子有两个方面:首先是训练集的规模n,其次是VC维h。可见,在保证分类精度(经验风险)的同时,降低学习机器的VC维,可以使学习机器在整个样本集上的期望风险得到控制,这就是结构风险最小化(StructureRiskMinimization,简称SRM)的由来。在有限的训练样本情况下,当样本数n固定时,此时学习机器的VC维越高(学习机器的复杂性越高),则置信范围就越大,此时,真实风险与经验风险之间的差别就越大,这就是为什么会出现过学习现象的原因。机器学习过程不但要使经验风险最小,还要使其VC维尽量小,以缩小置信范围,才能取得较小的实际风险,即对未来样本有较好的推广性,它与学习机器的VC维及训练样本数有关。线性可分的问题就是满足最优分类面的面要求分类面不但能将两类样本正确分开(训练错误率为0),而且要使两类的分类间隔最大(这个是怎么回事呢?原来是有根据的,这个让俺郁闷了好久呢。在@间隔下,超平面集合的VC维h满足下面关系:h=f(1/@*@)其中,f().是单调增函数,即h与@的平方成反比关系。因此,当训练样本给定时,分类间隔越大,则对应的分类超平面集合的VC维就越小。)。根据结构风险最小化原则,前者是保证经验风险(经验风险和期望风险依赖于学习机器函数族的选择)最小,而后者使分类间隔最大,导致VC维最小,实际上就是使推广性的界中的置信范围最小,从而达到使真实风险最小。注意:置信范围大说明真实风险和经验风险的差别较大。解释到这里了,终于有点眉目了,哦原来就是这么回事啊,真是的。总结一下就是训练样本在线性可分的情况下,全部样本能被正确地分类(咦这个不就是传说中的yi*(w*xi+b))=1的条件吗),即经验风险Remp为0的前提下,通过对分类间隔最大化(咦,这个就是Φ(w)=(1/2)*w*w嘛),使分类器获得最好的推广性能。那么解释完线性可分了,我们知道其实很多时候是线性不可分的啊,那么有什么区别没有啊?废话区别当然会有啦,嘿嘿那么什么是本质的区别啊?本质的区别就是不知道是否线性可分但是允许有错分的样本存在(这个咋回事还是没明白hoho)但是正是由于允许存在错分样本,此时的软间隔分类超平面表示在剔除那些错分样本后最大分类间隔的超平面。这里就出现了新词松驰因子,干吗用滴?就是用来控制错分样本的啊。这样的话经验风险就要跟松驰因子联系在一起了。而C就是松驰因子前面的系数,C0是一个自定义的惩罚因子,它控制对错分样本惩罚的程度,用来控制样本偏差与机器推广能力之间的折衷。c越小,惩罚越小,那么训练误差就越大,使得结构风险也变大,而C越大呢,惩罚就越大,对错分样本的约束程度就越大,但是这样会使得第二项置信范围的权重变大那么分类间隔的权重就相对变小了,系统的泛化能力就变差了。所以选择合适的C还是很有必要的。选择核函数。核函数有很多种,如线性核、多项式核、Sigmoid核和RBF(RadialBasisfunction)核。本文选定RBF核为SVM的核函数(RBF核K(x,y)=exp(-γ||x-y||的平方),γ0)。因为RBF核可以将样本映射到一个更高维的空间,可以处理当类标签(ClassLabels)和特征之间的关系是非线性时的样例。Keerthi等[25]证明了一个有惩罚参数C的线性核同有参数(C,γ)(其中C为惩罚因子,γ为核参数)的RBF核具有相同的性能。对某些参数,Sigmoid核同RBF核具有相似的性能[26]。另外,RBF核与多项式核相比具有参数少的优点。因为参数的个数直接影响到模型选择的复杂性。非常重要的一点是0Kij≤1与多项式核相反,核值可能趋向无限(γxixj+r1)或者0γxixj+r1,跨度非常大。而且,必须注意的是Sigmoid核在某些参数下是不正确的(例如,没有两个向量的内积)。(4)用交叉验证找到最好的参数C和γ。使用RBF核时,要考虑两个参数C和γ。因为参数的选择并没有一定的先验知识,必须做某种类型的模型选择(参数搜索)。目的是确定好的(C,γ)使得分类器能正确的预测未知数据(即测试集数据),有较高的分类精确率。值得注意的是得到高的训练正确率即是分类器预测类标签已知的训练数据的正确率)不能保证在测试集上具有高的预测精度。因此,通常采用交叉验证方法提高预测精度。k折交叉验证(k-foldcrossvalidation)是将训练集合分成k个大小相同的子集。其中一个子集用于测试,其它k-1个子集用于对分类器进行训练。这样,整个训练集中的每一个子集被预测一次,交叉验证的正确率是k次正确分类数据百分比的平均值。它可以防止过拟合的问题。可以归纳为以下几个过程(顺序的):1.收集数据,相关性分析(p卡方检验),特征选择(主成份分析)。2.归一化数据。就是根据实际要求,将数据的取值范围转化为统一的区间如[a,b],a,b为整数。方法参考:利用抽样技术将数据集分为训练集和测试集。抽样技术有分层抽样,简单抽样(等概率抽样)4.将数据转化为软件(接口)所支持的格式。就libsvm(c++,java)来说,我们可以使用FormatDataLibsvm.xls将数据转化为libsvmm所要求的格式。参考:选择核函数,可以优先考虑rbf。6.对训练集利用交叉验证法选择最好的参数C和r(rbf核函数中的参数gama)。可以通过网格法寻找出最优的参数,注意一次交叉验证得到一个参数对所对应的模型精度,网格法目的就是找到使得模型精度达到对高的参数对(这里的参数对可能不止两个,有可能也有其他的),可以使用一些启发式的搜索来降低复杂度,虽然这个方法笨了点,但是它能得到很稳定的搜索结果。需要提到的这里在对训练集进行分割的时候涉及到抽样,一个较好的方法就是分层抽样。从这步可以看出其实Cross-Validation是一种评估算法的方法。7.用6中得到的参数对在整个训练集合上进行训练,从而得出模型。8.利用测试集测试模型,得到精度。这个精度可以认为是模型最终的精度。当然有人会担心3步中抽样会有一定的误差,导致8得到的精度不一定是最好的,因此可以重复3-8得到多个模型的精度,然后选择最好的一个精度最为模型的精度(或者求所有精度的均值做为模型精度)。如何使用交叉验证(cross-validatation)写于7月28日1条评论如何使用Cross-Validation写这份文件,最主要的目的是介绍如何正确的使用cross-validation,并举例一些常犯的错误。假设您对patternrecognition已经有基础的认识,希望这份文件对您论文中的实验内容能有所帮助。在patternrecognition与machinelearning的相关研究中,经常会将dataset分为training跟test这两个subsets,前者用以建立model,后者则用来评估该model对未知样本进行预测时的精确度,正规的说法是generalizationability。在往下叙述之前,这边就必须点出一个极为重要的观念:只有trainingdata才可以用在model的训练过程中,testdata则必须在model完成之后才被用来评估model优劣的依据。怎么将完整的dataset分为trainingset与testse
本文标题:交叉验证我的总结
链接地址:https://www.777doc.com/doc-5903072 .html