交叉验证(Cross validation)

交叉验证(Cross validation)


模型选择(Model Selection),从很多模型中选择一个较好地模型去解决解决学习问题。下面以多项式回归模型为例,介绍模型选择的基本内容。

  • 模型选择要解决什么问题?
    当使用如下多项式回归模型时,确定参数\(d\)的值。

    \[h_\theta (x)=g(\theta_0 + \theta_1 x + \theta_2 x^2 +...+ \theta_k x^d) \]

  • 模型选择是如何解决问题的?
    假设有限模型集合\(\mathcal{M}={M_1,M_2,...,M_d}\),其中\(M_k\)表示第\(k\)阶多项式回归模型。任务是根据某些原则从中选择最好的模型作为最终的模型。

交叉验证是模型选择中一类极为重要的方法。下面分别介绍交叉验证常用方法。


假设训练集为\(S\)

引例算法

  • 算法描述:

    1. \(S\)上训练\(\mathcal{M}\)中的每个模型\(M_i\),并得到模型实例\(h_i\)
    2. 选择使训练误差最小的模型实例。
  • 算法缺点:
    在多项式回归模型中,模型阶数(\(k\)值)越高,对训练集\(S\)的拟合程度越好,即拥有较小的训练误差。但是模型的泛化性能较差(过拟合)。以上方法总是优先选择高阶的模型。

hold-out cross validation

  • 算法描述:

    1. 将训练集\(S\)按一定比例随机划分成两个集合\(S_{train}\)\(S_{cv}\),如将\(S\)中的70%数据划分给\(S_{train}\),剩下的数据划分给\(S_{cv}\)。将\(S_{cv}\)称作hold-out交差验证集;
    2. 仅在\(S_{train}\)上训练模型\(M_i\),并得到模型实例\(h_i\)
    3. 计算\(S_{cv}\)在模型实例\(h_i\)的误差,并输出拥有最小误差的\(h_i\)
  • 算法优点:
    能够解决引例算法的过拟合问题。

  • 算法缺点:
    \(S_{cv}\)中数据用做模型的验证,而不是用于训练,这一部分数据被"浪费",对于提高模型准确度没有用处。

k-floder cross validation

  • 算法描述:

    1. 随机将训练集\(S\)划分成\(k\)个不相交的子集,记做\(S_1\),\(S_2\),...,\(S_k\)。其中,\(S_i \cap S_j = \emptyset,i \neq j\)\(\bigcup_{i=1}^{k} S_i = S\)
    2. 对于第个模型\(M_i\)
        errori = 0
        For j = 1,...,k
            hij = Train the model Mi on S-Sj
            Test the hij on Sj to get errorij
            errori += errorij
        averi = errori / k
    
    1. 选择使averi值最小的模型,并在整个训练集\(S\)上训练该模型作为最后的模型实例。
  • 说明: \(k=10\)是一种常用的选择。但是当数据量较少的时候,我们会考虑一种极端的做法,即取\(k=m\),其中\(m\)为训练集的元素个数(势)。这种做法被称做leave-one-out cross validation

posted @ 2018-01-25 16:51  望天下  阅读(434)  评论(0编辑  收藏  举报