zoukankan      html  css  js  c++  java
  • 测试/训练/验证集的关系

    训练集

    作用:估计模型

    学习样本数据集,通过匹配一些参数来建立一个分类器。建立一种分类的方式,主要是用来训练模型的。

    验证集

    作用:确定网络结构或者控制模型复杂程度的参数

    对学习出来的模型,调整分类器的参数,如在神经网络中选择隐藏单元数。验证集还用来确定网络结构或者控制模型复杂程度的参数。

    Russel 和 Norvig 认为用于模型拟合的训练数据集可以进一步划分成训练集和验证集。验证集是训练数据集的子集,用于对模型能力进行初步评估

    测试集

    作用:检验最终选择最优的模型的性能如何。

    主要是测试训练好的模型的分辨能力(识别率等)。

    传统情况下,对最终模型进行性能评估的数据叫作「测试集」。Russell 和 Norvig 在 AI 教科书《人工智能:一种现代方法》中再次强调了保持测试集完全独立的重要性。他们认为,以任何形式使用测试集中的信息都是一种「窥探」(peeking),因此他们建议封存测试集,直到模型调整全部完成再作为最后的评估。

    “模型窥探预留数据集是使用测试集选择并评估假设函数的后果。若要避免窥视,必须将测试集单独留出,直到模型学习过程完全结束,才能最终对模型假设进行独立的评估。(如果你对评估结果不满意,想返回寻找更好的模型假设,那么你必须获取并封存一组全新的测试集。)—Stuart Russell and Peter Norvig, page 709, Artificial Intelligence: A Modern Approach, 2009 (3rd edition)”

    总结

    【假如我们想评估在一系列观察值上使用特定的数据学习方法后所产生的测试误差,那么验证集方法非常适合该任务。它包括将这些观察值任意切分成两部分:训练集和验证集(又称留出集,hold-out set)。模型在训练集上进行拟合,然后使用拟合后的模型对验证集中保留的数据样本进行预测。并定量地计算模型验证误差,通常我们使用 MSE 对错误率进行评估,评估生成的验证集错误率即测试错误率。——Gareth James, et al., Page 176, An Introduction to Statistical Learning: with Applications in R, 2013.】

    • 训练数据集:用于模型拟合的数据样本。确定模型权值等。
    • 验证数据集:用于调整模型的超参数,为拟合后的模型提供无偏评估。如果模型配置中已包括在验证集上的调整,则该评估偏差会更大。
    • 测试数据集:为拟合后的最终模型提供无偏评估。测试已经训练好的模型的推广能力。当然,test set这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。
    • 验证数据集可能在其他形式的模型预准备中发挥作用,如特征选择。
    • 最终模型可以在训练数据集和验证数据集上进行拟合。

    一个典型的划分是训练集占总样本的50%,而其它各占25%,三部分都是从样本中随机抽取。样本少的时候,上面的划分就不合适了。常用的是留少部分做测试集。然后对其余N个样本采用K折交叉验证法。就是将样本打乱,然后均匀分成K份,轮流选择其中K-1份训练,剩余的一份做验证,计算预测误差平方和,最后把K次的预测误差平方和再做平均作为选择最优模型结构的依据。特别的K取N,就是留一法(leave one out)。

    附上一段伪代码:

    for each epoch
        for each training data instance
            propagate error through the network
            adjust the weights
            calculate the accuracy over training data
        for each validation data instance
            calculate the accuracy over the validation data
        if the threshold validation accuracy is met
            exit training
        else
            continue training
  • 相关阅读:
    5.对象创建型模式-原型PROTOTYPE
    4.对象创建型模式-工厂方法
    3.对象创建型模式-生成器
    一个小应用的dbcp和c3p0配置实例
    利用 java.lang.Runtime.addShutdownHook() 钩子程序,保证java程序安全退出
    初探maven插件机制
    【转载】Git push时重复输入用户名密码的问题
    【转载】 ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)
    【转载】[Java]读取文件方法大全
    【原创】iframe与父页面之间,变量、方法互相调用
  • 原文地址:https://www.cnblogs.com/nkh222/p/7650802.html
Copyright © 2011-2022 走看看