美文网首页
交叉验证

交叉验证

作者: 快乐的小飞熊 | 来源:发表于2017-03-06 14:12 被阅读0次

    1、为什么要进行交叉验证?
    目的:为了得到可靠稳定的模型

    交叉验证是一种模型选择方法,其将样本的一部分用于训练,另一部分用于验证。因此不仅考虑了训练误差,同时也考虑了泛化误差。

    2、交叉验证的概念
    交叉验证(Cross Validation),简称CV,它是用来验证分类器的性能一种统计分析方法。

    基本思想
    将原始的数据集进行分组,一部分作训练集,一部分作为验证集,首先用训练集对分类器进行训练,再用验证集来测试训练集得到的模型,以此来作为评价分类器的性能指标。

    为了减少交叉验证结果的可变性,对一个样本数据集进行多次不同的划分,得到不同的互补子集,进行多次交叉验证。取多次验证的平均值作为验证结果。

    PRESS:
    在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行验证,并求这小部分样本的验证误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被验证了一次而且仅被验证一次。把每个样本的预报误差平方加和,叫PRESS(predicted Error Sum of Squares)。

    3、交叉验证有哪些方法?
    (一)Hold-Out Method
    思路:
    将原始数据分为两组,一组是训练集,一组是验证集,利用训练集来训练分类器,然后利用验证集验证模型。进行多次划分,用均值来表示效能。
    优点:
    简单,只需要将原始数据随机的分成两组就行了。
    缺点:
    (1)没有达到交叉的效果。
    (2)随机分组,验证集分类的准确率与原始数据分组的关系很大。
    (3)有些数据可能从未做过训练或测试数据;而有些数据不止一次选为训练或测试数据。

    (二)K-fold Cross Validation(K-CV)
    思路:
    将原始数据均分成K组,每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终验证集的分类准确率的平均数作为此K-CV分类器下的性能指标。

    K的取值:
    一般是大于等于2,只有在原始数据集合数据量小的时候才会取2

    优点:
    有效的避免过拟合和欠拟合

    (三)Leave-One-Out Cross Validation(LOO-CV)
    思路:
    假设原始数据有N个样本,其实LOO-CV也就是N-CV,每个样本单独的作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型的最终的验证集的分类准确率的平均数作为此LOO-CV分类器的性能指标。

    优点:
    (1)每轮中几乎所有的样本都可以用于训练模型,因此能够使训练的模型最接近样本真实分布,评估的结果很可靠。
    (2)实验的过程中没有随机因素。

    缺点:
    如果样本量很大,那么需要建立的模型的数量也很大,计算成本高。

    **4、模型选择过程 **
    在了解交叉验证之后,简单介绍模型的选择过程:
    通过采用不同的输入训练样本,来决定机器学习算法中包含的各个参数值,叫做模型选择。
    (1)首先准备q个候选的模型
    (2)对每个模型求解它的学习结果
    (3)对学习误差排序,选择误差最小的模型作为最终的模型

    举例:将有标注的data分为训练集,(交叉)验证集,测试集三份:
    在做模型选择,更确切的说做模型参数选择的时候,这里以多项式kernel的SVM为例,我们需要选择的参数是多项式的阶数:
    1 训练:先用训练集在一次模型、二次模型、三次模型(几次指的是的z=Zθ(x) 阶数)情况下跑一下,然后用数值优化的算法求得在指定阶数情况下,使Training error最小的参数θ分别是多少

    2 参数寻优:用交叉验证集在1中得到的每个模型M(1,θ1)...M(k,θk)...M(n,θn)跑一下,计算出Cross Validation error,选择使这个error最小的模型次数k

    3 最终训练:给定阶数k,训练得出在Training Set+CV Set上,使Training error最小的参数θ,得到模型M(k,θk')

    总结:
    利用n-fold交叉验证,是现在做机器学习实验最常用的做法
    (1)数据按比例划分为训练集A、测试集B
    (2)使用训练数据A进行n-fold验证,训练集分为a1~an共n份,n份中的每一份ai轮流做CV set,其余n-1份作为Training set,这样训练n次,取n次所得CV error平均值作为一个模型最终的CV error,以此选出最优模型参数。
    (3) 再用整个训练集A在选出的最优模型参数下训练出一个模型。
    (4)最后在测试集B上测试给出结果。

    NG课程小结:
    就拿选择阶数的例子来说,如果我们把数据集分成了训练集和测试集,用训练集来进行参数的确定,用测试集来选择阶数d,再用测试集测模型是不准的;所以我们分成了三部分:训练集、验证集、测试集。其中验证集做的就是确定阶数d,用测试集来查看其泛化能力。

    参考资料:
    http://blog.csdn.net/chl033/article/details/4671750
    http://blog.sina.com.cn/s/blog_688077cf0100zqpj.html
    https://www.zhihu.com/question/23561944
    http://www.cnblogs.com/wei-li/archive/2011/12/01/2270244.html

    相关文章

      网友评论

          本文标题:交叉验证

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