您的位置:首页 > 其它

交叉验证之我见

2015-12-02 10:09 183 查看


常用的精度测试方法有交叉验证,例如10倍交叉验证(10-fold cross validation),将数据集分成十分,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10倍交叉验证求均值,例如10次10倍交叉验证,更精确一点。

当训练样本数目过少,采用“交叉验证法”(cross validation).

交叉验证法分两种:

1: K重交叉验证法:该方法是最为普遍的计算推广误差的方法之一。其过程为:将训练样本集随机分为K个集合,通常分为K等份,对其中的K-1个集合进行训练,得到一个决策函数,并用决策函数对剩下的一个集合进行样本测试。该过程重复K次,取K次过程中的测试错误的平均值作为推广误差。

2:
留一法:该方法可以说是K重交叉验证法的极端情况,即K=L,L为整个训练样本集的大小。该过程为 :对于第i个训练样本,将其取出,对剩下L-1个样本进行训练,得到决策函数,并用其测试第i个训练样本,该过程重复L次,用此方法求出的误差对于实际中的测试误差来说几乎是无偏的。

注意:当样本过少,即使交叉验证效果也不会理想,一般样本应在100以上.

k-fold validation中文就是"k-折交叉验证(确认)",其中的k是用户自己定的但它必须比原始的训练集中的元素个数n要小,即k<=n.著名的loo(leave one out,留一法)就是k-fold validation的一个特例,即loo中的k=n.
k-fold validation经常被用来训练NN,SVM等来确定一个最优的参数。它的基本思想就是将原始的训练集分成两部分:训练集2(为了与原始训练集相区别,本处称之为训练集2)与验证集,从原始训练集中选择n/k个元素组成验证集剩下的(k-1)*n/k个元素用来做训练集2。然后用训练集2来训练学习器等,用验证集来验证所得到的学习器(此处以分类为例,对回归应该也一样)的错误码率。然后再次选择另外n/k个元素组成验证集剩下的做为训练集2循环,直到所有元素n/k个元素全部被选择一遍为止。<
a312
span style="color:rgb(87,77,49);font-family:Georgia;font-size:9pt;">比较以上每次循环所得分类器的错误率把所得错误率最低的那个参数认为是最优的参数。k-fold cross-validation不是什么参数都可以调的,它可以调的只是离散的参数,比如网络hidden node的个数。对于连续的参数没法调。网络的权值是通过learning algorithm来调节的,只是用validation set来控制是否over fitting。跟k-fold cross-validation没有什么关系。除此之外,k-fold cross-validation主要是干什么: 根据一个样本集k次validation之后的误差的平均值来估计一个已经训练好的网络的泛化误差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: