数据集的构建

## Training Dataset A set of examples used for learning. 这个是最好理解的,用来训练模型内参数的数据集,Classfier直接根据训练集来调整自身获得更好的分类效果。 ## Validation Dataset A set of examples used to tune the parameters of a classifier. 用于在训练过程中检验模型的状态,收敛情况。验证集通常用于调整超参数,根据几组模型验证集上的表现决定哪组超参数拥有最好的性能。 同时验证集在训练过程中还可以用来监控模型是否发生过拟合,一般来说验证集表现稳定后,若继续训练,训练集表现还会继续上升,但是验证集会出现不升反降的情况,这样一般就发生了过拟合。所以验证集也用来判断何时停止训练。 ## Test Dataset A set of examples used only to assess the performance of a fully-trained classifier. 测试集用来评价模型泛化能力,即之前模型使用验证集确定了超参数,使用训练集调整了参数,最后使用一个从没有见过的数据集来判断这个模型是否有效。 ## Differences 形象上来说**训练集**就像是学生的课本,学生根据课本里的内容来掌握知识,**验证集**就像是作业,通过作业可以知道 不同学生学习情况、进步的速度快慢,而最终的**测试集**就像是考试,考的题是平常都没有见过,考察学生举一反三的能力。 训练集直接参与了模型调慘的过程,显然不能用来反映模型真实的能力,这样一些 对课本死记硬背的学生(过拟合)将会拥有最好的成绩,显然不对。同理,由于验证集参与了人工调参(超参数)的过程,也不能用来最终评判一个模型,就像刷题库的学生也不能算是学习好的学生是吧。所以要通过最终的考试(测试集)来考察一个学(模)生(型)真正的能力。 但是仅凭一次考试就对模型的好坏进行评判显然是不合理的,所以接下来就要介绍**交叉验证法** ## Cross Validation 交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目标是在训练阶段定义一组用于“测试”模型的数据集,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。 ## 常见的交叉验证形式 ### Holdout 验证 常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。一般来说,少于原本样本三分之一的数据被选做验证数据。 ### k-fold 交叉验证 k折交叉验证(英语:k-fold cross-validation),将训练集分割成k个子样本,一个单独的子样本被保留作为验证模型的数据,其他k − 1个样本用来训练。交叉验证重复k次,每个子样本验证一次,平均k次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10次交叉验证是最常用的。 ### 留一验证 正如名称所建议,留一验证(英语:leave-one-out cross-validation, LOOCV)意指只使用原本样本中的一项来当做验证资料,而剩余的则留下来当做训练资料。这个步骤一直持续到每个样本都被当做一次验证资料。事实上,这等同于k折交叉验证,其中k为原本样本个数。 [5] 在某些情况下是存在有效率的演算法,如使用kernel regression 和吉洪诺夫正则化。 ### Adversarial validation 用于当测试集数据和训练数据或验证集数据分布存在显著差异时使用,主要通过在训练集数据中选择分布与测试集数据分布相似的数据作为交叉验证集。 但是,个人认为这是更偏向于Kaggle比赛的方法或技巧(trick),在实际中的作用有待商榷。 --- 转载:[Dataset Construction](https://www.yuque.com/agoclover/ml/miairi)